validate_headref: use skip_prefix for symref parsing
authorJeff King <peff@peff.net>
Wed, 27 Sep 2017 06:17:26 +0000 (02:17 -0400)
committerJunio C Hamano <gitster@pobox.com>
Wed, 27 Sep 2017 07:06:31 +0000 (16:06 +0900)
Since the previous commit guarantees that our symref buffer
is NUL-terminated, we can just use skip_prefix() and friends
to parse it. This is shorter and saves us having to deal
with magic numbers and keeping the "len" counter up to date.

While we're at it, let's name the rather obscure "buf" to
"refname", since that is the thing we are parsing with it.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
path.c
diff --git a/path.c b/path.c
index 1ca2cf9a289731174c8e7d4ff0e790e0be1d9f18..650c66c32d9b857238c86c099ab2d0982e2eb380 100644 (file)
--- a/path.c
+++ b/path.c
@@ -636,7 +636,8 @@ void strbuf_git_common_path(struct strbuf *sb,
 int validate_headref(const char *path)
 {
        struct stat st;
-       char *buf, buffer[256];
+       char buffer[256];
+       const char *refname;
        unsigned char sha1[20];
        int fd;
        ssize_t len;
@@ -668,14 +669,10 @@ int validate_headref(const char *path)
        /*
         * Is it a symbolic ref?
         */
-       if (len < 4)
-               return -1;
-       if (!memcmp("ref:", buffer, 4)) {
-               buf = buffer + 4;
-               len -= 4;
-               while (len && isspace(*buf))
-                       buf++, len--;
-               if (len >= 5 && !memcmp("refs/", buf, 5))
+       if (skip_prefix(buffer, "ref:", &refname)) {
+               while (isspace(*refname))
+                       refname++;
+               if (starts_with(refname, "refs/"))
                        return 0;
        }