Andrew's git
/
gitweb.git
/ diff
summary
|
log
|
commit
| diff |
tree
commit
grep
author
committer
pickaxe
?
re
Do not mmap-copy the whole thing; just use copy_fd()
author
Junio C Hamano
<junkio@cox.net>
Sat, 29 Oct 2005 20:11:36 +0000
(13:11 -0700)
committer
Junio C Hamano
<junkio@cox.net>
Sat, 29 Oct 2005 20:11:36 +0000
(13:11 -0700)
Signed-off-by: Junio C Hamano <junkio@cox.net>
local-fetch.c
patch
|
blob
|
history
raw
|
patch
|
inline
| side by side (from parent 1:
0ffdbbf
)
diff --git
a/local-fetch.c
b/local-fetch.c
index 0a071144b584a419270d0bc8bf34273b85962de0..0931109143e0ce1c2f03f654b3ab67965220011a 100644
(file)
--- a/
local-fetch.c
+++ b/
local-fetch.c
@@
-83,31
+83,23
@@
static int copy_file(const char *source, char *dest, const char *hex,
}
}
if (use_filecopy) {
}
}
if (use_filecopy) {
- int ifd, ofd, status;
- struct stat st;
- void *map;
+ int ifd, ofd, status = 0;
+
ifd = open(source, O_RDONLY);
ifd = open(source, O_RDONLY);
- if (ifd < 0 || fstat(ifd, &st) < 0) {
- int err = errno;
- if (ifd >= 0)
- close(ifd);
- if (!warn_if_not_exists && err == ENOENT)
+ if (ifd < 0) {
+ if (!warn_if_not_exists && errno == ENOENT)
return -1;
fprintf(stderr, "cannot open %s\n", source);
return -1;
}
return -1;
fprintf(stderr, "cannot open %s\n", source);
return -1;
}
-
map = mmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE, ifd, 0
);
- close(ifd);
- if (map == MAP_FAILED) {
-
fprintf(stderr, "cannot mmap %s\n", source
);
+
ofd = open(dest, O_WRONLY | O_CREAT | O_EXCL, 0666
);
+ if (ofd < 0) {
+ fprintf(stderr, "cannot open %s\n", dest);
+
close(ifd
);
return -1;
}
return -1;
}
- ofd = open(dest, O_WRONLY | O_CREAT | O_EXCL, 0666);
- status = ((ofd < 0) ||
- (write(ofd, map, st.st_size) != st.st_size));
- munmap(map, st.st_size);
- if (ofd >= 0)
- close(ofd);
+ status = copy_fd(ifd, ofd);
+ close(ofd);
if (status)
fprintf(stderr, "cannot write %s\n", dest);
else
if (status)
fprintf(stderr, "cannot write %s\n", dest);
else