From eb38c22f535c7c973f27b62845c5136c4be0ae49 Mon Sep 17 00:00:00 2001 From: Linus Torvalds Date: Sat, 9 Apr 2005 09:26:55 -0700 Subject: [PATCH] Make "cache_name_pos()" available to others. 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 | 1 + read-cache.c | 36 ++++++++++++++++++++++++++++++++++++ update-cache.c | 36 ------------------------------------ 3 files changed, 37 insertions(+), 36 deletions(-) diff --git a/cache.h b/cache.h index 900824abf..a23ad51ae 100644 --- 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); diff --git a/read-cache.c b/read-cache.c index 50d0be35e..44b4b0fc6 100644 --- a/read-cache.c +++ b/read-cache.c @@ -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; diff --git a/update-cache.c b/update-cache.c index 413e09d48..7a076beaf 100644 --- a/update-cache.c +++ b/update-cache.c @@ -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)); -- 2.26.2