summaryrefslogtreecommitdiffstats
path: root/Include
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2015-09-18 11:36:17 (GMT)
committerVictor Stinner <victor.stinner@gmail.com>2015-09-18 11:36:17 (GMT)
commit9a8b177e60cc5cc6d5105519c0df8fb185211e1d (patch)
tree83036f077d2267d3c60f172242de4ee8892a5323 /Include
parent4b352171d2b0a4a63cd711df9ebe840419137fa2 (diff)
downloadcpython-9a8b177e60cc5cc6d5105519c0df8fb185211e1d.zip
cpython-9a8b177e60cc5cc6d5105519c0df8fb185211e1d.tar.gz
cpython-9a8b177e60cc5cc6d5105519c0df8fb185211e1d.tar.bz2
Issue #25155: Add _PyTime_AsTimevalTime_t() function
On Windows, the tv_sec field of the timeval structure has the type C long, whereas it has the type C time_t on all other platforms. A C long has a size of 32 bits (signed inter, 1 bit for the sign, 31 bits for the value) which is not enough to store an Epoch timestamp after the year 2038. Add the _PyTime_AsTimevalTime_t() function written for datetime.datetime.now(): convert a _PyTime_t timestamp to a (secs, us) tuple where secs type is time_t. It allows to support dates after the year 2038 on Windows. Enhance also _PyTime_AsTimeval_impl() to detect overflow on the number of seconds when rounding the number of microseconds.
Diffstat (limited to 'Include')
-rw-r--r--Include/pytime.h12
1 files changed, 12 insertions, 0 deletions
diff --git a/Include/pytime.h b/Include/pytime.h
index 027c3d8..494322c 100644
--- a/Include/pytime.h
+++ b/Include/pytime.h
@@ -117,6 +117,18 @@ PyAPI_FUNC(int) _PyTime_AsTimeval_noraise(_PyTime_t t,
struct timeval *tv,
_PyTime_round_t round);
+/* Convert a timestamp to a number of seconds (secs) and microseconds (us).
+ us is always positive. This function is similar to _PyTime_AsTimeval()
+ except that secs is always a time_t type, whereas the timeval structure
+ uses a C long for tv_sec on Windows.
+ Raise an exception and return -1 if the conversion overflowed,
+ return 0 on success. */
+PyAPI_FUNC(int) _PyTime_AsTimevalTime_t(
+ _PyTime_t t,
+ time_t *secs,
+ int *us,
+ _PyTime_round_t round);
+
#if defined(HAVE_CLOCK_GETTIME) || defined(HAVE_KQUEUE)
/* Convert a timestamp to a timespec structure (nanosecond resolution).
tv_nsec is always positive.