Commit 90d4d2f0 by Ramsay Jones

win32: Use an 64-bit file offset type

Signed-off-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk>
parent a1c0728d
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
#include <string.h> #include <string.h>
#include <sys/types.h> #include <sys/types.h>
#include <sys/stat.h>
#ifdef GIT_WIN32 #ifdef GIT_WIN32
...@@ -51,6 +52,23 @@ typedef SSIZE_T ssize_t; ...@@ -51,6 +52,23 @@ typedef SSIZE_T ssize_t;
# define R_OK 4 /* read mode check */ # define R_OK 4 /* read mode check */
# endif # endif
#if defined(__MINGW32__)
# define off_t off64_t
# define lseek _lseeki64
# define stat _stati64
# define fstat _fstati64
#elif defined(_MSC_VER)
typedef __int64 off64_t;
# define off_t off64_t
# define lseek _lseeki64
# define stat _stat64
# define fstat _fstat64
#endif
#else #else
# include <unistd.h> # include <unistd.h>
......
...@@ -69,7 +69,8 @@ off_t gitfo_size(git_file fd) ...@@ -69,7 +69,8 @@ off_t gitfo_size(git_file fd)
int gitfo_read_file(gitfo_buf *obj, const char *path) int gitfo_read_file(gitfo_buf *obj, const char *path)
{ {
git_file fd; git_file fd;
off_t len; size_t len;
off_t size;
unsigned char *buff; unsigned char *buff;
assert(obj && path && *path); assert(obj && path && *path);
...@@ -77,8 +78,13 @@ int gitfo_read_file(gitfo_buf *obj, const char *path) ...@@ -77,8 +78,13 @@ int gitfo_read_file(gitfo_buf *obj, const char *path)
if ((fd = gitfo_open(path, O_RDONLY)) < 0) if ((fd = gitfo_open(path, O_RDONLY)) < 0)
return GIT_ERROR; return GIT_ERROR;
if (((len = gitfo_size(fd)) < 0) if (((size = gitfo_size(fd)) < 0) || !git__is_sizet(size+1)) {
|| ((buff = git__malloc(len + 1)) == NULL)) { gitfo_close(fd);
return GIT_ERROR;
}
len = (size_t) size;
if ((buff = git__malloc(len + 1)) == NULL) {
gitfo_close(fd); gitfo_close(fd);
return GIT_ERROR; return GIT_ERROR;
} }
......
...@@ -9,7 +9,6 @@ ...@@ -9,7 +9,6 @@
#include "common.h" #include "common.h"
#include "map.h" #include "map.h"
#include "dir.h" #include "dir.h"
#include <sys/stat.h>
#include <fcntl.h> #include <fcntl.h>
#include <time.h> #include <time.h>
......
...@@ -77,9 +77,9 @@ int git__mmap(git_map *out, size_t len, int prot, int flags, int fd, off_t offse ...@@ -77,9 +77,9 @@ int git__mmap(git_map *out, size_t len, int prot, int flags, int fd, off_t offse
return GIT_ERROR; return GIT_ERROR;
} }
assert(sizeof(off_t) == 8);
off_low = (DWORD)(page_start); off_low = (DWORD)(page_start);
if (sizeof(off_t) > 4) off_hi = (DWORD)(page_start >> 32);
off_hi = (DWORD)(page_start >> 32);
out->data = MapViewOfFile(out->fmh, view_prot, off_hi, off_low, len); out->data = MapViewOfFile(out->fmh, view_prot, off_hi, off_low, len);
if (!out->data) { if (!out->data) {
/* errno = ? */ /* errno = ? */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment