X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=read-cache.c;h=6eff4c8401b820b001a3ed48e8086c4cf1cd8f5c;hb=34143b2639625f29edf7b1c0c5af58e545845911;hp=f448ab17e279d2fb4e2cfa91cfc61be6f91128db;hpb=89ab859e9452cbc8f1f15afab52257e9b789c899;p=git.git diff --git a/read-cache.c b/read-cache.c index f448ab17..6eff4c84 100644 --- a/read-cache.c +++ b/read-cache.c @@ -191,6 +191,8 @@ int ce_path_match(const struct cache_entry *ce, const char **pathspec) return 1; if (name[matchlen] == '/' || !name[matchlen]) return 1; + if (!matchlen) + return 1; } return 0; } @@ -392,7 +394,7 @@ int read_cache(void) return (errno == ENOENT) ? 0 : error("open failed"); size = 0; // avoid gcc warning - map = (void *)-1; + map = MAP_FAILED; if (!fstat(fd, &st)) { size = st.st_size; errno = EINVAL; @@ -400,7 +402,7 @@ int read_cache(void) map = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0); } close(fd); - if (-1 == (int)(long)map) + if (map == MAP_FAILED) return error("mmap failed"); hdr = map; @@ -460,6 +462,13 @@ static int ce_flush(SHA_CTX *context, int fd) SHA1_Update(context, write_buffer, left); } + /* Flush first if not enough space for SHA1 signature */ + if (left + 20 > WRITE_BUFFER_SIZE) { + if (write(fd, write_buffer, left) != left) + return -1; + left = 0; + } + /* Append the SHA1 signature at the end */ SHA1_Final(write_buffer + left, context); left += 20;