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);