summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEdward Thomson <ethomson@github.com>2016-02-11 12:24:21 -0800
committerEdward Thomson <ethomson@github.com>2016-02-12 10:34:15 -0800
commit35439f5997c41d0c50d58997c2167ee93aad6c30 (patch)
tree131598ee3fa2374d4010828fc0407568fe80e0f8 /src
parent263e674ec6701b774d8f464150a9d30650c6da46 (diff)
downloadlibgit2-35439f5997c41d0c50d58997c2167ee93aad6c30.tar.gz
win32: introduce p_timeval that isn't stupid
Windows defines `timeval` with `long`, which we cannot sanely cope with. Instead, use a custom timeval struct.
Diffstat (limited to 'src')
-rw-r--r--src/unix/posix.h4
-rw-r--r--src/win32/posix.h5
-rw-r--r--src/win32/posix_w32.c4
-rw-r--r--src/win32/w32_util.h2
-rw-r--r--src/win32/win32-compat.h7
5 files changed, 16 insertions, 6 deletions
diff --git a/src/unix/posix.h b/src/unix/posix.h
index 6633689bc..83edf2b7e 100644
--- a/src/unix/posix.h
+++ b/src/unix/posix.h
@@ -52,8 +52,10 @@ extern char *p_realpath(const char *, char *);
#define p_localtime_r(c, r) localtime_r(c, r)
#define p_gmtime_r(c, r) gmtime_r(c, r)
+#define p_timeval timeval
+
#ifdef HAVE_FUTIMENS
-GIT_INLINE(int) p_futimes(int f, const struct timeval t[2])
+GIT_INLINE(int) p_futimes(int f, const struct p_timeval t[2])
{
struct timespec s[2];
s[0].tv_sec = t[0].tv_sec;
diff --git a/src/win32/posix.h b/src/win32/posix.h
index ac98fd864..732128bb0 100644
--- a/src/win32/posix.h
+++ b/src/win32/posix.h
@@ -9,6 +9,7 @@
#include "common.h"
#include "../posix.h"
+#include "win32-compat.h"
#include "path_w32.h"
#include "utf-conv.h"
#include "dir.h"
@@ -20,8 +21,8 @@ typedef SOCKET GIT_SOCKET;
extern int p_lstat(const char *file_name, struct stat *buf);
extern int p_stat(const char* path, struct stat* buf);
-extern int p_utimes(const char *filename, const struct timeval times[2]);
-extern int p_futimes(int fd, const struct timeval times[2]);
+extern int p_utimes(const char *filename, const struct p_timeval times[2]);
+extern int p_futimes(int fd, const struct p_timeval times[2]);
extern int p_readlink(const char *path, char *buf, size_t bufsiz);
extern int p_symlink(const char *old, const char *new);
diff --git a/src/win32/posix_w32.c b/src/win32/posix_w32.c
index 414cb4701..d743e8fc8 100644
--- a/src/win32/posix_w32.c
+++ b/src/win32/posix_w32.c
@@ -210,7 +210,7 @@ int p_lstat_posixly(const char *filename, struct stat *buf)
return do_lstat(filename, buf, true);
}
-int p_utimes(const char *filename, const struct timeval times[2])
+int p_utimes(const char *filename, const struct p_timeval times[2])
{
int fd, error;
@@ -223,7 +223,7 @@ int p_utimes(const char *filename, const struct timeval times[2])
return error;
}
-int p_futimes(int fd, const struct timeval times[2])
+int p_futimes(int fd, const struct p_timeval times[2])
{
HANDLE handle;
FILETIME atime = {0}, mtime = {0};
diff --git a/src/win32/w32_util.h b/src/win32/w32_util.h
index 727ed1cef..b095939a1 100644
--- a/src/win32/w32_util.h
+++ b/src/win32/w32_util.h
@@ -96,7 +96,7 @@ GIT_INLINE(void) git_win32__filetime_to_timespec(
}
GIT_INLINE(void) git_win32__timeval_to_filetime(
- FILETIME *ft, const struct timeval tv)
+ FILETIME *ft, const struct p_timeval tv)
{
long long ticks = (tv.tv_sec * 10000000LL) +
(tv.tv_usec * 10LL) + 116444736000000000LL;
diff --git a/src/win32/win32-compat.h b/src/win32/win32-compat.h
index d3a5b68a3..dff1f45be 100644
--- a/src/win32/win32-compat.h
+++ b/src/win32/win32-compat.h
@@ -13,6 +13,13 @@
#include <sys/stat.h>
#include <sys/types.h>
+typedef long suseconds_t;
+
+struct p_timeval {
+ time_t tv_sec;
+ suseconds_t tv_usec;
+};
+
struct p_timespec {
time_t tv_sec;
long tv_nsec;