Skip to content

Commit d731f0a

Browse files
peffgitster
authored andcommitted
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 <[email protected]> Reviewed-by: Jonathan Nieder <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 785a042 commit d731f0a

File tree

3 files changed

+13
-28
lines changed

3 files changed

+13
-28
lines changed

convert.c

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -457,18 +457,16 @@ static struct convert_driver {
457457

458458
static int read_convert_config(const char *var, const char *value, void *cb)
459459
{
460-
const char *ep, *name;
460+
const char *key, *name;
461461
int namelen;
462462
struct convert_driver *drv;
463463

464464
/*
465465
* External conversion drivers are configured using
466466
* "filter.<name>.variable".
467467
*/
468-
if (prefixcmp(var, "filter.") || (ep = strrchr(var, '.')) == var + 6)
468+
if (parse_config_key(var, "filter", &name, &namelen, &key) < 0 || !name)
469469
return 0;
470-
name = var + 7;
471-
namelen = ep - name;
472470
for (drv = user_convert; drv; drv = drv->next)
473471
if (!strncmp(drv->name, name, namelen) && !drv->name[namelen])
474472
break;
@@ -479,8 +477,6 @@ static int read_convert_config(const char *var, const char *value, void *cb)
479477
user_convert_tail = &(drv->next);
480478
}
481479

482-
ep++;
483-
484480
/*
485481
* filter.<name>.smudge and filter.<name>.clean specifies
486482
* the command line:
@@ -490,13 +486,13 @@ static int read_convert_config(const char *var, const char *value, void *cb)
490486
* The command-line will not be interpolated in any way.
491487
*/
492488

493-
if (!strcmp("smudge", ep))
489+
if (!strcmp("smudge", key))
494490
return git_config_string(&drv->smudge, var, value);
495491

496-
if (!strcmp("clean", ep))
492+
if (!strcmp("clean", key))
497493
return git_config_string(&drv->clean, var, value);
498494

499-
if (!strcmp("required", ep)) {
495+
if (!strcmp("required", key)) {
500496
drv->required = git_config_bool(var, value);
501497
return 0;
502498
}

ll-merge.c

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,7 @@ static const char *default_ll_merge;
222222
static int read_merge_config(const char *var, const char *value, void *cb)
223223
{
224224
struct ll_merge_driver *fn;
225-
const char *ep, *name;
225+
const char *key, *name;
226226
int namelen;
227227

228228
if (!strcmp(var, "merge.default")) {
@@ -236,15 +236,13 @@ static int read_merge_config(const char *var, const char *value, void *cb)
236236
* especially, we do not want to look at variables such as
237237
* "merge.summary", "merge.tool", and "merge.verbosity".
238238
*/
239-
if (prefixcmp(var, "merge.") || (ep = strrchr(var, '.')) == var + 5)
239+
if (parse_config_key(var, "merge", &name, &namelen, &key) < 0 || !name)
240240
return 0;
241241

242242
/*
243243
* Find existing one as we might be processing merge.<name>.var2
244244
* after seeing merge.<name>.var1.
245245
*/
246-
name = var + 6;
247-
namelen = ep - name;
248246
for (fn = ll_user_merge; fn; fn = fn->next)
249247
if (!strncmp(fn->name, name, namelen) && !fn->name[namelen])
250248
break;
@@ -256,16 +254,14 @@ static int read_merge_config(const char *var, const char *value, void *cb)
256254
ll_user_merge_tail = &(fn->next);
257255
}
258256

259-
ep++;
260-
261-
if (!strcmp("name", ep)) {
257+
if (!strcmp("name", key)) {
262258
if (!value)
263259
return error("%s: lacks value", var);
264260
fn->description = xstrdup(value);
265261
return 0;
266262
}
267263

268-
if (!strcmp("driver", ep)) {
264+
if (!strcmp("driver", key)) {
269265
if (!value)
270266
return error("%s: lacks value", var);
271267
/*
@@ -289,7 +285,7 @@ static int read_merge_config(const char *var, const char *value, void *cb)
289285
return 0;
290286
}
291287

292-
if (!strcmp("recursive", ep)) {
288+
if (!strcmp("recursive", key)) {
293289
if (!value)
294290
return error("%s: lacks value", var);
295291
fn->recursive = xstrdup(value);

userdiff.c

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -188,20 +188,13 @@ static struct userdiff_driver *parse_driver(const char *var,
188188
const char *value, const char *type)
189189
{
190190
struct userdiff_driver *drv;
191-
const char *dot;
192-
const char *name;
191+
const char *name, *key;
193192
int namelen;
194193

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))
201196
return NULL;
202197

203-
name = var + 5;
204-
namelen = dot - name;
205198
drv = userdiff_find_by_namelen(name, namelen);
206199
if (!drv) {
207200
ALLOC_GROW(drivers, ndrivers+1, drivers_alloc);

0 commit comments

Comments
 (0)