1 /* 2 * Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana 3 * University Research and Technology 4 * Corporation. All rights reserved. 5 * Copyright (c) 2004-2014 The University of Tennessee and The University 6 * of Tennessee Research Foundation. All rights 7 * reserved. 8 * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, 9 * University of Stuttgart. All rights reserved. 10 * Copyright (c) 2004-2005 The Regents of the University of California. 11 * All rights reserved. 12 * $COPYRIGHT$ 13 * 14 * Additional copyrights may follow 15 * 16 * $HEADER$ 17 */ 18 19 #include "opal_config.h" 20 #include "opal/win32/opal_time.h" 21 22 #include<time.h> 23 24 #define EPOCHFILETIME (116444736000000000LL) 25 26 int gettimeofday(struct timeval *tv, struct timezone *tz) 27 { 28 FILETIME file_time; 29 LARGE_INTEGER place_holder; 30 __int64 time; 31 32 33 /* returns 64 bit value which is the number of 100 nanosecond 34 intervals since 1601(UTC) */ 35 GetSystemTimeAsFileTime (&file_time); 36 37 /* Windows recommends that we should copy the FILETIME returned 38 into a ULARGE_INTEGER and then perform the arithmetic on that */ 39 place_holder.LowPart = file_time.dwLowDateTime; 40 place_holder.HighPart = file_time.dwHighDateTime; 41 time = place_holder.QuadPart; 42 time -= EPOCHFILETIME; 43 44 /* Now we can use arithmetic operations on time which is nothing but 45 a 64 bit integer holding time in 100 nanosec intervals */ 46 47 /* convert 100 nanoseconds intervals into microseconds .. divide by 10 */ 48 time /= 10; 49 50 tv->tv_sec = (long)(time / 1000000); 51 tv->tv_usec = (long)(time % 1000000); 52 53 return 0; 54 }