diff options
author | Pavel Roskin <proski@gnu.org> | 2005-07-29 10:49:14 -0400 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2005-07-29 17:21:48 -0700 |
commit | e35f9824159bba94eecdf22d198799701ed60940 (patch) | |
tree | 0d1d08eec92d179ce02b4c4b5e961e0f6c1feddc /read-cache.c | |
parent | 1df092d211868b3b74f5b3981fad9b195a0bedad (diff) | |
download | git-e35f9824159bba94eecdf22d198799701ed60940.tar.gz git-e35f9824159bba94eecdf22d198799701ed60940.tar.xz |
[PATCH] mmap error handling
I have reviewed all occurrences of mmap() in git and fixed three types
of errors/defects:
1) The result is not checked.
2) The file descriptor is closed if mmap() succeeds, but not when it
fails.
3) Various casts applied to -1 are used instead of MAP_FAILED, which is
specifically defined to check mmap() return value.
[jc: This is a second round of Pavel's patch. He fixed up the problem
that close() potentially clobbering the errno from mmap, which
the first round had.]
Signed-off-by: Pavel Roskin <proski@gnu.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'read-cache.c')
-rw-r--r-- | read-cache.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/read-cache.c b/read-cache.c index f448ab17e..5820f18d9 100644 --- a/read-cache.c +++ b/read-cache.c @@ -392,7 +392,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 +400,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; |