summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cache.h1
-rw-r--r--read-cache.c36
-rw-r--r--update-cache.c36
3 files changed, 37 insertions, 36 deletions
diff --git a/cache.h b/cache.h
index 900824abfa..a23ad51ae0 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 50d0be35e8..44b4b0fc69 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 413e09d48f..7a076beafc 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));