convert some config callbacks to parse_config_key

These callers can drop some inline pointer arithmetic and magic offset constants, making them more readable and less error-prone (those constants had to match the lengths of strings, but there is no automatic verification of that fact). The "ep" pointer (presumably for "end pointer"), which points to the final key segment of the config variable, is given the more standard name "key" to describe its function rather than its derivation. Signed-off-by: Jeff King <peff@peff.net> Reviewed-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Jeff King committed Jan 23, 2013 at 01:24 UTC d731f0ade129a71237eff5a17f3196002cb439fb
3 files changed +13 -28
convert.c
+5 -9
@@ -457,7 +457,7 @@ static struct convert_driver {
457
458 static int read_convert_config(const char *var, const char *value, void *cb)
459 {
460 - const char *ep, *name;
460 + const char *key, *name;
461 int namelen;
462 struct convert_driver *drv;
463
@@ -465,10 +465,8 @@ static int read_convert_config(const char *var, const char *value, void *cb)
465 * External conversion drivers are configured using
466 * "filter.<name>.variable".
467 */
468 - if (prefixcmp(var, "filter.") || (ep = strrchr(var, '.')) == var + 6)
468 + if (parse_config_key(var, "filter", &name, &namelen, &key) < 0 || !name)
469 return 0;
470 - name = var + 7;
471 - namelen = ep - name;
470 for (drv = user_convert; drv; drv = drv->next)
471 if (!strncmp(drv->name, name, namelen) && !drv->name[namelen])
472 break;
@@ -479,8 +477,6 @@ static int read_convert_config(const char *var, const char *value, void *cb)
477 user_convert_tail = &(drv->next);
478 }
479
482 - ep++;
483 -
480 /*
481 * filter.<name>.smudge and filter.<name>.clean specifies
482 * the command line:
@@ -490,13 +486,13 @@ static int read_convert_config(const char *var, const char *value, void *cb)
486 * The command-line will not be interpolated in any way.
487 */
488
493 - if (!strcmp("smudge", ep))
489 + if (!strcmp("smudge", key))
490 return git_config_string(&drv->smudge, var, value);
491
496 - if (!strcmp("clean", ep))
492 + if (!strcmp("clean", key))
493 return git_config_string(&drv->clean, var, value);
494
499 - if (!strcmp("required", ep)) {
495 + if (!strcmp("required", key)) {
496 drv->required = git_config_bool(var, value);
497 return 0;
498 }
ll-merge.c
+5 -9
@@ -222,7 +222,7 @@ static const char *default_ll_merge;
222 static int read_merge_config(const char *var, const char *value, void *cb)
223 {
224 struct ll_merge_driver *fn;
225 - const char *ep, *name;
225 + const char *key, *name;
226 int namelen;
227
228 if (!strcmp(var, "merge.default")) {
@@ -236,15 +236,13 @@ static int read_merge_config(const char *var, const char *value, void *cb)
236 * especially, we do not want to look at variables such as
237 * "merge.summary", "merge.tool", and "merge.verbosity".
238 */
239 - if (prefixcmp(var, "merge.") || (ep = strrchr(var, '.')) == var + 5)
239 + if (parse_config_key(var, "merge", &name, &namelen, &key) < 0 || !name)
240 return 0;
241
242 /*
243 * Find existing one as we might be processing merge.<name>.var2
244 * after seeing merge.<name>.var1.
245 */
246 - name = var + 6;
247 - namelen = ep - name;
246 for (fn = ll_user_merge; fn; fn = fn->next)
247 if (!strncmp(fn->name, name, namelen) && !fn->name[namelen])
248 break;
@@ -256,16 +254,14 @@ static int read_merge_config(const char *var, const char *value, void *cb)
254 ll_user_merge_tail = &(fn->next);
255 }
256
259 - ep++;
260 -
261 - if (!strcmp("name", ep)) {
257 + if (!strcmp("name", key)) {
258 if (!value)
259 return error("%s: lacks value", var);
260 fn->description = xstrdup(value);
261 return 0;
262 }
263
268 - if (!strcmp("driver", ep)) {
264 + if (!strcmp("driver", key)) {
265 if (!value)
266 return error("%s: lacks value", var);
267 /*
@@ -289,7 +285,7 @@ static int read_merge_config(const char *var, const char *value, void *cb)
285 return 0;
286 }
287
292 - if (!strcmp("recursive", ep)) {
288 + if (!strcmp("recursive", key)) {
289 if (!value)
290 return error("%s: lacks value", var);
291 fn->recursive = xstrdup(value);
userdiff.c
+3 -10
@@ -188,20 +188,13 @@ static struct userdiff_driver *parse_driver(const char *var,
188 const char *value, const char *type)
189 {
190 struct userdiff_driver *drv;
191 - const char *dot;
192 - const char *name;
191 + const char *name, *key;
192 int namelen;
193
195 - if (prefixcmp(var, "diff."))
196 - return NULL;
197 - dot = strrchr(var, '.');
198 - if (dot == var + 4)
199 - return NULL;
200 - if (strcmp(type, dot+1))
194 + if (parse_config_key(var, "diff", &name, &namelen, &key) < 0 ||
195 + !name || strcmp(type, key))
196 return NULL;
197
203 - name = var + 5;
204 - namelen = dot - name;
198 drv = userdiff_find_by_namelen(name, namelen);
199 if (!drv) {
200 ALLOC_GROW(drivers, ndrivers+1, drivers_alloc);