Can read large file larger than 2GB on Windows

This commit is contained in:
Linquize 2014-08-02 21:57:56 +08:00
parent 59403f1ff5
commit c6ba8a3765
2 changed files with 4 additions and 5 deletions

View File

@ -151,15 +151,14 @@ int p_rename(const char *from, const char *to)
#endif /* GIT_WIN32 */ #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; char *b = buf;
while (cnt) { while (cnt) {
ssize_t r; ssize_t r;
#ifdef GIT_WIN32 #ifdef GIT_WIN32
assert((size_t)((unsigned int)cnt) == cnt); r = read(fd, b, cnt > INT_MAX ? INT_MAX : (unsigned int)cnt);
r = read(fd, b, (unsigned int)cnt);
#else #else
r = read(fd, b, cnt); r = read(fd, b, cnt);
#endif #endif
@ -173,7 +172,7 @@ int p_read(git_file fd, void *buf, size_t cnt)
cnt -= r; cnt -= r;
b += r; b += r;
} }
return (int)(b - (char *)buf); return (b - (char *)buf);
} }
int p_write(git_file fd, const void *buf, size_t cnt) int p_write(git_file fd, const void *buf, size_t cnt)

View File

@ -97,7 +97,7 @@ typedef int git_file;
* Use your manpages to check the docs on these. * 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); extern int p_write(git_file fd, const void *buf, size_t cnt);
#define p_close(fd) close(fd) #define p_close(fd) close(fd)