static int sha1_size_cache_nr, sha1_size_cache_alloc;
static struct sha1_size_cache *locate_size_cache(unsigned char *sha1,
+ int find_only,
unsigned long size)
{
int first, last;
first = 0;
last = sha1_size_cache_nr;
while (last > first) {
- int next = (last + first) >> 1;
+ int cmp, next = (last + first) >> 1;
e = sha1_size_cache[next];
- int cmp = memcmp(e->sha1, sha1, 20);
+ cmp = memcmp(e->sha1, sha1, 20);
if (!cmp)
return e;
if (cmp < 0) {
first = next+1;
}
/* not found */
- if (size == UINT_MAX)
+ if (find_only)
return NULL;
/* insert to make it at "first" */
if (sha1_size_cache_alloc <= sha1_size_cache_nr) {
struct sha1_size_cache *e;
if (size_only) {
- e = locate_size_cache(s->sha1, UINT_MAX);
+ e = locate_size_cache(s->sha1, 1, 0);
if (e) {
s->size = e->size;
return 0;
}
if (!sha1_file_size(s->sha1, &s->size))
- locate_size_cache(s->sha1, s->size);
+ locate_size_cache(s->sha1, 0, s->size);
}
else {
s->data = read_sha1_file(s->sha1, type, &s->size);