Windows build fixes.

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2959 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
pbrook 2007-06-07 23:09:47 +00:00
parent 0fa7f15730
commit 29b3a6627e
3 changed files with 43 additions and 2 deletions

View File

@ -116,8 +116,14 @@ static void translate_stat(CPUState *env, target_ulong addr, struct stat *s)
p->gdb_st_gid = cpu_to_be32(s->st_gid); p->gdb_st_gid = cpu_to_be32(s->st_gid);
p->gdb_st_rdev = cpu_to_be32(s->st_rdev); p->gdb_st_rdev = cpu_to_be32(s->st_rdev);
p->gdb_st_size = cpu_to_be64(s->st_size); p->gdb_st_size = cpu_to_be64(s->st_size);
#ifdef _WIN32
/* Windows stat is missing some fields. */
p->gdb_st_blksize = 0;
p->gdb_st_blocks = 0;
#else
p->gdb_st_blksize = cpu_to_be64(s->st_blksize); p->gdb_st_blksize = cpu_to_be64(s->st_blksize);
p->gdb_st_blocks = cpu_to_be64(s->st_blocks); p->gdb_st_blocks = cpu_to_be64(s->st_blocks);
#endif
p->gdb_st_atime = cpu_to_be32(s->st_atime); p->gdb_st_atime = cpu_to_be32(s->st_atime);
p->gdb_st_mtime = cpu_to_be32(s->st_mtime); p->gdb_st_mtime = cpu_to_be32(s->st_mtime);
p->gdb_st_ctime = cpu_to_be32(s->st_ctime); p->gdb_st_ctime = cpu_to_be32(s->st_ctime);
@ -281,9 +287,9 @@ void do_m68k_semihosting(CPUM68KState *env, int nr)
ARG(0), ARG(1)); ARG(0), ARG(1));
return; return;
} else { } else {
struct timeval tv; qemu_timeval tv;
struct gdb_timeval *p; struct gdb_timeval *p;
result = gettimeofday(&tv, NULL); result = qemu_gettimeofday(&tv);
if (result != 0) { if (result != 0) {
p = lock_user(ARG(0), sizeof(struct gdb_timeval), 0); p = lock_user(ARG(0), sizeof(struct gdb_timeval), 0);
p->tv_sec = cpu_to_be32(tv.tv_sec); p->tv_sec = cpu_to_be32(tv.tv_sec);

24
osdep.c
View File

@ -264,3 +264,27 @@ int qemu_create_pidfile(const char *filename)
#endif #endif
return 0; return 0;
} }
#ifdef _WIN32
/* Offset between 1/1/1601 and 1/1/1970 in 100 nanosec units */
#define _W32_FT_OFFSET (116444736000000000ULL)
int qemu_gettimeofday(qemu_timeval *tp)
{
union {
unsigned long long ns100; /*time since 1 Jan 1601 in 100ns units */
FILETIME ft;
} _now;
if(tp)
{
GetSystemTimeAsFileTime (&_now.ft);
tp->tv_usec=(long)((_now.ns100 / 10ULL) % 1000000ULL );
tp->tv_sec= (long)((_now.ns100 - _W32_FT_OFFSET) / 10000000ULL);
}
/* Always return 0 as per Open Group Base Specifications Issue 6.
Do not set errno on error. */
return 0;
}
#endif /* _WIN32 */

11
osdep.h
View File

@ -17,4 +17,15 @@ void *get_mmap_addr(unsigned long size);
int qemu_create_pidfile(const char *filename); int qemu_create_pidfile(const char *filename);
#ifdef _WIN32
typedef struct {
long tv_sec;
long tv_usec;
} qemu_timeval;
int qemu_gettimeofday(qemu_timeval *tp);
#else
typedef struct timeval qemu_timeval;
#define qemu_gettimeofday(tp) gettimeofday(tp, NULL);
#endif /* !_WIN32 */
#endif #endif