@@ -17,12 +17,16 @@ static int allow_add = 0, allow_remove = 0;
17
17
static int index_fd (const char * path , int namelen , struct cache_entry * ce , int fd , struct stat * st )
18
18
{
19
19
z_stream stream ;
20
- int max_out_bytes = namelen + st -> st_size + 200 ;
20
+ unsigned long size = st -> st_size ;
21
+ int max_out_bytes = namelen + size + 200 ;
21
22
void * out = malloc (max_out_bytes );
22
23
void * metadata = malloc (namelen + 200 );
23
- void * in = mmap ( NULL , st -> st_size , PROT_READ , MAP_PRIVATE , fd , 0 ) ;
24
+ void * in ;
24
25
SHA_CTX c ;
25
26
27
+ in = "" ;
28
+ if (size )
29
+ in = mmap (NULL , size , PROT_READ , MAP_PRIVATE , fd , 0 );
26
30
close (fd );
27
31
if (!out || (int )(long )in == -1 )
28
32
return -1 ;
@@ -34,7 +38,7 @@ static int index_fd(const char *path, int namelen, struct cache_entry *ce, int f
34
38
* ASCII size + nul byte
35
39
*/
36
40
stream .next_in = metadata ;
37
- stream .avail_in = 1 + sprintf (metadata , "blob %lu" , ( unsigned long ) st -> st_size );
41
+ stream .avail_in = 1 + sprintf (metadata , "blob %lu" , size );
38
42
stream .next_out = out ;
39
43
stream .avail_out = max_out_bytes ;
40
44
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
44
48
* File content
45
49
*/
46
50
stream .next_in = in ;
47
- stream .avail_in = st -> st_size ;
51
+ stream .avail_in = size ;
48
52
while (deflate (& stream , Z_FINISH ) == Z_OK )
49
53
/*nothing */ ;
50
54
0 commit comments