Commit 35439f59 by Edward Thomson

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.
parent 263e674e
...@@ -52,8 +52,10 @@ extern char *p_realpath(const char *, char *); ...@@ -52,8 +52,10 @@ extern char *p_realpath(const char *, char *);
#define p_localtime_r(c, r) localtime_r(c, r) #define p_localtime_r(c, r) localtime_r(c, r)
#define p_gmtime_r(c, r) gmtime_r(c, r) #define p_gmtime_r(c, r) gmtime_r(c, r)
#define p_timeval timeval
#ifdef HAVE_FUTIMENS #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]; struct timespec s[2];
s[0].tv_sec = t[0].tv_sec; s[0].tv_sec = t[0].tv_sec;
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include "common.h" #include "common.h"
#include "../posix.h" #include "../posix.h"
#include "win32-compat.h"
#include "path_w32.h" #include "path_w32.h"
#include "utf-conv.h" #include "utf-conv.h"
#include "dir.h" #include "dir.h"
...@@ -20,8 +21,8 @@ typedef SOCKET GIT_SOCKET; ...@@ -20,8 +21,8 @@ typedef SOCKET GIT_SOCKET;
extern int p_lstat(const char *file_name, struct stat *buf); extern int p_lstat(const char *file_name, struct stat *buf);
extern int p_stat(const char* path, 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_utimes(const char *filename, const struct p_timeval times[2]);
extern int p_futimes(int fd, const struct 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_readlink(const char *path, char *buf, size_t bufsiz);
extern int p_symlink(const char *old, const char *new); extern int p_symlink(const char *old, const char *new);
......
...@@ -210,7 +210,7 @@ int p_lstat_posixly(const char *filename, struct stat *buf) ...@@ -210,7 +210,7 @@ int p_lstat_posixly(const char *filename, struct stat *buf)
return do_lstat(filename, buf, true); 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; int fd, error;
...@@ -223,7 +223,7 @@ int p_utimes(const char *filename, const struct timeval times[2]) ...@@ -223,7 +223,7 @@ int p_utimes(const char *filename, const struct timeval times[2])
return error; 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; HANDLE handle;
FILETIME atime = {0}, mtime = {0}; FILETIME atime = {0}, mtime = {0};
......
...@@ -96,7 +96,7 @@ GIT_INLINE(void) git_win32__filetime_to_timespec( ...@@ -96,7 +96,7 @@ GIT_INLINE(void) git_win32__filetime_to_timespec(
} }
GIT_INLINE(void) git_win32__timeval_to_filetime( 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) + long long ticks = (tv.tv_sec * 10000000LL) +
(tv.tv_usec * 10LL) + 116444736000000000LL; (tv.tv_usec * 10LL) + 116444736000000000LL;
......
...@@ -13,6 +13,13 @@ ...@@ -13,6 +13,13 @@
#include <sys/stat.h> #include <sys/stat.h>
#include <sys/types.h> #include <sys/types.h>
typedef long suseconds_t;
struct p_timeval {
time_t tv_sec;
suseconds_t tv_usec;
};
struct p_timespec { struct p_timespec {
time_t tv_sec; time_t tv_sec;
long tv_nsec; long tv_nsec;
......
...@@ -133,7 +133,7 @@ int checkout_count_callback( ...@@ -133,7 +133,7 @@ int checkout_count_callback(
void tick_index(git_index *index) void tick_index(git_index *index)
{ {
struct timespec ts; struct timespec ts;
struct timeval times[2]; struct p_timeval times[2];
cl_assert(index->on_disk); cl_assert(index->on_disk);
cl_assert(git_index_path(index)); cl_assert(git_index_path(index));
......
...@@ -100,7 +100,7 @@ void test_core_posix__inet_pton(void) ...@@ -100,7 +100,7 @@ void test_core_posix__inet_pton(void)
void test_core_posix__utimes(void) void test_core_posix__utimes(void)
{ {
struct timeval times[2]; struct p_timeval times[2];
struct stat st; struct stat st;
time_t curtime; time_t curtime;
int fd; int fd;
......
...@@ -1755,7 +1755,7 @@ void test_diff_workdir__with_stale_index(void) ...@@ -1755,7 +1755,7 @@ void test_diff_workdir__with_stale_index(void)
static int touch_file(void *payload, git_buf *path) static int touch_file(void *payload, git_buf *path)
{ {
struct stat st; struct stat st;
struct timeval times[2]; struct p_timeval times[2];
GIT_UNUSED(payload); GIT_UNUSED(payload);
if (git_path_isdir(path->ptr)) if (git_path_isdir(path->ptr))
...@@ -2006,7 +2006,7 @@ void test_diff_workdir__only_writes_index_when_necessary(void) ...@@ -2006,7 +2006,7 @@ void test_diff_workdir__only_writes_index_when_necessary(void)
git_oid initial, first, second; git_oid initial, first, second;
git_buf path = GIT_BUF_INIT; git_buf path = GIT_BUF_INIT;
struct stat st; struct stat st;
struct timeval times[2]; struct p_timeval times[2];
opts.flags |= GIT_DIFF_INCLUDE_UNTRACKED | GIT_DIFF_UPDATE_INDEX; opts.flags |= GIT_DIFF_INCLUDE_UNTRACKED | GIT_DIFF_UPDATE_INDEX;
......
...@@ -54,7 +54,7 @@ void test_index_racy__write_index_just_after_file(void) ...@@ -54,7 +54,7 @@ void test_index_racy__write_index_just_after_file(void)
git_index *index; git_index *index;
git_diff *diff; git_diff *diff;
git_buf path = GIT_BUF_INIT; git_buf path = GIT_BUF_INIT;
struct timeval times[2]; struct p_timeval times[2];
/* Make sure we do have a timestamp */ /* Make sure we do have a timestamp */
cl_git_pass(git_repository_index(&index, g_repo)); cl_git_pass(git_repository_index(&index, g_repo));
......
...@@ -133,7 +133,7 @@ static void hack_index(char *files[]) ...@@ -133,7 +133,7 @@ static void hack_index(char *files[])
struct stat statbuf; struct stat statbuf;
git_buf path = GIT_BUF_INIT; git_buf path = GIT_BUF_INIT;
git_index_entry *entry; git_index_entry *entry;
struct timeval times[2]; struct p_timeval times[2];
time_t now; time_t now;
size_t i; size_t i;
......
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