diff options
author | Alexander Belopolsky <alexander.belopolsky@gmail.com> | 2010-06-16 22:38:15 (GMT) |
---|---|---|
committer | Alexander Belopolsky <alexander.belopolsky@gmail.com> | 2010-06-16 22:38:15 (GMT) |
commit | d95a586d7760731c6c842a1bdfdbb572257bb8ed (patch) | |
tree | 252a1a2c0b5165ed85414163a6afa3a70bfb3c6c /Modules/_time.c | |
parent | 294f27141f170a09916341a8fcc49903b8e4359e (diff) | |
download | cpython-d95a586d7760731c6c842a1bdfdbb572257bb8ed.zip cpython-d95a586d7760731c6c842a1bdfdbb572257bb8ed.tar.gz cpython-d95a586d7760731c6c842a1bdfdbb572257bb8ed.tar.bz2 |
Issue #9012: "Separate compilation of time and datetime modules."
Segregated code shared between time and datetime modules into
Modules/_time.c. Added a new header file, Modules/_time.h, which
will be used instead of Include/timefuncs.h for declarations shared
between time and datetime modules.
Diffstat (limited to 'Modules/_time.c')
-rw-r--r-- | Modules/_time.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/Modules/_time.c b/Modules/_time.c new file mode 100644 index 0000000..9b63c20 --- /dev/null +++ b/Modules/_time.c @@ -0,0 +1,28 @@ +#include "Python.h" +#include "_time.h" + +/* Exposed in timefuncs.h. */ +time_t +_PyTime_DoubleToTimet(double x) +{ + time_t result; + double diff; + + result = (time_t)x; + /* How much info did we lose? time_t may be an integral or + * floating type, and we don't know which. If it's integral, + * we don't know whether C truncates, rounds, returns the floor, + * etc. If we lost a second or more, the C rounding is + * unreasonable, or the input just doesn't fit in a time_t; + * call it an error regardless. Note that the original cast to + * time_t can cause a C error too, but nothing we can do to + * worm around that. + */ + diff = x - (double)result; + if (diff <= -1.0 || diff >= 1.0) { + PyErr_SetString(PyExc_ValueError, + "timestamp out of range for platform time_t"); + result = (time_t)-1; + } + return result; +} |