hash_object: correction for zero length file
The check whether size is zero was done after if size <= SMALL_FILE_SIZE, as result, zero size case was never triggered. Instead zero length file was treated as any other small file. This did not caused any problem, but if we have a special case for size equal to zero, it is better to make it work and avoid redundant malloc(). Signed-off-by: Dmitry Potapov <dpotapov@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Dmitry Potapov committed
May 11, 2010 at 01:38 UTC
08bda2085cc095863888bb4bb7a73960a9a379fd
1 file changed
+4
-3
sha1_file.c
+4
-3
@@ -2448,6 +2448,8 @@ int index_fd(unsigned char *sha1, int fd, struct stat *st, int write_object,
2448
else
2449
ret = -1;
2450
strbuf_release(&sbuf);
2451
+ } else if (!size) {
2452
+ ret = index_mem(sha1, NULL, size, write_object, type, path);
2453
} else if (size <= SMALL_FILE_SIZE) {
2454
char *buf = xmalloc(size);
2455
if (size == read_in_full(fd, buf, size))
@@ -2456,12 +2458,11 @@ int index_fd(unsigned char *sha1, int fd, struct stat *st, int write_object,
2458
else
2459
ret = error("short read %s", strerror(errno));
2460
free(buf);
2459
- } else if (size) {
2461
+ } else {
2462
void *buf = xmmap(NULL, size, PROT_READ, MAP_PRIVATE, fd, 0);
2463
ret = index_mem(sha1, buf, size, write_object, type, path);
2464
munmap(buf, size);
2463
- } else
2464
- ret = index_mem(sha1, NULL, size, write_object, type, path);
2465
+ }
2466
close(fd);
2467
return ret;
2468
}