diff options
author | Carlos Martín Nieto <cmn@dwim.me> | 2014-10-10 17:58:35 +0200 |
---|---|---|
committer | Carlos Martín Nieto <cmn@dwim.me> | 2014-10-10 17:58:35 +0200 |
commit | 4c0c001529426771d6a208af317df19d08d86434 (patch) | |
tree | b39612d25c9652df06753f1f46a4da14cf3526dd | |
parent | 33ca3565988dd12ba35bdf222714a8c128b50d3f (diff) | |
parent | c6ba8a3765101adf61d7064e34519d2ff7512941 (diff) | |
download | libgit2-4c0c001529426771d6a208af317df19d08d86434.tar.gz |
Merge pull request #2498 from linquize/read-large-file
Can read large file larger than 2GB on Win64
-rw-r--r-- | src/posix.c | 7 | ||||
-rw-r--r-- | src/posix.h | 2 |
2 files changed, 4 insertions, 5 deletions
diff --git a/src/posix.c b/src/posix.c index 7aeb0e6c1..21b049e1b 100644 --- a/src/posix.c +++ b/src/posix.c @@ -151,15 +151,14 @@ int p_rename(const char *from, const char *to) #endif /* GIT_WIN32 */ -int p_read(git_file fd, void *buf, size_t cnt) +ssize_t p_read(git_file fd, void *buf, size_t cnt) { char *b = buf; while (cnt) { ssize_t r; #ifdef GIT_WIN32 - assert((size_t)((unsigned int)cnt) == cnt); - r = read(fd, b, (unsigned int)cnt); + r = read(fd, b, cnt > INT_MAX ? INT_MAX : (unsigned int)cnt); #else r = read(fd, b, cnt); #endif @@ -173,7 +172,7 @@ int p_read(git_file fd, void *buf, size_t cnt) cnt -= r; b += r; } - return (int)(b - (char *)buf); + return (b - (char *)buf); } int p_write(git_file fd, const void *buf, size_t cnt) diff --git a/src/posix.h b/src/posix.h index 9ef348739..71c403c2f 100644 --- a/src/posix.h +++ b/src/posix.h @@ -97,7 +97,7 @@ typedef int git_file; * Use your manpages to check the docs on these. */ -extern int p_read(git_file fd, void *buf, size_t cnt); +extern ssize_t p_read(git_file fd, void *buf, size_t cnt); extern int p_write(git_file fd, const void *buf, size_t cnt); #define p_close(fd) close(fd) |