diff options
author | Junio C Hamano <junkio@cox.net> | 2005-06-03 23:02:23 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-06-05 14:14:58 -0700 |
commit | 0601e131c95940701c153e35ba73b97914ec0b3f (patch) | |
tree | d42cc611e197f54e1429f4ffebf3ba0d105073b1 /diff.c | |
parent | 5aa7d94cd6376b2c9a7fa7bdc33fb306b940360a (diff) | |
download | git-0601e131c95940701c153e35ba73b97914ec0b3f.tar.gz |
[PATCH] diff.c: locate_size_cache() fix.
This fixes two bugs.
- declaration of auto variable "cmp" was preceeded by a
statement, causing compilation error on real C compilers;
noticed and patch given by Yoichi Yuasa.
- the function's calling convention was overloading its size
parameter to mean "largest possible value means do not add
entry", which was a bad taste. Brought up during a
discussion with Peter Baudis.
Signed-off-by: Junio C Hamano <junkio@cox.net>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'diff.c')
-rw-r--r-- | diff.c | 11 |
1 files changed, 6 insertions, 5 deletions
@@ -236,6 +236,7 @@ static struct sha1_size_cache { 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; @@ -244,9 +245,9 @@ static struct sha1_size_cache *locate_size_cache(unsigned char *sha1, 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) { @@ -256,7 +257,7 @@ static struct sha1_size_cache *locate_size_cache(unsigned char *sha1, 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) { @@ -337,13 +338,13 @@ int diff_populate_filespec(struct diff_filespec *s, int size_only) 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); |