From 907ccded8b6fa68f6f572ae5de6760595df0d5a1 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Mon, 5 Sep 2016 17:44:18 -0700 Subject: require a long long data type (closes #27961) --- Python/pytime.c | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) (limited to 'Python/pytime.c') diff --git a/Python/pytime.c b/Python/pytime.c index 81682caa96..5f166b868a 100644 --- a/Python/pytime.c +++ b/Python/pytime.c @@ -38,7 +38,7 @@ error_time_t_overflow(void) time_t _PyLong_AsTime_t(PyObject *obj) { -#if defined(HAVE_LONG_LONG) && SIZEOF_TIME_T == SIZEOF_LONG_LONG +#if SIZEOF_TIME_T == SIZEOF_LONG_LONG PY_LONG_LONG val; val = PyLong_AsLongLong(obj); #else @@ -57,7 +57,7 @@ _PyLong_AsTime_t(PyObject *obj) PyObject * _PyLong_FromTime_t(time_t t) { -#if defined(HAVE_LONG_LONG) && SIZEOF_TIME_T == SIZEOF_LONG_LONG +#if SIZEOF_TIME_T == SIZEOF_LONG_LONG return PyLong_FromLongLong((PY_LONG_LONG)t); #else Py_BUILD_ASSERT(sizeof(time_t) <= sizeof(long)); @@ -304,17 +304,10 @@ _PyTime_FromObject(_PyTime_t *t, PyObject *obj, _PyTime_round_t round, return _PyTime_FromFloatObject(t, d, round, unit_to_ns); } else { -#ifdef HAVE_LONG_LONG PY_LONG_LONG sec; Py_BUILD_ASSERT(sizeof(PY_LONG_LONG) <= sizeof(_PyTime_t)); sec = PyLong_AsLongLong(obj); -#else - long sec; - Py_BUILD_ASSERT(sizeof(PY_LONG_LONG) <= sizeof(_PyTime_t)); - - sec = PyLong_AsLong(obj); -#endif if (sec == -1 && PyErr_Occurred()) { if (PyErr_ExceptionMatches(PyExc_OverflowError)) _PyTime_overflow(); @@ -365,13 +358,8 @@ _PyTime_AsSecondsDouble(_PyTime_t t) PyObject * _PyTime_AsNanosecondsObject(_PyTime_t t) { -#ifdef HAVE_LONG_LONG Py_BUILD_ASSERT(sizeof(PY_LONG_LONG) >= sizeof(_PyTime_t)); return PyLong_FromLongLong((PY_LONG_LONG)t); -#else - Py_BUILD_ASSERT(sizeof(long) >= sizeof(_PyTime_t)); - return PyLong_FromLong((long)t); -#endif } static _PyTime_t -- cgit v1.2.1 From 914b59533a094e815809f62441d02b560e23057b Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Tue, 6 Sep 2016 10:46:49 -0700 Subject: replace PY_LONG_LONG with long long --- Python/pytime.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'Python/pytime.c') diff --git a/Python/pytime.c b/Python/pytime.c index 5f166b868a..02ef8ee7d6 100644 --- a/Python/pytime.c +++ b/Python/pytime.c @@ -39,7 +39,7 @@ time_t _PyLong_AsTime_t(PyObject *obj) { #if SIZEOF_TIME_T == SIZEOF_LONG_LONG - PY_LONG_LONG val; + long long val; val = PyLong_AsLongLong(obj); #else long val; @@ -58,7 +58,7 @@ PyObject * _PyLong_FromTime_t(time_t t) { #if SIZEOF_TIME_T == SIZEOF_LONG_LONG - return PyLong_FromLongLong((PY_LONG_LONG)t); + return PyLong_FromLongLong((long long)t); #else Py_BUILD_ASSERT(sizeof(time_t) <= sizeof(long)); return PyLong_FromLong((long)t); @@ -218,11 +218,11 @@ _PyTime_FromSeconds(int seconds) } _PyTime_t -_PyTime_FromNanoseconds(PY_LONG_LONG ns) +_PyTime_FromNanoseconds(long long ns) { _PyTime_t t; - Py_BUILD_ASSERT(sizeof(PY_LONG_LONG) <= sizeof(_PyTime_t)); - t = Py_SAFE_DOWNCAST(ns, PY_LONG_LONG, _PyTime_t); + Py_BUILD_ASSERT(sizeof(long long) <= sizeof(_PyTime_t)); + t = Py_SAFE_DOWNCAST(ns, long long, _PyTime_t); return t; } @@ -304,8 +304,8 @@ _PyTime_FromObject(_PyTime_t *t, PyObject *obj, _PyTime_round_t round, return _PyTime_FromFloatObject(t, d, round, unit_to_ns); } else { - PY_LONG_LONG sec; - Py_BUILD_ASSERT(sizeof(PY_LONG_LONG) <= sizeof(_PyTime_t)); + long long sec; + Py_BUILD_ASSERT(sizeof(long long) <= sizeof(_PyTime_t)); sec = PyLong_AsLongLong(obj); if (sec == -1 && PyErr_Occurred()) { @@ -358,8 +358,8 @@ _PyTime_AsSecondsDouble(_PyTime_t t) PyObject * _PyTime_AsNanosecondsObject(_PyTime_t t) { - Py_BUILD_ASSERT(sizeof(PY_LONG_LONG) >= sizeof(_PyTime_t)); - return PyLong_FromLongLong((PY_LONG_LONG)t); + Py_BUILD_ASSERT(sizeof(long long) >= sizeof(_PyTime_t)); + return PyLong_FromLongLong((long long)t); } static _PyTime_t -- cgit v1.2.1 From ada5f796e97b5a38b43571134f846366876ae54d Mon Sep 17 00:00:00 2001 From: Alexander Belopolsky Date: Wed, 28 Sep 2016 17:31:35 -0400 Subject: Issue #28148: Stop using localtime() and gmtime() in the time module. Introduced platform independent _PyTime_localtime API that is similar to POSIX localtime_r, but available on all platforms. Patch by Ed Schouten. --- Python/pytime.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) (limited to 'Python/pytime.c') diff --git a/Python/pytime.c b/Python/pytime.c index 02ef8ee7d6..3015a6be0b 100644 --- a/Python/pytime.c +++ b/Python/pytime.c @@ -766,3 +766,55 @@ _PyTime_Init(void) return 0; } + +int +_PyTime_localtime(time_t t, struct tm *tm) +{ +#ifdef MS_WINDOWS + int error; + + error = localtime_s(tm, &t); + if (error != 0) { + errno = error; + PyErr_SetFromErrno(PyExc_OSError); + return -1; + } + return 0; +#else /* !MS_WINDOWS */ + if (localtime_r(&t, tm) == NULL) { +#ifdef EINVAL + if (errno == 0) + errno = EINVAL; +#endif + PyErr_SetFromErrno(PyExc_OSError); + return -1; + } + return 0; +#endif /* MS_WINDOWS */ +} + +int +_PyTime_gmtime(time_t t, struct tm *tm) +{ +#ifdef MS_WINDOWS + int error; + + error = gmtime_s(tm, &t); + if (error != 0) { + errno = error; + PyErr_SetFromErrno(PyExc_OSError); + return -1; + } + return 0; +#else /* !MS_WINDOWS */ + if (gmtime_r(&t, tm) == NULL) { +#ifdef EINVAL + if (errno == 0) + errno = EINVAL; +#endif + PyErr_SetFromErrno(PyExc_OSError); + return -1; + } + return 0; +#endif /* MS_WINDOWS */ +} -- cgit v1.2.1