diff options
author | Ezio Melotti <ezio.melotti@gmail.com> | 2011-03-28 13:53:40 +0300 |
---|---|---|
committer | Ezio Melotti <ezio.melotti@gmail.com> | 2011-03-28 13:53:40 +0300 |
commit | dce235203d23310e1ca12e8a8a8ed8be8e585a12 (patch) | |
tree | 7a3b79eef005b8881e3175189ff9db64dd36e2f7 /Python/pytime.c | |
parent | 23bb1f0966b9d6b169f929dac91163cec082b741 (diff) | |
parent | e5b28bc7ccd71ef30cfee95b1ead7c91c2fdaa8d (diff) | |
download | cpython-dce235203d23310e1ca12e8a8a8ed8be8e585a12.tar.gz |
#10617: merge with 3.1.
Diffstat (limited to 'Python/pytime.c')
-rw-r--r-- | Python/pytime.c | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/Python/pytime.c b/Python/pytime.c new file mode 100644 index 0000000000..6fb7695911 --- /dev/null +++ b/Python/pytime.c @@ -0,0 +1,60 @@ +#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. */ +} |