Code

Change bad_ref_char() to return a boolean value
authorMichael Haggerty <mhagger@alum.mit.edu>
Thu, 15 Sep 2011 21:10:24 +0000 (23:10 +0200)
committerJunio C Hamano <gitster@pobox.com>
Wed, 5 Oct 2011 20:45:29 +0000 (13:45 -0700)
Previously most bad characters were indicated by returning 1, but "*"
was special-cased to return 2 instead of 1.  One caller examined the
return value to see whether the special case occurred.

But it is easier (to document and understand) for bad_ref_char()
simply to return a boolean value, treating "*" like any other bad
character.  Special-case the handling of "*" (which only occurs in
very specific circumstances) at the caller.  The resulting calling
code thereby also becomes more transparent.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
refs.c

diff --git a/refs.c b/refs.c
index a615043b34cd6d0507d8a30f7bd69445ec9f2456..fd29d894dc2f5ecf4cbcabc38196731f1ca2297d 100644 (file)
--- a/refs.c
+++ b/refs.c
@@ -860,22 +860,21 @@ int for_each_rawref(each_ref_fn fn, void *cb_data)
  * - it contains a "\" (backslash)
  */
 
+/* Return true iff ch is not allowed in reference names. */
 static inline int bad_ref_char(int ch)
 {
        if (((unsigned) ch) <= ' ' || ch == 0x7f ||
            ch == '~' || ch == '^' || ch == ':' || ch == '\\')
                return 1;
        /* 2.13 Pattern Matching Notation */
-       if (ch == '?' || ch == '[') /* Unsupported */
+       if (ch == '*' || ch == '?' || ch == '[') /* Unsupported */
                return 1;
-       if (ch == '*') /* Supported at the end */
-               return 2;
        return 0;
 }
 
 int check_ref_format(const char *ref)
 {
-       int ch, level, bad_type, last;
+       int ch, level, last;
        int ret = CHECK_REF_FORMAT_OK;
        const char *cp = ref;
 
@@ -890,9 +889,8 @@ int check_ref_format(const char *ref)
                /* we are at the beginning of the path component */
                if (ch == '.')
                        return CHECK_REF_FORMAT_ERROR;
-               bad_type = bad_ref_char(ch);
-               if (bad_type) {
-                       if (bad_type == 2 && (!*cp || *cp == '/') &&
+               if (bad_ref_char(ch)) {
+                       if (ch == '*' && (!*cp || *cp == '/') &&
                            ret == CHECK_REF_FORMAT_OK)
                                ret = CHECK_REF_FORMAT_WILDCARD;
                        else
@@ -902,8 +900,7 @@ int check_ref_format(const char *ref)
                last = ch;
                /* scan the rest of the path component */
                while ((ch = *cp++) != 0) {
-                       bad_type = bad_ref_char(ch);
-                       if (bad_type)
+                       if (bad_ref_char(ch))
                                return CHECK_REF_FORMAT_ERROR;
                        if (ch == '/')
                                break;