summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin v. Löwis <martin@v.loewis.de>2008-12-13 15:14:30 +0000
committerMartin v. Löwis <martin@v.loewis.de>2008-12-13 15:14:30 +0000
commit710fb8bf4597f1c81f1fc50a6b174fc04c68dc42 (patch)
treec45ad4dc8c853e5abaab262783ad9df00946e1ac
parentc252d9bc08ccd28578acbe7ab06843801af29c61 (diff)
downloadcpython-git-710fb8bf4597f1c81f1fc50a6b174fc04c68dc42.tar.gz
Issue #1040026: Fix os.times result on systems where HZ is incorrect.
-rw-r--r--Misc/NEWS2
-rw-r--r--Modules/posixmodule.c25
2 files changed, 18 insertions, 9 deletions
diff --git a/Misc/NEWS b/Misc/NEWS
index 161668e734..fa5ceb6fc4 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -225,6 +225,8 @@ Library
Extension Modules
-----------------
+- Issue #1040026: Fix os.times result on systems where HZ is incorrect.
+
- Issue #4228: Pack negative values the same way as 2.4 in struct's L format.
- Security Issue #2: imageop did not validate arguments correctly and could
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index 3e97605e5e..13f943f57e 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -5748,10 +5748,6 @@ posix_symlink(PyObject *self, PyObject *args)
#ifdef HAVE_TIMES
-#ifndef HZ
-#define HZ 60 /* Universal constant :-) */
-#endif /* HZ */
-
#if defined(PYCC_VACPP) && defined(PYOS_OS2)
static long
system_uptime(void)
@@ -5777,6 +5773,8 @@ posix_times(PyObject *self, PyObject *noargs)
(double)system_uptime() / 1000);
}
#else /* not OS2 */
+#define NEED_TICKS_PER_SECOND
+static long ticks_per_second = -1;
static PyObject *
posix_times(PyObject *self, PyObject *noargs)
{
@@ -5787,11 +5785,11 @@ posix_times(PyObject *self, PyObject *noargs)
if (c == (clock_t) -1)
return posix_error();
return Py_BuildValue("ddddd",
- (double)t.tms_utime / HZ,
- (double)t.tms_stime / HZ,
- (double)t.tms_cutime / HZ,
- (double)t.tms_cstime / HZ,
- (double)c / HZ);
+ (double)t.tms_utime / ticks_per_second,
+ (double)t.tms_stime / ticks_per_second,
+ (double)t.tms_cutime / ticks_per_second,
+ (double)t.tms_cstime / ticks_per_second,
+ (double)c / ticks_per_second);
}
#endif /* not OS2 */
#endif /* HAVE_TIMES */
@@ -8707,6 +8705,15 @@ INITFUNC(void)
statvfs_result_desc.name = MODNAME ".statvfs_result";
PyStructSequence_InitType(&StatVFSResultType, &statvfs_result_desc);
+#ifdef NEED_TICKS_PER_SECOND
+# if defined(HAVE_SYSCONF) && defined(_SC_CLK_TCK)
+ ticks_per_second = sysconf(_SC_CLK_TCK);
+# elif defined(HZ)
+ ticks_per_second = HZ;
+# else
+ ticks_per_second = 60; /* magic fallback value; may be bogus */
+# endif
+#endif
}
Py_INCREF((PyObject*) &StatResultType);
PyModule_AddObject(m, "stat_result", (PyObject*) &StatResultType);