| #include "Python.h" |
| |
| #ifdef __APPLE__ |
| #if defined(HAVE_GETTIMEOFDAY) && defined(HAVE_FTIME) |
| /* |
| * _PyTime_gettimeofday falls back to ftime when getttimeofday fails because the latter |
| * might fail on some platforms. This fallback is unwanted on MacOSX because |
| * that makes it impossible to use a binary build on OSX 10.4 on earlier |
| * releases of the OS. Therefore claim we don't support ftime. |
| */ |
| # undef HAVE_FTIME |
| #endif |
| #endif |
| |
| #ifdef HAVE_FTIME |
| #include <sys/timeb.h> |
| #if !defined(MS_WINDOWS) && !defined(PYOS_OS2) |
| extern int ftime(struct timeb *); |
| #endif /* MS_WINDOWS */ |
| #endif /* HAVE_FTIME */ |
| |
| void |
| _PyTime_gettimeofday(_PyTime_timeval *tp) |
| { |
| /* There are three ways to get the time: |
| (1) gettimeofday() -- resolution in microseconds |
| (2) ftime() -- resolution in milliseconds |
| (3) time() -- resolution in seconds |
| In all cases the return value in a timeval struct. |
| Since on some systems (e.g. SCO ODT 3.0) gettimeofday() may |
| fail, so we fall back on ftime() or time(). |
| Note: clock resolution does not imply clock accuracy! */ |
| #ifdef HAVE_GETTIMEOFDAY |
| #ifdef GETTIMEOFDAY_NO_TZ |
| if (gettimeofday(tp) == 0) |
| return; |
| #else /* !GETTIMEOFDAY_NO_TZ */ |
| if (gettimeofday(tp, (struct timezone *)NULL) == 0) |
| return; |
| #endif /* !GETTIMEOFDAY_NO_TZ */ |
| #endif /* !HAVE_GETTIMEOFDAY */ |
| #if defined(HAVE_FTIME) |
| { |
| struct timeb t; |
| ftime(&t); |
| tp->tv_sec = t.time; |
| tp->tv_usec = t.millitm * 1000; |
| } |
| #else /* !HAVE_FTIME */ |
| tp->tv_sec = time(NULL); |
| tp->tv_usec = 0; |
| #endif /* !HAVE_FTIME */ |
| return; |
| } |
| |
| void |
| _PyTime_Init() |
| { |
| /* Do nothing. Needed to force linking. */ |
| } |