Commit 29b3a6627e57585a156fb753c7781b4b1646a934

Authored by pbrook
1 parent 0fa7f157

Windows build fixes.


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2959 c046a42c-6fe2-441c-8c8c-71466251a162
m68k-semi.c
... ... @@ -116,8 +116,14 @@ static void translate_stat(CPUState *env, target_ulong addr, struct stat *s)
116 116 p->gdb_st_gid = cpu_to_be32(s->st_gid);
117 117 p->gdb_st_rdev = cpu_to_be32(s->st_rdev);
118 118 p->gdb_st_size = cpu_to_be64(s->st_size);
  119 +#ifdef _WIN32
  120 + /* Windows stat is missing some fields. */
  121 + p->gdb_st_blksize = 0;
  122 + p->gdb_st_blocks = 0;
  123 +#else
119 124 p->gdb_st_blksize = cpu_to_be64(s->st_blksize);
120 125 p->gdb_st_blocks = cpu_to_be64(s->st_blocks);
  126 +#endif
121 127 p->gdb_st_atime = cpu_to_be32(s->st_atime);
122 128 p->gdb_st_mtime = cpu_to_be32(s->st_mtime);
123 129 p->gdb_st_ctime = cpu_to_be32(s->st_ctime);
... ... @@ -281,9 +287,9 @@ void do_m68k_semihosting(CPUM68KState *env, int nr)
281 287 ARG(0), ARG(1));
282 288 return;
283 289 } else {
284   - struct timeval tv;
  290 + qemu_timeval tv;
285 291 struct gdb_timeval *p;
286   - result = gettimeofday(&tv, NULL);
  292 + result = qemu_gettimeofday(&tv);
287 293 if (result != 0) {
288 294 p = lock_user(ARG(0), sizeof(struct gdb_timeval), 0);
289 295 p->tv_sec = cpu_to_be32(tv.tv_sec);
... ...
... ... @@ -264,3 +264,27 @@ int qemu_create_pidfile(const char *filename)
264 264 #endif
265 265 return 0;
266 266 }
  267 +
  268 +#ifdef _WIN32
  269 +
  270 +/* Offset between 1/1/1601 and 1/1/1970 in 100 nanosec units */
  271 +#define _W32_FT_OFFSET (116444736000000000ULL)
  272 +
  273 +int qemu_gettimeofday(qemu_timeval *tp)
  274 +{
  275 + union {
  276 + unsigned long long ns100; /*time since 1 Jan 1601 in 100ns units */
  277 + FILETIME ft;
  278 + } _now;
  279 +
  280 + if(tp)
  281 + {
  282 + GetSystemTimeAsFileTime (&_now.ft);
  283 + tp->tv_usec=(long)((_now.ns100 / 10ULL) % 1000000ULL );
  284 + tp->tv_sec= (long)((_now.ns100 - _W32_FT_OFFSET) / 10000000ULL);
  285 + }
  286 + /* Always return 0 as per Open Group Base Specifications Issue 6.
  287 + Do not set errno on error. */
  288 + return 0;
  289 +}
  290 +#endif /* _WIN32 */
... ...
... ... @@ -17,4 +17,15 @@ void *get_mmap_addr(unsigned long size);
17 17  
18 18 int qemu_create_pidfile(const char *filename);
19 19  
  20 +#ifdef _WIN32
  21 +typedef struct {
  22 + long tv_sec;
  23 + long tv_usec;
  24 +} qemu_timeval;
  25 +int qemu_gettimeofday(qemu_timeval *tp);
  26 +#else
  27 +typedef struct timeval qemu_timeval;
  28 +#define qemu_gettimeofday(tp) gettimeofday(tp, NULL);
  29 +#endif /* !_WIN32 */
  30 +
20 31 #endif
... ...