@matheusbsbs / matheus-bagliano / commits / 08bda2085c
Fork 0

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 }