convert some config callbacks to parse_config_key
authorJeff King <peff@peff.net>
Wed, 23 Jan 2013 06:24:23 +0000 (01:24 -0500)
committerJunio C Hamano <gitster@pobox.com>
Wed, 23 Jan 2013 16:41:50 +0000 (08:41 -0800)
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>
convert.c
ll-merge.c
userdiff.c

index 66021550c32f86e662fe5da84c852e80ae790450..3520252d3abaf49d4b7682ad083da8b7ae6be4c6 100644 (file)
--- a/convert.c
+++ b/convert.c
@@ -457,7 +457,7 @@ static struct convert_driver {
 
 static int read_convert_config(const char *var, const char *value, void *cb)
 {
-       const char *ep, *name;
+       const char *key, *name;
        int namelen;
        struct convert_driver *drv;
 
@@ -465,10 +465,8 @@ static int read_convert_config(const char *var, const char *value, void *cb)
         * External conversion drivers are configured using
         * "filter.<name>.variable".
         */
-       if (prefixcmp(var, "filter.") || (ep = strrchr(var, '.')) == var + 6)
+       if (parse_config_key(var, "filter", &name, &namelen, &key) < 0 || !name)
                return 0;
-       name = var + 7;
-       namelen = ep - name;
        for (drv = user_convert; drv; drv = drv->next)
                if (!strncmp(drv->name, name, namelen) && !drv->name[namelen])
                        break;
@@ -479,8 +477,6 @@ static int read_convert_config(const char *var, const char *value, void *cb)
                user_convert_tail = &(drv->next);
        }
 
-       ep++;
-
        /*
         * filter.<name>.smudge and filter.<name>.clean specifies
         * the command line:
@@ -490,13 +486,13 @@ static int read_convert_config(const char *var, const char *value, void *cb)
         * The command-line will not be interpolated in any way.
         */
 
-       if (!strcmp("smudge", ep))
+       if (!strcmp("smudge", key))
                return git_config_string(&drv->smudge, var, value);
 
-       if (!strcmp("clean", ep))
+       if (!strcmp("clean", key))
                return git_config_string(&drv->clean, var, value);
 
-       if (!strcmp("required", ep)) {
+       if (!strcmp("required", key)) {
                drv->required = git_config_bool(var, value);
                return 0;
        }
index acea33bf1babfe541c319081f14625ac779bb582..fb61ea66a13eba3a8e91a05dbe1c37de98cec853 100644 (file)
@@ -222,7 +222,7 @@ static const char *default_ll_merge;
 static int read_merge_config(const char *var, const char *value, void *cb)
 {
        struct ll_merge_driver *fn;
-       const char *ep, *name;
+       const char *key, *name;
        int namelen;
 
        if (!strcmp(var, "merge.default")) {
@@ -236,15 +236,13 @@ static int read_merge_config(const char *var, const char *value, void *cb)
         * especially, we do not want to look at variables such as
         * "merge.summary", "merge.tool", and "merge.verbosity".
         */
-       if (prefixcmp(var, "merge.") || (ep = strrchr(var, '.')) == var + 5)
+       if (parse_config_key(var, "merge", &name, &namelen, &key) < 0 || !name)
                return 0;
 
        /*
         * Find existing one as we might be processing merge.<name>.var2
         * after seeing merge.<name>.var1.
         */
-       name = var + 6;
-       namelen = ep - name;
        for (fn = ll_user_merge; fn; fn = fn->next)
                if (!strncmp(fn->name, name, namelen) && !fn->name[namelen])
                        break;
@@ -256,16 +254,14 @@ static int read_merge_config(const char *var, const char *value, void *cb)
                ll_user_merge_tail = &(fn->next);
        }
 
-       ep++;
-
-       if (!strcmp("name", ep)) {
+       if (!strcmp("name", key)) {
                if (!value)
                        return error("%s: lacks value", var);
                fn->description = xstrdup(value);
                return 0;
        }
 
-       if (!strcmp("driver", ep)) {
+       if (!strcmp("driver", key)) {
                if (!value)
                        return error("%s: lacks value", var);
                /*
@@ -289,7 +285,7 @@ static int read_merge_config(const char *var, const char *value, void *cb)
                return 0;
        }
 
-       if (!strcmp("recursive", ep)) {
+       if (!strcmp("recursive", key)) {
                if (!value)
                        return error("%s: lacks value", var);
                fn->recursive = xstrdup(value);
index ed958ef6b8b912436ad0145fe650adea083412e3..a4ea1e97b73fbb81a1c0afb1ee6908fa9f4f877f 100644 (file)
@@ -188,20 +188,13 @@ static struct userdiff_driver *parse_driver(const char *var,
                const char *value, const char *type)
 {
        struct userdiff_driver *drv;
-       const char *dot;
-       const char *name;
+       const char *name, *key;
        int namelen;
 
-       if (prefixcmp(var, "diff."))
-               return NULL;
-       dot = strrchr(var, '.');
-       if (dot == var + 4)
-               return NULL;
-       if (strcmp(type, dot+1))
+       if (parse_config_key(var, "diff", &name, &namelen, &key) < 0 ||
+           !name || strcmp(type, key))
                return NULL;
 
-       name = var + 5;
-       namelen = dot - name;
        drv = userdiff_find_by_namelen(name, namelen);
        if (!drv) {
                ALLOC_GROW(drivers, ndrivers+1, drivers_alloc);