Make "cache_name_pos()" available to others.
authorLinus Torvalds <torvalds@ppc970.osdl.org>
Sat, 9 Apr 2005 16:26:55 +0000 (09:26 -0700)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Sat, 9 Apr 2005 16:26:55 +0000 (09:26 -0700)
It finds the cache entry position for a given name, and is
generally useful. Sure, everybody can just scan the active
cache array, but since it's sorted, you actually want to
search it with a binary search, so let's not duplicate that
logic all over the place.

cache.h
read-cache.c
update-cache.c

diff --git a/cache.h b/cache.h
index 900824a..a23ad51 100644 (file)
--- a/cache.h
+++ b/cache.h
@@ -73,6 +73,7 @@ unsigned int active_nr, active_alloc;
 
 /* Initialize the cache information */
 extern int read_cache(void);
+extern int cache_name_pos(const char *name, int namelen);
 
 /* Return a statically allocated filename matching the sha1 signature */
 extern char *sha1_file_name(unsigned char *sha1);
index 50d0be3..44b4b0f 100644 (file)
@@ -222,6 +222,42 @@ static int error(const char * string)
        return -1;
 }
 
+static int cache_name_compare(const char *name1, int len1, const char *name2, int len2)
+{
+       int len = len1 < len2 ? len1 : len2;
+       int cmp;
+
+       cmp = memcmp(name1, name2, len);
+       if (cmp)
+               return cmp;
+       if (len1 < len2)
+               return -1;
+       if (len1 > len2)
+               return 1;
+       return 0;
+}
+
+int cache_name_pos(const char *name, int namelen)
+{
+       int first, last;
+
+       first = 0;
+       last = active_nr;
+       while (last > first) {
+               int next = (last + first) >> 1;
+               struct cache_entry *ce = active_cache[next];
+               int cmp = cache_name_compare(name, namelen, ce->name, ce->namelen);
+               if (!cmp)
+                       return -next-1;
+               if (cmp < 0) {
+                       last = next;
+                       continue;
+               }
+               first = next+1;
+       }
+       return first;
+}
+
 static int verify_hdr(struct cache_header *hdr, unsigned long size)
 {
        SHA_CTX c;
index 413e09d..7a076be 100644 (file)
@@ -5,42 +5,6 @@
  */
 #include "cache.h"
 
-static int cache_name_compare(const char *name1, int len1, const char *name2, int len2)
-{
-       int len = len1 < len2 ? len1 : len2;
-       int cmp;
-
-       cmp = memcmp(name1, name2, len);
-       if (cmp)
-               return cmp;
-       if (len1 < len2)
-               return -1;
-       if (len1 > len2)
-               return 1;
-       return 0;
-}
-
-static int cache_name_pos(const char *name, int namelen)
-{
-       int first, last;
-
-       first = 0;
-       last = active_nr;
-       while (last > first) {
-               int next = (last + first) >> 1;
-               struct cache_entry *ce = active_cache[next];
-               int cmp = cache_name_compare(name, namelen, ce->name, ce->namelen);
-               if (!cmp)
-                       return -next-1;
-               if (cmp < 0) {
-                       last = next;
-                       continue;
-               }
-               first = next+1;
-       }
-       return first;
-}
-
 static int remove_file_from_cache(char *path)
 {
        int pos = cache_name_pos(path, strlen(path));