From 3607c27f5fa144992c7962bb8817b950e033fe94 Mon Sep 17 00:00:00 2001 From: Linus Torvalds Date: Mon, 11 Apr 2005 18:02:00 -0700 Subject: [PATCH] Allow zero-sized files to be checked in. The kernel may not want it, but others probably do. Noted (again) by Junio Hamano. --- update-cache.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/update-cache.c b/update-cache.c index 25db78908..d08e89523 100644 --- a/update-cache.c +++ b/update-cache.c @@ -17,12 +17,16 @@ static int allow_add = 0, allow_remove = 0; static int index_fd(const char *path, int namelen, struct cache_entry *ce, int fd, struct stat *st) { z_stream stream; - int max_out_bytes = namelen + st->st_size + 200; + unsigned long size = st->st_size; + int max_out_bytes = namelen + size + 200; void *out = malloc(max_out_bytes); void *metadata = malloc(namelen + 200); - void *in = mmap(NULL, st->st_size, PROT_READ, MAP_PRIVATE, fd, 0); + void *in; SHA_CTX c; + in = ""; + if (size) + in = mmap(NULL, size, PROT_READ, MAP_PRIVATE, fd, 0); close(fd); if (!out || (int)(long)in == -1) return -1; @@ -34,7 +38,7 @@ static int index_fd(const char *path, int namelen, struct cache_entry *ce, int f * ASCII size + nul byte */ stream.next_in = metadata; - stream.avail_in = 1+sprintf(metadata, "blob %lu", (unsigned long) st->st_size); + stream.avail_in = 1+sprintf(metadata, "blob %lu", size); stream.next_out = out; stream.avail_out = max_out_bytes; while (deflate(&stream, 0) == Z_OK) @@ -44,7 +48,7 @@ static int index_fd(const char *path, int namelen, struct cache_entry *ce, int f * File content */ stream.next_in = in; - stream.avail_in = st->st_size; + stream.avail_in = size; while (deflate(&stream, Z_FINISH) == Z_OK) /*nothing */; -- 2.26.2