OSDN Git Service

Seek back to current filepos when mmap()ing with NO_MMAP
authorJohannes Schindelin <Johannes.Schindelin@gmx.de>
Wed, 15 Nov 2006 16:27:54 +0000 (17:27 +0100)
committerJunio C Hamano <junkio@cox.net>
Wed, 15 Nov 2006 18:23:47 +0000 (10:23 -0800)
"git-index-pack --fix-thin" relies on mmap() not changing the current
file position (otherwise the pack will be corrupted when writing the
final SHA1). Meet that expectation.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
compat/mmap.c

index 55cb120..a4d2e50 100644 (file)
@@ -7,6 +7,7 @@
 void *gitfakemmap(void *start, size_t length, int prot , int flags, int fd, off_t offset)
 {
        int n = 0;
+       off_t current_offset = lseek(fd, 0, SEEK_CUR);
 
        if (start != NULL || !(flags & MAP_PRIVATE))
                die("Invalid usage of gitfakemmap.");
@@ -39,6 +40,11 @@ void *gitfakemmap(void *start, size_t length, int prot , int flags, int fd, off_
                n += count;
        }
 
+       if (current_offset != lseek(fd, current_offset, SEEK_SET)) {
+               errno = EINVAL;
+               return MAP_FAILED;
+       }
+
        return start;
 }