OSDN Git Service

refs: use strncmp() instead of strlen() and memcmp()
authorRené Scharfe <rene.scharfe@lsrfire.ath.cx>
Wed, 16 Jan 2013 01:08:16 +0000 (02:08 +0100)
committerJunio C Hamano <gitster@pobox.com>
Wed, 16 Jan 2013 17:48:36 +0000 (09:48 -0800)
Simplify ref_entry_cmp_sslice() by using strncmp() to compare the
length-limited key and a NUL-terminated entry.  While we're at it,
retain the const attribute of the input pointers.

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
refs.c

diff --git a/refs.c b/refs.c
index 52709ab..257472f 100644 (file)
--- a/refs.c
+++ b/refs.c
@@ -322,14 +322,12 @@ struct string_slice {
 
 static int ref_entry_cmp_sslice(const void *key_, const void *ent_)
 {
-       struct string_slice *key = (struct string_slice *)key_;
-       struct ref_entry *ent = *(struct ref_entry **)ent_;
-       int entlen = strlen(ent->name);
-       int cmplen = key->len < entlen ? key->len : entlen;
-       int cmp = memcmp(key->str, ent->name, cmplen);
+       const struct string_slice *key = key_;
+       const struct ref_entry *ent = *(const struct ref_entry * const *)ent_;
+       int cmp = strncmp(key->str, ent->name, key->len);
        if (cmp)
                return cmp;
-       return key->len - entlen;
+       return '\0' - (unsigned char)ent->name[key->len];
 }
 
 /*