diff options
-rw-r--r-- | Modules/_time.c | 28 | ||||
-rw-r--r-- | Modules/_time.h | 3 | ||||
-rw-r--r-- | Modules/timemodule.c | 26 | ||||
-rw-r--r-- | setup.py | 4 |
4 files changed, 33 insertions, 28 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; +} diff --git a/Modules/_time.h b/Modules/_time.h new file mode 100644 index 0000000..816593b --- /dev/null +++ b/Modules/_time.h @@ -0,0 +1,3 @@ +/* XXX: It is probably best to move timefuncs.h content in here, and + remove it but user code may rely on it. */ +#include "timefuncs.h" diff --git a/Modules/timemodule.c b/Modules/timemodule.c index 18fe13f..c4b5014 100644 --- a/Modules/timemodule.c +++ b/Modules/timemodule.c @@ -90,32 +90,6 @@ static double floattime(void); /* For Y2K check */ static PyObject *moddict; -/* 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; -} - static PyObject * time_time(PyObject *self, PyObject *unused) { @@ -450,9 +450,9 @@ class PyBuildExt(build_ext): depends=['_math.h'], libraries=math_libs) ) # time operations and variables - exts.append( Extension('time', ['timemodule.c'], + exts.append( Extension('time', ['timemodule.c', '_time.c'], libraries=math_libs) ) - exts.append( Extension('datetime', ['datetimemodule.c', 'timemodule.c'], + exts.append( Extension('datetime', ['datetimemodule.c', '_time.c'], libraries=math_libs) ) # fast iterator tools implemented in C exts.append( Extension("itertools", ["itertoolsmodule.c"]) ) |