annotate Modules/timemodule.c @ 79675:c0a2294de787 2.7

Issue #16199: Backport 2to3 typo fix from 3.2.
author Chris Jerdonek <chris.jerdonek@gmail.com>
date Thu, 11 Oct 2012 16:15:46 -0700
parents 1320f29bcf98
children 57c157be847f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
145
853b736a6a9e Added copyright notice.
Guido van Rossum <guido@python.org>
parents: 143
diff changeset
1
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
2 /* Time module */
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
3
4615
87617701d721 Greatly renamed.
Barry Warsaw <barry@python.org>
parents: 4607
diff changeset
4 #include "Python.h"
20539
2d599a36b67a SF patch #462296: Add attributes to os.stat results; by Nick Mathewson.
Guido van Rossum <guido@python.org>
parents: 20080
diff changeset
5 #include "structseq.h"
32388
5cf507b64f31 Bug 975996: Add _PyTime_DoubleToTimet to C API
Tim Peters <tim.peters@gmail.com>
parents: 32384
diff changeset
6 #include "timefuncs.h"
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 6
diff changeset
7
37934
ea67628ddae5 Patch 1471925 - Weak linking support for OSX
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 37772
diff changeset
8 #ifdef __APPLE__
ea67628ddae5 Patch 1471925 - Weak linking support for OSX
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 37772
diff changeset
9 #if defined(HAVE_GETTIMEOFDAY) && defined(HAVE_FTIME)
ea67628ddae5 Patch 1471925 - Weak linking support for OSX
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 37772
diff changeset
10 /*
ea67628ddae5 Patch 1471925 - Weak linking support for OSX
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 37772
diff changeset
11 * floattime falls back to ftime when getttimeofday fails because the latter
ea67628ddae5 Patch 1471925 - Weak linking support for OSX
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 37772
diff changeset
12 * might fail on some platforms. This fallback is unwanted on MacOSX because
ea67628ddae5 Patch 1471925 - Weak linking support for OSX
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 37772
diff changeset
13 * that makes it impossible to use a binary build on OSX 10.4 on earlier
ea67628ddae5 Patch 1471925 - Weak linking support for OSX
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 37772
diff changeset
14 * releases of the OS. Therefore claim we don't support ftime.
ea67628ddae5 Patch 1471925 - Weak linking support for OSX
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 37772
diff changeset
15 */
ea67628ddae5 Patch 1471925 - Weak linking support for OSX
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 37772
diff changeset
16 # undef HAVE_FTIME
ea67628ddae5 Patch 1471925 - Weak linking support for OSX
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 37772
diff changeset
17 #endif
ea67628ddae5 Patch 1471925 - Weak linking support for OSX
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 37772
diff changeset
18 #endif
ea67628ddae5 Patch 1471925 - Weak linking support for OSX
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 37772
diff changeset
19
8470
933882c0e9fb Added strptime, if it exists. Modified after a patch by Jesse Hallio.
Guido van Rossum <guido@python.org>
parents: 8161
diff changeset
20 #include <ctype.h>
933882c0e9fb Added strptime, if it exists. Modified after a patch by Jesse Hallio.
Guido van Rossum <guido@python.org>
parents: 8161
diff changeset
21
38716
42808526511c Patch #1495999: Part two of Windows CE changes.
Martin v. Löwis <martin@v.loewis.de>
parents: 38489
diff changeset
22 #ifdef HAVE_SYS_TYPES_H
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
23 #include <sys/types.h>
38716
42808526511c Patch #1495999: Part two of Windows CE changes.
Martin v. Löwis <martin@v.loewis.de>
parents: 38489
diff changeset
24 #endif /* HAVE_SYS_TYPES_H */
1177
533e36de1e4d * Configure.py: use #!/usr/local/bin/python
Guido van Rossum <guido@python.org>
parents: 956
diff changeset
25
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
26 #ifdef QUICKWIN
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
27 #include <io.h>
956
a60cb5321211 * macmodule.c: include allobjects.h, not .c
Guido van Rossum <guido@python.org>
parents: 926
diff changeset
28 #endif
a60cb5321211 * macmodule.c: include allobjects.h, not .c
Guido van Rossum <guido@python.org>
parents: 926
diff changeset
29
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
30 #ifdef HAVE_FTIME
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
31 #include <sys/timeb.h>
6626
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6548
diff changeset
32 #if !defined(MS_WINDOWS) && !defined(PYOS_OS2)
13667
a6c7bfdd6777 Even more ANSIfication: fix as many function pointers and declarations as
Thomas Wouters <thomas@python.org>
parents: 13651
diff changeset
33 extern int ftime(struct timeb *);
4618
06c7c7de6976 Added #ifdef around ``extern int ftime();'' for MS WINDOWS (which has
Guido van Rossum <guido@python.org>
parents: 4616
diff changeset
34 #endif /* MS_WINDOWS */
06c7c7de6976 Added #ifdef around ``extern int ftime();'' for MS WINDOWS (which has
Guido van Rossum <guido@python.org>
parents: 4616
diff changeset
35 #endif /* HAVE_FTIME */
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
36
6716
d854a1c7e74d Patch for QNX, by Chris Herborth.
Guido van Rossum <guido@python.org>
parents: 6626
diff changeset
37 #if defined(__WATCOMC__) && !defined(__QNX__)
3592
2403620ca931 Watcom changes.
Guido van Rossum <guido@python.org>
parents: 3419
diff changeset
38 #include <i86.h>
2403620ca931 Watcom changes.
Guido van Rossum <guido@python.org>
parents: 3419
diff changeset
39 #else
4216
0a5f01d4701c Some changes for better Windows portability.
Guido van Rossum <guido@python.org>
parents: 3979
diff changeset
40 #ifdef MS_WINDOWS
24243
c423a88b22ce Fix bug 581232 - [Windows] Can not interrupt time.sleep()
Mark Hammond <mhammond@skippinet.com.au>
parents: 24071
diff changeset
41 #define WIN32_LEAN_AND_MEAN
16953
9fd20cae7b76 Fix typo in RISCOS patch inside MS #ifdef. (Probably my own fingers.)
Guido van Rossum <guido@python.org>
parents: 16947
diff changeset
42 #include <windows.h>
24243
c423a88b22ce Fix bug 581232 - [Windows] Can not interrupt time.sleep()
Mark Hammond <mhammond@skippinet.com.au>
parents: 24071
diff changeset
43 #include "pythread.h"
c423a88b22ce Fix bug 581232 - [Windows] Can not interrupt time.sleep()
Mark Hammond <mhammond@skippinet.com.au>
parents: 24071
diff changeset
44
c423a88b22ce Fix bug 581232 - [Windows] Can not interrupt time.sleep()
Mark Hammond <mhammond@skippinet.com.au>
parents: 24071
diff changeset
45 /* helper to allow us to interrupt sleep() on Windows*/
c423a88b22ce Fix bug 581232 - [Windows] Can not interrupt time.sleep()
Mark Hammond <mhammond@skippinet.com.au>
parents: 24071
diff changeset
46 static HANDLE hInterruptEvent = NULL;
c423a88b22ce Fix bug 581232 - [Windows] Can not interrupt time.sleep()
Mark Hammond <mhammond@skippinet.com.au>
parents: 24071
diff changeset
47 static BOOL WINAPI PyCtrlHandler(DWORD dwCtrlType)
c423a88b22ce Fix bug 581232 - [Windows] Can not interrupt time.sleep()
Mark Hammond <mhammond@skippinet.com.au>
parents: 24071
diff changeset
48 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
49 SetEvent(hInterruptEvent);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
50 /* allow other default handlers to be called.
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
51 Default Python handler will setup the
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
52 KeyboardInterrupt exception.
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
53 */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
54 return FALSE;
24243
c423a88b22ce Fix bug 581232 - [Windows] Can not interrupt time.sleep()
Mark Hammond <mhammond@skippinet.com.au>
parents: 24071
diff changeset
55 }
c423a88b22ce Fix bug 581232 - [Windows] Can not interrupt time.sleep()
Mark Hammond <mhammond@skippinet.com.au>
parents: 24071
diff changeset
56 static long main_thread;
c423a88b22ce Fix bug 581232 - [Windows] Can not interrupt time.sleep()
Mark Hammond <mhammond@skippinet.com.au>
parents: 24071
diff changeset
57
c423a88b22ce Fix bug 581232 - [Windows] Can not interrupt time.sleep()
Mark Hammond <mhammond@skippinet.com.au>
parents: 24071
diff changeset
58
24071
8142f8d668a0 Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents: 23832
diff changeset
59 #if defined(__BORLANDC__)
4232
886c0f775c97 Sleep() turns out to be win32 specific.
Guido van Rossum <guido@python.org>
parents: 4216
diff changeset
60 /* These overrides not needed for Win32 */
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
61 #define timezone _timezone
2533
e506ec4fb2b1 tiny additions for Windows 3.1
Guido van Rossum <guido@python.org>
parents: 2506
diff changeset
62 #define tzname _tzname
e506ec4fb2b1 tiny additions for Windows 3.1
Guido van Rossum <guido@python.org>
parents: 2506
diff changeset
63 #define daylight _daylight
24071
8142f8d668a0 Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents: 23832
diff changeset
64 #endif /* __BORLANDC__ */
4216
0a5f01d4701c Some changes for better Windows portability.
Guido van Rossum <guido@python.org>
parents: 3979
diff changeset
65 #endif /* MS_WINDOWS */
6716
d854a1c7e74d Patch for QNX, by Chris Herborth.
Guido van Rossum <guido@python.org>
parents: 6626
diff changeset
66 #endif /* !__WATCOMC__ || __QNX__ */
1313
6ee380349c84 * Added gmtime/localtime/mktime and SYSV timezone globals to timemodule.c.
Guido van Rossum <guido@python.org>
parents: 1191
diff changeset
67
38326
9f884d34a0ec Some Win64 pre-release in 2000 didn't support
Tim Peters <tim.peters@gmail.com>
parents: 38202
diff changeset
68 #if defined(MS_WINDOWS) && !defined(__BORLANDC__)
38330
087287009658 Repair idiot typo, and complete the job of trying to
Tim Peters <tim.peters@gmail.com>
parents: 38326
diff changeset
69 /* Win32 has better clock replacement; we have our own version below. */
087287009658 Repair idiot typo, and complete the job of trying to
Tim Peters <tim.peters@gmail.com>
parents: 38326
diff changeset
70 #undef HAVE_CLOCK
38326
9f884d34a0ec Some Win64 pre-release in 2000 didn't support
Tim Peters <tim.peters@gmail.com>
parents: 38202
diff changeset
71 #endif /* MS_WINDOWS && !defined(__BORLANDC__) */
5238
15288c8343a5 Win32 precision clock() -- Mark Hammond.
Guido van Rossum <guido@python.org>
parents: 5100
diff changeset
72
22114
c454b76d51e7 OS/2 EMX port changes (Modules part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents: 21938
diff changeset
73 #if defined(PYOS_OS2)
c454b76d51e7 OS/2 EMX port changes (Modules part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents: 21938
diff changeset
74 #define INCL_DOS
c454b76d51e7 OS/2 EMX port changes (Modules part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents: 21938
diff changeset
75 #define INCL_ERRORS
c454b76d51e7 OS/2 EMX port changes (Modules part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents: 21938
diff changeset
76 #include <os2.h>
c454b76d51e7 OS/2 EMX port changes (Modules part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents: 21938
diff changeset
77 #endif
c454b76d51e7 OS/2 EMX port changes (Modules part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents: 21938
diff changeset
78
6626
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6548
diff changeset
79 #if defined(PYCC_VACPP)
9160
f0a92c0a115e Fixes for OS/2 by Jeff Rush.
Guido van Rossum <guido@python.org>
parents: 9042
diff changeset
80 #include <sys/time.h>
6626
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6548
diff changeset
81 #endif
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6548
diff changeset
82
8823
f2a4a2b60860 Changes for BeOS, QNX and long long, by Chris Herborth.
Guido van Rossum <guido@python.org>
parents: 8568
diff changeset
83 #ifdef __BEOS__
14001
73d976afa8d4 Chris Herborth <chrish@pobox.com>:
Fred Drake <fdrake@acm.org>
parents: 13820
diff changeset
84 #include <time.h>
8823
f2a4a2b60860 Changes for BeOS, QNX and long long, by Chris Herborth.
Guido van Rossum <guido@python.org>
parents: 8568
diff changeset
85 /* For bigtime_t, snooze(). - [cjh] */
f2a4a2b60860 Changes for BeOS, QNX and long long, by Chris Herborth.
Guido van Rossum <guido@python.org>
parents: 8568
diff changeset
86 #include <support/SupportDefs.h>
f2a4a2b60860 Changes for BeOS, QNX and long long, by Chris Herborth.
Guido van Rossum <guido@python.org>
parents: 8568
diff changeset
87 #include <kernel/OS.h>
f2a4a2b60860 Changes for BeOS, QNX and long long, by Chris Herborth.
Guido van Rossum <guido@python.org>
parents: 8568
diff changeset
88 #endif
f2a4a2b60860 Changes for BeOS, QNX and long long, by Chris Herborth.
Guido van Rossum <guido@python.org>
parents: 8568
diff changeset
89
29066
90342f395721 Patch #734231: Update RiscOS support. In particular, correct
Martin v. Löwis <martin@v.loewis.de>
parents: 28569
diff changeset
90 #ifdef RISCOS
90342f395721 Patch #734231: Update RiscOS support. In particular, correct
Martin v. Löwis <martin@v.loewis.de>
parents: 28569
diff changeset
91 extern int riscos_sleep(double);
90342f395721 Patch #734231: Update RiscOS support. In particular, correct
Martin v. Löwis <martin@v.loewis.de>
parents: 28569
diff changeset
92 #endif
90342f395721 Patch #734231: Update RiscOS support. In particular, correct
Martin v. Löwis <martin@v.loewis.de>
parents: 28569
diff changeset
93
1313
6ee380349c84 * Added gmtime/localtime/mktime and SYSV timezone globals to timemodule.c.
Guido van Rossum <guido@python.org>
parents: 1191
diff changeset
94 /* Forward declarations */
13447
a89f7f268de4 Nuke all remaining occurrences of Py_PROTO and Py_FPROTO.
Tim Peters <tim.peters@gmail.com>
parents: 13329
diff changeset
95 static int floatsleep(double);
13691
0f1c6053e8d0 Fix floattime prototype ((void), not (double))
Thomas Wouters <thomas@python.org>
parents: 13690
diff changeset
96 static double floattime(void);
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
97
9042
9fd915d23cfa Y2K fix affecting asctime(), mktime(), strftime().
Guido van Rossum <guido@python.org>
parents: 8823
diff changeset
98 /* For Y2K check */
9fd915d23cfa Y2K fix affecting asctime(), mktime(), strftime().
Guido van Rossum <guido@python.org>
parents: 8823
diff changeset
99 static PyObject *moddict;
9fd915d23cfa Y2K fix affecting asctime(), mktime(), strftime().
Guido van Rossum <guido@python.org>
parents: 8823
diff changeset
100
32388
5cf507b64f31 Bug 975996: Add _PyTime_DoubleToTimet to C API
Tim Peters <tim.peters@gmail.com>
parents: 32384
diff changeset
101 /* Exposed in timefuncs.h. */
5cf507b64f31 Bug 975996: Add _PyTime_DoubleToTimet to C API
Tim Peters <tim.peters@gmail.com>
parents: 32384
diff changeset
102 time_t
32384
ec64a6be32f7 Raise ValueError when value being stored in a time_t variable will result in
Brett Cannon <bcannon@gmail.com>
parents: 31608
diff changeset
103 _PyTime_DoubleToTimet(double x)
ec64a6be32f7 Raise ValueError when value being stored in a time_t variable will result in
Brett Cannon <bcannon@gmail.com>
parents: 31608
diff changeset
104 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
105 time_t result;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
106 double diff;
32384
ec64a6be32f7 Raise ValueError when value being stored in a time_t variable will result in
Brett Cannon <bcannon@gmail.com>
parents: 31608
diff changeset
107
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
108 result = (time_t)x;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
109 /* How much info did we lose? time_t may be an integral or
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
110 * floating type, and we don't know which. If it's integral,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
111 * we don't know whether C truncates, rounds, returns the floor,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
112 * etc. If we lost a second or more, the C rounding is
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
113 * unreasonable, or the input just doesn't fit in a time_t;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
114 * call it an error regardless. Note that the original cast to
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
115 * time_t can cause a C error too, but nothing we can do to
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
116 * worm around that.
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
117 */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
118 diff = x - (double)result;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
119 if (diff <= -1.0 || diff >= 1.0) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
120 PyErr_SetString(PyExc_ValueError,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
121 "timestamp out of range for platform time_t");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
122 result = (time_t)-1;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
123 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
124 return result;
32384
ec64a6be32f7 Raise ValueError when value being stored in a time_t variable will result in
Brett Cannon <bcannon@gmail.com>
parents: 31608
diff changeset
125 }
ec64a6be32f7 Raise ValueError when value being stored in a time_t variable will result in
Brett Cannon <bcannon@gmail.com>
parents: 31608
diff changeset
126
4615
87617701d721 Greatly renamed.
Barry Warsaw <barry@python.org>
parents: 4607
diff changeset
127 static PyObject *
38489
3fe3ccdf0155 Make use of METH_O and METH_NOARGS where possible.
Georg Brandl <georg@python.org>
parents: 38330
diff changeset
128 time_time(PyObject *self, PyObject *unused)
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
129 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
130 double secs;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
131 secs = floattime();
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
132 if (secs == 0.0) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
133 PyErr_SetFromErrno(PyExc_IOError);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
134 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
135 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
136 return PyFloat_FromDouble(secs);
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
137 }
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
138
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22957
diff changeset
139 PyDoc_STRVAR(time_doc,
8568
8716816e0859 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8470
diff changeset
140 "time() -> floating point number\n\
8716816e0859 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8470
diff changeset
141 \n\
8716816e0859 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8470
diff changeset
142 Return the current time in seconds since the Epoch.\n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22957
diff changeset
143 Fractions of a second may be present if the system clock provides them.");
8568
8716816e0859 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8470
diff changeset
144
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
145 #ifdef HAVE_CLOCK
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
146
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
147 #ifndef CLOCKS_PER_SEC
3419
e045f9132b07 default CLOCKS_PER_SEC to CLK_TCK if it exists
Guido van Rossum <guido@python.org>
parents: 3388
diff changeset
148 #ifdef CLK_TCK
e045f9132b07 default CLOCKS_PER_SEC to CLK_TCK if it exists
Guido van Rossum <guido@python.org>
parents: 3388
diff changeset
149 #define CLOCKS_PER_SEC CLK_TCK
e045f9132b07 default CLOCKS_PER_SEC to CLK_TCK if it exists
Guido van Rossum <guido@python.org>
parents: 3388
diff changeset
150 #else
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
151 #define CLOCKS_PER_SEC 1000000
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
152 #endif
3419
e045f9132b07 default CLOCKS_PER_SEC to CLK_TCK if it exists
Guido van Rossum <guido@python.org>
parents: 3388
diff changeset
153 #endif
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
154
4615
87617701d721 Greatly renamed.
Barry Warsaw <barry@python.org>
parents: 4607
diff changeset
155 static PyObject *
38489
3fe3ccdf0155 Make use of METH_O and METH_NOARGS where possible.
Georg Brandl <georg@python.org>
parents: 38330
diff changeset
156 time_clock(PyObject *self, PyObject *unused)
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
157 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
158 return PyFloat_FromDouble(((double)clock()) / CLOCKS_PER_SEC);
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
159 }
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
160 #endif /* HAVE_CLOCK */
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
161
38330
087287009658 Repair idiot typo, and complete the job of trying to
Tim Peters <tim.peters@gmail.com>
parents: 38326
diff changeset
162 #if defined(MS_WINDOWS) && !defined(__BORLANDC__)
21934
71ffc9fb5986 Ensure we also build on VC7. Involves replacing largeint.h helper functions with msvc's native 64 bit integers.
Mark Hammond <mhammond@skippinet.com.au>
parents: 21738
diff changeset
163 /* Due to Mark Hammond and Tim Peters */
5238
15288c8343a5 Win32 precision clock() -- Mark Hammond.
Guido van Rossum <guido@python.org>
parents: 5100
diff changeset
164 static PyObject *
38489
3fe3ccdf0155 Make use of METH_O and METH_NOARGS where possible.
Georg Brandl <georg@python.org>
parents: 38330
diff changeset
165 time_clock(PyObject *self, PyObject *unused)
5238
15288c8343a5 Win32 precision clock() -- Mark Hammond.
Guido van Rossum <guido@python.org>
parents: 5100
diff changeset
166 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
167 static LARGE_INTEGER ctrStart;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
168 static double divisor = 0.0;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
169 LARGE_INTEGER now;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
170 double diff;
5238
15288c8343a5 Win32 precision clock() -- Mark Hammond.
Guido van Rossum <guido@python.org>
parents: 5100
diff changeset
171
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
172 if (divisor == 0.0) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
173 LARGE_INTEGER freq;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
174 QueryPerformanceCounter(&ctrStart);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
175 if (!QueryPerformanceFrequency(&freq) || freq.QuadPart == 0) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
176 /* Unlikely to happen - this works on all intel
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
177 machines at least! Revert to clock() */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
178 return PyFloat_FromDouble(((double)clock()) /
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
179 CLOCKS_PER_SEC);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
180 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
181 divisor = (double)freq.QuadPart;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
182 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
183 QueryPerformanceCounter(&now);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
184 diff = (double)(now.QuadPart - ctrStart.QuadPart);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
185 return PyFloat_FromDouble(diff / divisor);
5238
15288c8343a5 Win32 precision clock() -- Mark Hammond.
Guido van Rossum <guido@python.org>
parents: 5100
diff changeset
186 }
8568
8716816e0859 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8470
diff changeset
187
5238
15288c8343a5 Win32 precision clock() -- Mark Hammond.
Guido van Rossum <guido@python.org>
parents: 5100
diff changeset
188 #define HAVE_CLOCK /* So it gets included in the methods */
38330
087287009658 Repair idiot typo, and complete the job of trying to
Tim Peters <tim.peters@gmail.com>
parents: 38326
diff changeset
189 #endif /* MS_WINDOWS && !defined(__BORLANDC__) */
5238
15288c8343a5 Win32 precision clock() -- Mark Hammond.
Guido van Rossum <guido@python.org>
parents: 5100
diff changeset
190
8568
8716816e0859 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8470
diff changeset
191 #ifdef HAVE_CLOCK
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22957
diff changeset
192 PyDoc_STRVAR(clock_doc,
8568
8716816e0859 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8470
diff changeset
193 "clock() -> floating point number\n\
8716816e0859 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8470
diff changeset
194 \n\
8716816e0859 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8470
diff changeset
195 Return the CPU time or real time since the start of the process or since\n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22957
diff changeset
196 the first call to clock(). This has as much precision as the system\n\
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22957
diff changeset
197 records.");
8568
8716816e0859 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8470
diff changeset
198 #endif
8716816e0859 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8470
diff changeset
199
4615
87617701d721 Greatly renamed.
Barry Warsaw <barry@python.org>
parents: 4607
diff changeset
200 static PyObject *
13501
ca32ff7a067e ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents: 13447
diff changeset
201 time_sleep(PyObject *self, PyObject *args)
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
202 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
203 double secs;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
204 if (!PyArg_ParseTuple(args, "d:sleep", &secs))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
205 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
206 if (floatsleep(secs) != 0)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
207 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
208 Py_INCREF(Py_None);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
209 return Py_None;
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
210 }
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
211
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22957
diff changeset
212 PyDoc_STRVAR(sleep_doc,
8568
8716816e0859 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8470
diff changeset
213 "sleep(seconds)\n\
8716816e0859 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8470
diff changeset
214 \n\
8716816e0859 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8470
diff changeset
215 Delay execution for a given number of seconds. The argument may be\n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22957
diff changeset
216 a floating point number for subsecond precision.");
8568
8716816e0859 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8470
diff changeset
217
20539
2d599a36b67a SF patch #462296: Add attributes to os.stat results; by Nick Mathewson.
Guido van Rossum <guido@python.org>
parents: 20080
diff changeset
218 static PyStructSequence_Field struct_time_type_fields[] = {
62117
ca263d2005e7 Issue #8899: time.struct_time now has class and atribute docstrings.
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents: 61463
diff changeset
219 {"tm_year", "year, for example, 1993"},
ca263d2005e7 Issue #8899: time.struct_time now has class and atribute docstrings.
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents: 61463
diff changeset
220 {"tm_mon", "month of year, range [1, 12]"},
ca263d2005e7 Issue #8899: time.struct_time now has class and atribute docstrings.
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents: 61463
diff changeset
221 {"tm_mday", "day of month, range [1, 31]"},
ca263d2005e7 Issue #8899: time.struct_time now has class and atribute docstrings.
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents: 61463
diff changeset
222 {"tm_hour", "hours, range [0, 23]"},
ca263d2005e7 Issue #8899: time.struct_time now has class and atribute docstrings.
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents: 61463
diff changeset
223 {"tm_min", "minutes, range [0, 59]"},
ca263d2005e7 Issue #8899: time.struct_time now has class and atribute docstrings.
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents: 61463
diff changeset
224 {"tm_sec", "seconds, range [0, 61])"},
ca263d2005e7 Issue #8899: time.struct_time now has class and atribute docstrings.
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents: 61463
diff changeset
225 {"tm_wday", "day of week, range [0, 6], Monday is 0"},
ca263d2005e7 Issue #8899: time.struct_time now has class and atribute docstrings.
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents: 61463
diff changeset
226 {"tm_yday", "day of year, range [1, 366]"},
ca263d2005e7 Issue #8899: time.struct_time now has class and atribute docstrings.
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents: 61463
diff changeset
227 {"tm_isdst", "1 if summer time is in effect, 0 if not, and -1 if unknown"},
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
228 {0}
20539
2d599a36b67a SF patch #462296: Add attributes to os.stat results; by Nick Mathewson.
Guido van Rossum <guido@python.org>
parents: 20080
diff changeset
229 };
2d599a36b67a SF patch #462296: Add attributes to os.stat results; by Nick Mathewson.
Guido van Rossum <guido@python.org>
parents: 20080
diff changeset
230
2d599a36b67a SF patch #462296: Add attributes to os.stat results; by Nick Mathewson.
Guido van Rossum <guido@python.org>
parents: 20080
diff changeset
231 static PyStructSequence_Desc struct_time_type_desc = {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
232 "time.struct_time",
62117
ca263d2005e7 Issue #8899: time.struct_time now has class and atribute docstrings.
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents: 61463
diff changeset
233 "The time value as returned by gmtime(), localtime(), and strptime(), and\n"
ca263d2005e7 Issue #8899: time.struct_time now has class and atribute docstrings.
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents: 61463
diff changeset
234 " accepted by asctime(), mktime() and strftime(). May be considered as a\n"
ca263d2005e7 Issue #8899: time.struct_time now has class and atribute docstrings.
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents: 61463
diff changeset
235 " sequence of 9 integers.\n\n"
ca263d2005e7 Issue #8899: time.struct_time now has class and atribute docstrings.
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents: 61463
diff changeset
236 " Note that several fields' values are not the same as those defined by\n"
ca263d2005e7 Issue #8899: time.struct_time now has class and atribute docstrings.
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents: 61463
diff changeset
237 " the C language standard for struct tm. For example, the value of the\n"
ca263d2005e7 Issue #8899: time.struct_time now has class and atribute docstrings.
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents: 61463
diff changeset
238 " field tm_year is the actual year, not year - 1900. See individual\n"
ca263d2005e7 Issue #8899: time.struct_time now has class and atribute docstrings.
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents: 61463
diff changeset
239 " fields' descriptions for details.",
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
240 struct_time_type_fields,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
241 9,
20539
2d599a36b67a SF patch #462296: Add attributes to os.stat results; by Nick Mathewson.
Guido van Rossum <guido@python.org>
parents: 20080
diff changeset
242 };
21938
4ab29b06a76c Windows time_clock(): rewrite to get rid of horrid casting tricks.
Tim Peters <tim.peters@gmail.com>
parents: 21934
diff changeset
243
37772
b90a7c6021bc Initialize structseq types only once.
Martin v. Löwis <martin@v.loewis.de>
parents: 37666
diff changeset
244 static int initialized;
20539
2d599a36b67a SF patch #462296: Add attributes to os.stat results; by Nick Mathewson.
Guido van Rossum <guido@python.org>
parents: 20080
diff changeset
245 static PyTypeObject StructTimeType;
2d599a36b67a SF patch #462296: Add attributes to os.stat results; by Nick Mathewson.
Guido van Rossum <guido@python.org>
parents: 20080
diff changeset
246
4615
87617701d721 Greatly renamed.
Barry Warsaw <barry@python.org>
parents: 4607
diff changeset
247 static PyObject *
13501
ca32ff7a067e ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents: 13447
diff changeset
248 tmtotuple(struct tm *p)
8470
933882c0e9fb Added strptime, if it exists. Modified after a patch by Jesse Hallio.
Guido van Rossum <guido@python.org>
parents: 8161
diff changeset
249 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
250 PyObject *v = PyStructSequence_New(&StructTimeType);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
251 if (v == NULL)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
252 return NULL;
21938
4ab29b06a76c Windows time_clock(): rewrite to get rid of horrid casting tricks.
Tim Peters <tim.peters@gmail.com>
parents: 21934
diff changeset
253
20539
2d599a36b67a SF patch #462296: Add attributes to os.stat results; by Nick Mathewson.
Guido van Rossum <guido@python.org>
parents: 20080
diff changeset
254 #define SET(i,val) PyStructSequence_SET_ITEM(v, i, PyInt_FromLong((long) val))
2d599a36b67a SF patch #462296: Add attributes to os.stat results; by Nick Mathewson.
Guido van Rossum <guido@python.org>
parents: 20080
diff changeset
255
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
256 SET(0, p->tm_year + 1900);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
257 SET(1, p->tm_mon + 1); /* Want January == 1 */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
258 SET(2, p->tm_mday);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
259 SET(3, p->tm_hour);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
260 SET(4, p->tm_min);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
261 SET(5, p->tm_sec);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
262 SET(6, (p->tm_wday + 6) % 7); /* Want Monday == 0 */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
263 SET(7, p->tm_yday + 1); /* Want January, 1 == 1 */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
264 SET(8, p->tm_isdst);
20539
2d599a36b67a SF patch #462296: Add attributes to os.stat results; by Nick Mathewson.
Guido van Rossum <guido@python.org>
parents: 20080
diff changeset
265 #undef SET
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
266 if (PyErr_Occurred()) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
267 Py_XDECREF(v);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
268 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
269 }
20539
2d599a36b67a SF patch #462296: Add attributes to os.stat results; by Nick Mathewson.
Guido van Rossum <guido@python.org>
parents: 20080
diff changeset
270
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
271 return v;
8470
933882c0e9fb Added strptime, if it exists. Modified after a patch by Jesse Hallio.
Guido van Rossum <guido@python.org>
parents: 8161
diff changeset
272 }
933882c0e9fb Added strptime, if it exists. Modified after a patch by Jesse Hallio.
Guido van Rossum <guido@python.org>
parents: 8161
diff changeset
273
933882c0e9fb Added strptime, if it exists. Modified after a patch by Jesse Hallio.
Guido van Rossum <guido@python.org>
parents: 8161
diff changeset
274 static PyObject *
32384
ec64a6be32f7 Raise ValueError when value being stored in a time_t variable will result in
Brett Cannon <bcannon@gmail.com>
parents: 31608
diff changeset
275 time_convert(double when, struct tm * (*function)(const time_t *))
1313
6ee380349c84 * Added gmtime/localtime/mktime and SYSV timezone globals to timemodule.c.
Guido van Rossum <guido@python.org>
parents: 1191
diff changeset
276 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
277 struct tm *p;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
278 time_t whent = _PyTime_DoubleToTimet(when);
32384
ec64a6be32f7 Raise ValueError when value being stored in a time_t variable will result in
Brett Cannon <bcannon@gmail.com>
parents: 31608
diff changeset
279
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
280 if (whent == (time_t)-1 && PyErr_Occurred())
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
281 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
282 errno = 0;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
283 p = function(&whent);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
284 if (p == NULL) {
4373
98ea80051dbc Check for NULL pointer returned from localtime()/gmtime().
Guido van Rossum <guido@python.org>
parents: 4232
diff changeset
285 #ifdef EINVAL
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
286 if (errno == 0)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
287 errno = EINVAL;
4373
98ea80051dbc Check for NULL pointer returned from localtime()/gmtime().
Guido van Rossum <guido@python.org>
parents: 4232
diff changeset
288 #endif
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
289 return PyErr_SetFromErrno(PyExc_ValueError);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
290 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
291 return tmtotuple(p);
1313
6ee380349c84 * Added gmtime/localtime/mktime and SYSV timezone globals to timemodule.c.
Guido van Rossum <guido@python.org>
parents: 1191
diff changeset
292 }
6ee380349c84 * Added gmtime/localtime/mktime and SYSV timezone globals to timemodule.c.
Guido van Rossum <guido@python.org>
parents: 1191
diff changeset
293
32939
582eb51b8492 allow ctime(), gmtime(), and localtime() to take None as equivalent to an omitted arg
Fred Drake <fdrake@acm.org>
parents: 32772
diff changeset
294 /* Parse arg tuple that can contain an optional float-or-None value;
582eb51b8492 allow ctime(), gmtime(), and localtime() to take None as equivalent to an omitted arg
Fred Drake <fdrake@acm.org>
parents: 32772
diff changeset
295 format needs to be "|O:name".
582eb51b8492 allow ctime(), gmtime(), and localtime() to take None as equivalent to an omitted arg
Fred Drake <fdrake@acm.org>
parents: 32772
diff changeset
296 Returns non-zero on success (parallels PyArg_ParseTuple).
582eb51b8492 allow ctime(), gmtime(), and localtime() to take None as equivalent to an omitted arg
Fred Drake <fdrake@acm.org>
parents: 32772
diff changeset
297 */
582eb51b8492 allow ctime(), gmtime(), and localtime() to take None as equivalent to an omitted arg
Fred Drake <fdrake@acm.org>
parents: 32772
diff changeset
298 static int
582eb51b8492 allow ctime(), gmtime(), and localtime() to take None as equivalent to an omitted arg
Fred Drake <fdrake@acm.org>
parents: 32772
diff changeset
299 parse_time_double_args(PyObject *args, char *format, double *pwhen)
582eb51b8492 allow ctime(), gmtime(), and localtime() to take None as equivalent to an omitted arg
Fred Drake <fdrake@acm.org>
parents: 32772
diff changeset
300 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
301 PyObject *ot = NULL;
32939
582eb51b8492 allow ctime(), gmtime(), and localtime() to take None as equivalent to an omitted arg
Fred Drake <fdrake@acm.org>
parents: 32772
diff changeset
302
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
303 if (!PyArg_ParseTuple(args, format, &ot))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
304 return 0;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
305 if (ot == NULL || ot == Py_None)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
306 *pwhen = floattime();
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
307 else {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
308 double when = PyFloat_AsDouble(ot);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
309 if (PyErr_Occurred())
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
310 return 0;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
311 *pwhen = when;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
312 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
313 return 1;
32939
582eb51b8492 allow ctime(), gmtime(), and localtime() to take None as equivalent to an omitted arg
Fred Drake <fdrake@acm.org>
parents: 32772
diff changeset
314 }
582eb51b8492 allow ctime(), gmtime(), and localtime() to take None as equivalent to an omitted arg
Fred Drake <fdrake@acm.org>
parents: 32772
diff changeset
315
4615
87617701d721 Greatly renamed.
Barry Warsaw <barry@python.org>
parents: 4607
diff changeset
316 static PyObject *
13501
ca32ff7a067e ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents: 13447
diff changeset
317 time_gmtime(PyObject *self, PyObject *args)
1313
6ee380349c84 * Added gmtime/localtime/mktime and SYSV timezone globals to timemodule.c.
Guido van Rossum <guido@python.org>
parents: 1191
diff changeset
318 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
319 double when;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
320 if (!parse_time_double_args(args, "|O:gmtime", &when))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
321 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
322 return time_convert(when, gmtime);
1313
6ee380349c84 * Added gmtime/localtime/mktime and SYSV timezone globals to timemodule.c.
Guido van Rossum <guido@python.org>
parents: 1191
diff changeset
323 }
6ee380349c84 * Added gmtime/localtime/mktime and SYSV timezone globals to timemodule.c.
Guido van Rossum <guido@python.org>
parents: 1191
diff changeset
324
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22957
diff changeset
325 PyDoc_STRVAR(gmtime_doc,
44375
5f59123e781f Backport of fix for issue 1695.
Brett Cannon <bcannon@gmail.com>
parents: 41322
diff changeset
326 "gmtime([seconds]) -> (tm_year, tm_mon, tm_mday, tm_hour, tm_min,\n\
22256
54b636160acd Update docstrings to use te attribute names of the new structures returned
Fred Drake <fdrake@acm.org>
parents: 22114
diff changeset
327 tm_sec, tm_wday, tm_yday, tm_isdst)\n\
8568
8716816e0859 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8470
diff changeset
328 \n\
16054
4cc9a1ebea62 Make the 'time' argument to the timemodule functions strftime, asctime,
Thomas Wouters <thomas@python.org>
parents: 15539
diff changeset
329 Convert seconds since the Epoch to a time tuple expressing UTC (a.k.a.\n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22957
diff changeset
330 GMT). When 'seconds' is not passed in, convert the current time instead.");
8568
8716816e0859 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8470
diff changeset
331
4615
87617701d721 Greatly renamed.
Barry Warsaw <barry@python.org>
parents: 4607
diff changeset
332 static PyObject *
13501
ca32ff7a067e ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents: 13447
diff changeset
333 time_localtime(PyObject *self, PyObject *args)
1313
6ee380349c84 * Added gmtime/localtime/mktime and SYSV timezone globals to timemodule.c.
Guido van Rossum <guido@python.org>
parents: 1191
diff changeset
334 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
335 double when;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
336 if (!parse_time_double_args(args, "|O:localtime", &when))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
337 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
338 return time_convert(when, localtime);
1313
6ee380349c84 * Added gmtime/localtime/mktime and SYSV timezone globals to timemodule.c.
Guido van Rossum <guido@python.org>
parents: 1191
diff changeset
339 }
6ee380349c84 * Added gmtime/localtime/mktime and SYSV timezone globals to timemodule.c.
Guido van Rossum <guido@python.org>
parents: 1191
diff changeset
340
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22957
diff changeset
341 PyDoc_STRVAR(localtime_doc,
44374
863692dc411e Fix the docstrings of time.localtime() and gmtime() for the tm_mday field.
Brett Cannon <bcannon@gmail.com>
parents: 41321
diff changeset
342 "localtime([seconds]) -> (tm_year,tm_mon,tm_mday,tm_hour,tm_min,\n\
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
343 tm_sec,tm_wday,tm_yday,tm_isdst)\n\
21133
ec88fc430127 Patch #481718: Time module doc string changes.
Martin v. Löwis <martin@v.loewis.de>
parents: 20654
diff changeset
344 \n\
16054
4cc9a1ebea62 Make the 'time' argument to the timemodule functions strftime, asctime,
Thomas Wouters <thomas@python.org>
parents: 15539
diff changeset
345 Convert seconds since the Epoch to a time tuple expressing local time.\n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22957
diff changeset
346 When 'seconds' is not passed in, convert the current time instead.");
8568
8716816e0859 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8470
diff changeset
347
1318
92e6a8cf14be * pythonmain.c: -k option, usage message, more environment flags.
Guido van Rossum <guido@python.org>
parents: 1313
diff changeset
348 static int
13501
ca32ff7a067e ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents: 13447
diff changeset
349 gettmarg(PyObject *args, struct tm *p)
1318
92e6a8cf14be * pythonmain.c: -k option, usage message, more environment flags.
Guido van Rossum <guido@python.org>
parents: 1313
diff changeset
350 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
351 int y;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
352 memset((void *) p, '\0', sizeof(struct tm));
9042
9fd915d23cfa Y2K fix affecting asctime(), mktime(), strftime().
Guido van Rossum <guido@python.org>
parents: 8823
diff changeset
353
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
354 if (!PyArg_Parse(args, "(iiiiiiiii)",
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
355 &y,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
356 &p->tm_mon,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
357 &p->tm_mday,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
358 &p->tm_hour,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
359 &p->tm_min,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
360 &p->tm_sec,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
361 &p->tm_wday,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
362 &p->tm_yday,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
363 &p->tm_isdst))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
364 return 0;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
365 if (y < 1900) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
366 PyObject *accept = PyDict_GetItemString(moddict,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
367 "accept2dyear");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
368 if (accept == NULL || !PyInt_Check(accept) ||
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
369 PyInt_AsLong(accept) == 0) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
370 PyErr_SetString(PyExc_ValueError,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
371 "year >= 1900 required");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
372 return 0;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
373 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
374 if (69 <= y && y <= 99)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
375 y += 1900;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
376 else if (0 <= y && y <= 68)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
377 y += 2000;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
378 else {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
379 PyErr_SetString(PyExc_ValueError,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
380 "year out of range");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
381 return 0;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
382 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
383 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
384 p->tm_year = y - 1900;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
385 p->tm_mon--;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
386 p->tm_wday = (p->tm_wday + 1) % 7;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
387 p->tm_yday--;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
388 return 1;
1318
92e6a8cf14be * pythonmain.c: -k option, usage message, more environment flags.
Guido van Rossum <guido@python.org>
parents: 1313
diff changeset
389 }
92e6a8cf14be * pythonmain.c: -k option, usage message, more environment flags.
Guido van Rossum <guido@python.org>
parents: 1313
diff changeset
390
3086
d7eea9013e73 added time.strftime()
Guido van Rossum <guido@python.org>
parents: 2533
diff changeset
391 #ifdef HAVE_STRFTIME
4615
87617701d721 Greatly renamed.
Barry Warsaw <barry@python.org>
parents: 4607
diff changeset
392 static PyObject *
13501
ca32ff7a067e ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents: 13447
diff changeset
393 time_strftime(PyObject *self, PyObject *args)
3086
d7eea9013e73 added time.strftime()
Guido van Rossum <guido@python.org>
parents: 2533
diff changeset
394 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
395 PyObject *tup = NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
396 struct tm buf;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
397 const char *fmt;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
398 size_t fmtlen, buflen;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
399 char *outbuf = 0;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
400 size_t i;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
401
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
402 memset((void *) &buf, '\0', sizeof(buf));
3086
d7eea9013e73 added time.strftime()
Guido van Rossum <guido@python.org>
parents: 2533
diff changeset
403
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
404 if (!PyArg_ParseTuple(args, "s|O:strftime", &fmt, &tup))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
405 return NULL;
8161
125bfd896967 Instead of calling mktime(), which has all sorts of unwanted side
Guido van Rossum <guido@python.org>
parents: 7574
diff changeset
406
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
407 if (tup == NULL) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
408 time_t tt = time(NULL);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
409 buf = *localtime(&tt);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
410 } else if (!gettmarg(tup, &buf))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
411 return NULL;
16054
4cc9a1ebea62 Make the 'time' argument to the timemodule functions strftime, asctime,
Thomas Wouters <thomas@python.org>
parents: 15539
diff changeset
412
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
413 /* Checks added to make sure strftime() does not crash Python by
61463
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56184
diff changeset
414 indexing blindly into some array for a textual representation
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56184
diff changeset
415 by some bad index (fixes bug #897625).
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
416
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
417 Also support values of zero from Python code for arguments in which
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
418 that is out of range by forcing that value to the lowest value that
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
419 is valid (fixed bug #1520914).
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
420
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
421 Valid ranges based on what is allowed in struct tm:
20080
f48a41c97021 SF patch #459385 (Norman Vine): time.timezone fix for Cygwin.
Guido van Rossum <guido@python.org>
parents: 19426
diff changeset
422
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
423 - tm_year: [0, max(int)] (1)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
424 - tm_mon: [0, 11] (2)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
425 - tm_mday: [1, 31]
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
426 - tm_hour: [0, 23]
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
427 - tm_min: [0, 59]
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
428 - tm_sec: [0, 60]
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
429 - tm_wday: [0, 6] (1)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
430 - tm_yday: [0, 365] (2)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
431 - tm_isdst: [-max(int), max(int)]
39114
979e390e2bb4 Fix bug #1520914. Starting in 2.4, time.strftime() began to check the bounds
Brett Cannon <bcannon@gmail.com>
parents: 38999
diff changeset
432
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
433 (1) gettmarg() handles bounds-checking.
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
434 (2) Python's acceptable range is one greater than the range in C,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
435 thus need to check against automatic decrement by gettmarg().
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
436 */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
437 if (buf.tm_mon == -1)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
438 buf.tm_mon = 0;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
439 else if (buf.tm_mon < 0 || buf.tm_mon > 11) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
440 PyErr_SetString(PyExc_ValueError, "month out of range");
61463
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56184
diff changeset
441 return NULL;
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
442 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
443 if (buf.tm_mday == 0)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
444 buf.tm_mday = 1;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
445 else if (buf.tm_mday < 0 || buf.tm_mday > 31) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
446 PyErr_SetString(PyExc_ValueError, "day of month out of range");
61463
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56184
diff changeset
447 return NULL;
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
448 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
449 if (buf.tm_hour < 0 || buf.tm_hour > 23) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
450 PyErr_SetString(PyExc_ValueError, "hour out of range");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
451 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
452 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
453 if (buf.tm_min < 0 || buf.tm_min > 59) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
454 PyErr_SetString(PyExc_ValueError, "minute out of range");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
455 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
456 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
457 if (buf.tm_sec < 0 || buf.tm_sec > 61) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
458 PyErr_SetString(PyExc_ValueError, "seconds out of range");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
459 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
460 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
461 /* tm_wday does not need checking of its upper-bound since taking
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
462 ``% 7`` in gettmarg() automatically restricts the range. */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
463 if (buf.tm_wday < 0) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
464 PyErr_SetString(PyExc_ValueError, "day of week out of range");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
465 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
466 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
467 if (buf.tm_yday == -1)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
468 buf.tm_yday = 0;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
469 else if (buf.tm_yday < 0 || buf.tm_yday > 365) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
470 PyErr_SetString(PyExc_ValueError, "day of year out of range");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
471 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
472 }
61463
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56184
diff changeset
473 /* Normalize tm_isdst just in case someone foolishly implements %Z
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56184
diff changeset
474 based on the assumption that tm_isdst falls within the range of
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56184
diff changeset
475 [-1, 1] */
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56184
diff changeset
476 if (buf.tm_isdst < -1)
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56184
diff changeset
477 buf.tm_isdst = -1;
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56184
diff changeset
478 else if (buf.tm_isdst > 1)
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56184
diff changeset
479 buf.tm_isdst = 1;
31608
ae8dbf500172 Have strftime() check its time tuple argument to make sure the tuple's values
Brett Cannon <bcannon@gmail.com>
parents: 30979
diff changeset
480
51311
b586ca3a3062 issue 4804: Provide checks for the format string of strftime, and for the "mode" string of fopen on Windows. These strings are user provided from python and so we can avoid invoking the C runtime invalid parameter handler by first checking that they are valid.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 47895
diff changeset
481 #ifdef MS_WINDOWS
61463
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56184
diff changeset
482 /* check that the format string contains only valid directives */
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56184
diff changeset
483 for(outbuf = strchr(fmt, '%');
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56184
diff changeset
484 outbuf != NULL;
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56184
diff changeset
485 outbuf = strchr(outbuf+2, '%'))
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56184
diff changeset
486 {
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56184
diff changeset
487 if (outbuf[1]=='#')
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56184
diff changeset
488 ++outbuf; /* not documented by python, */
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56184
diff changeset
489 if (outbuf[1]=='\0' ||
69169
1320f29bcf98 Issue #10762: Guard against invalid/non-supported format string '%f' on Windows. Patch Santoso Wijaya.
Senthil Kumaran <orsenthil@gmail.com>
parents: 68588
diff changeset
490 !strchr("aAbBcdHIjmMpSUwWxXyYzZ%", outbuf[1]))
61463
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56184
diff changeset
491 {
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56184
diff changeset
492 PyErr_SetString(PyExc_ValueError, "Invalid format string");
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56184
diff changeset
493 return 0;
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56184
diff changeset
494 }
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
495 }
51311
b586ca3a3062 issue 4804: Provide checks for the format string of strftime, and for the "mode" string of fopen on Windows. These strings are user provided from python and so we can avoid invoking the C runtime invalid parameter handler by first checking that they are valid.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 47895
diff changeset
496 #endif
39114
979e390e2bb4 Fix bug #1520914. Starting in 2.4, time.strftime() began to check the bounds
Brett Cannon <bcannon@gmail.com>
parents: 38999
diff changeset
497
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
498 fmtlen = strlen(fmt);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
499
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
500 /* I hate these functions that presume you know how big the output
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
501 * will be ahead of time...
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
502 */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
503 for (i = 1024; ; i += i) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
504 outbuf = (char *)malloc(i);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
505 if (outbuf == NULL) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
506 return PyErr_NoMemory();
31608
ae8dbf500172 Have strftime() check its time tuple argument to make sure the tuple's values
Brett Cannon <bcannon@gmail.com>
parents: 30979
diff changeset
507 }
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
508 buflen = strftime(outbuf, i, fmt, &buf);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
509 if (buflen > 0 || i >= 256 * fmtlen) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
510 /* If the buffer is 256 times as long as the format,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
511 it's probably not failing for lack of room!
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
512 More likely, the format yields an empty result,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
513 e.g. an empty format, or %Z when the timezone
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
514 is unknown. */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
515 PyObject *ret;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
516 ret = PyString_FromStringAndSize(outbuf, buflen);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
517 free(outbuf);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
518 return ret;
31608
ae8dbf500172 Have strftime() check its time tuple argument to make sure the tuple's values
Brett Cannon <bcannon@gmail.com>
parents: 30979
diff changeset
519 }
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
520 free(outbuf);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
521 #if defined _MSC_VER && _MSC_VER >= 1400 && defined(__STDC_SECURE_LIB__)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
522 /* VisualStudio .NET 2005 does this properly */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
523 if (buflen == 0 && errno == EINVAL) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
524 PyErr_SetString(PyExc_ValueError, "Invalid format string");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
525 return 0;
31608
ae8dbf500172 Have strftime() check its time tuple argument to make sure the tuple's values
Brett Cannon <bcannon@gmail.com>
parents: 30979
diff changeset
526 }
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
527 #endif
10275
632bd3a5ddef Patch by Tadayoshi Funaba (with some changes) to be smarter about
Guido van Rossum <guido@python.org>
parents: 10269
diff changeset
528
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
529 }
3086
d7eea9013e73 added time.strftime()
Guido van Rossum <guido@python.org>
parents: 2533
diff changeset
530 }
8568
8716816e0859 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8470
diff changeset
531
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22957
diff changeset
532 PyDoc_STRVAR(strftime_doc,
16054
4cc9a1ebea62 Make the 'time' argument to the timemodule functions strftime, asctime,
Thomas Wouters <thomas@python.org>
parents: 15539
diff changeset
533 "strftime(format[, tuple]) -> string\n\
8568
8716816e0859 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8470
diff changeset
534 \n\
8716816e0859 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8470
diff changeset
535 Convert a time tuple to a string according to a format specification.\n\
16054
4cc9a1ebea62 Make the 'time' argument to the timemodule functions strftime, asctime,
Thomas Wouters <thomas@python.org>
parents: 15539
diff changeset
536 See the library reference manual for formatting codes. When the time tuple\n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22957
diff changeset
537 is not present, current time as returned by localtime() is used.");
3086
d7eea9013e73 added time.strftime()
Guido van Rossum <guido@python.org>
parents: 2533
diff changeset
538 #endif /* HAVE_STRFTIME */
d7eea9013e73 added time.strftime()
Guido van Rossum <guido@python.org>
parents: 2533
diff changeset
539
24323
ab1877a7b262 Patch to call the Pure python strptime implementation if there's no
Guido van Rossum <guido@python.org>
parents: 24243
diff changeset
540 static PyObject *
ab1877a7b262 Patch to call the Pure python strptime implementation if there's no
Guido van Rossum <guido@python.org>
parents: 24243
diff changeset
541 time_strptime(PyObject *self, PyObject *args)
ab1877a7b262 Patch to call the Pure python strptime implementation if there's no
Guido van Rossum <guido@python.org>
parents: 24243
diff changeset
542 {
44439
0cbe94bea2c7 Modified PyImport_Import and PyImport_ImportModule to always use absolute imports by calling __import__ with an explicit level of 0
Christian Heimes <christian@cheimes.de>
parents: 44374
diff changeset
543 PyObject *strptime_module = PyImport_ImportModuleNoBlock("_strptime");
28569
75113759252c SF patch #718867: Fix reference leak for time.strptime
Raymond Hettinger <python@rcn.com>
parents: 28299
diff changeset
544 PyObject *strptime_result;
24323
ab1877a7b262 Patch to call the Pure python strptime implementation if there's no
Guido van Rossum <guido@python.org>
parents: 24243
diff changeset
545
27294
7055f4c1edcc Windows flavor of floatsleep(): folded long lines, introduced a temp
Tim Peters <tim.peters@gmail.com>
parents: 27281
diff changeset
546 if (!strptime_module)
61463
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56184
diff changeset
547 return NULL;
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56184
diff changeset
548 strptime_result = PyObject_CallMethod(strptime_module,
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 56184
diff changeset
549 "_strptime_time", "O", args);
28569
75113759252c SF patch #718867: Fix reference leak for time.strptime
Raymond Hettinger <python@rcn.com>
parents: 28299
diff changeset
550 Py_DECREF(strptime_module);
75113759252c SF patch #718867: Fix reference leak for time.strptime
Raymond Hettinger <python@rcn.com>
parents: 28299
diff changeset
551 return strptime_result;
24323
ab1877a7b262 Patch to call the Pure python strptime implementation if there's no
Guido van Rossum <guido@python.org>
parents: 24243
diff changeset
552 }
ab1877a7b262 Patch to call the Pure python strptime implementation if there's no
Guido van Rossum <guido@python.org>
parents: 24243
diff changeset
553
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22957
diff changeset
554 PyDoc_STRVAR(strptime_doc,
29710
4d26547ebfc3 Make temporary change of using _strptime for time.strptime permanent.
Brett Cannon <bcannon@gmail.com>
parents: 29066
diff changeset
555 "strptime(string, format) -> struct_time\n\
21133
ec88fc430127 Patch #481718: Time module doc string changes.
Martin v. Löwis <martin@v.loewis.de>
parents: 20654
diff changeset
556 \n\
8568
8716816e0859 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8470
diff changeset
557 Parse a string to a time tuple according to a format specification.\n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22957
diff changeset
558 See the library reference manual for formatting codes (same as strftime()).");
24323
ab1877a7b262 Patch to call the Pure python strptime implementation if there's no
Guido van Rossum <guido@python.org>
parents: 24243
diff changeset
559
8470
933882c0e9fb Added strptime, if it exists. Modified after a patch by Jesse Hallio.
Guido van Rossum <guido@python.org>
parents: 8161
diff changeset
560
4615
87617701d721 Greatly renamed.
Barry Warsaw <barry@python.org>
parents: 4607
diff changeset
561 static PyObject *
13501
ca32ff7a067e ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents: 13447
diff changeset
562 time_asctime(PyObject *self, PyObject *args)
1318
92e6a8cf14be * pythonmain.c: -k option, usage message, more environment flags.
Guido van Rossum <guido@python.org>
parents: 1313
diff changeset
563 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
564 PyObject *tup = NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
565 struct tm buf;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
566 char *p;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
567 if (!PyArg_UnpackTuple(args, "asctime", 0, 1, &tup))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
568 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
569 if (tup == NULL) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
570 time_t tt = time(NULL);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
571 buf = *localtime(&tt);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
572 } else if (!gettmarg(tup, &buf))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
573 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
574 p = asctime(&buf);
67281
e28868cf9825 Merged revisions 87663 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents: 61465
diff changeset
575 if (p == NULL) {
e28868cf9825 Merged revisions 87663 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents: 61465
diff changeset
576 PyErr_SetString(PyExc_ValueError, "invalid time");
e28868cf9825 Merged revisions 87663 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents: 61465
diff changeset
577 return NULL;
e28868cf9825 Merged revisions 87663 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents: 61465
diff changeset
578 }
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
579 if (p[24] == '\n')
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
580 p[24] = '\0';
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
581 return PyString_FromString(p);
1318
92e6a8cf14be * pythonmain.c: -k option, usage message, more environment flags.
Guido van Rossum <guido@python.org>
parents: 1313
diff changeset
582 }
92e6a8cf14be * pythonmain.c: -k option, usage message, more environment flags.
Guido van Rossum <guido@python.org>
parents: 1313
diff changeset
583
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22957
diff changeset
584 PyDoc_STRVAR(asctime_doc,
16054
4cc9a1ebea62 Make the 'time' argument to the timemodule functions strftime, asctime,
Thomas Wouters <thomas@python.org>
parents: 15539
diff changeset
585 "asctime([tuple]) -> string\n\
8568
8716816e0859 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8470
diff changeset
586 \n\
16054
4cc9a1ebea62 Make the 'time' argument to the timemodule functions strftime, asctime,
Thomas Wouters <thomas@python.org>
parents: 15539
diff changeset
587 Convert a time tuple to a string, e.g. 'Sat Jun 06 16:26:11 1998'.\n\
4cc9a1ebea62 Make the 'time' argument to the timemodule functions strftime, asctime,
Thomas Wouters <thomas@python.org>
parents: 15539
diff changeset
588 When the time tuple is not present, current time as returned by localtime()\n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22957
diff changeset
589 is used.");
8568
8716816e0859 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8470
diff changeset
590
4615
87617701d721 Greatly renamed.
Barry Warsaw <barry@python.org>
parents: 4607
diff changeset
591 static PyObject *
13501
ca32ff7a067e ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents: 13447
diff changeset
592 time_ctime(PyObject *self, PyObject *args)
1318
92e6a8cf14be * pythonmain.c: -k option, usage message, more environment flags.
Guido van Rossum <guido@python.org>
parents: 1313
diff changeset
593 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
594 PyObject *ot = NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
595 time_t tt;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
596 char *p;
20080
f48a41c97021 SF patch #459385 (Norman Vine): time.timezone fix for Cygwin.
Guido van Rossum <guido@python.org>
parents: 19426
diff changeset
597
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
598 if (!PyArg_UnpackTuple(args, "ctime", 0, 1, &ot))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
599 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
600 if (ot == NULL || ot == Py_None)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
601 tt = time(NULL);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
602 else {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
603 double dt = PyFloat_AsDouble(ot);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
604 if (PyErr_Occurred())
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
605 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
606 tt = _PyTime_DoubleToTimet(dt);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
607 if (tt == (time_t)-1 && PyErr_Occurred())
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
608 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
609 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
610 p = ctime(&tt);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
611 if (p == NULL) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
612 PyErr_SetString(PyExc_ValueError, "unconvertible time");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
613 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
614 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
615 if (p[24] == '\n')
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
616 p[24] = '\0';
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
617 return PyString_FromString(p);
1318
92e6a8cf14be * pythonmain.c: -k option, usage message, more environment flags.
Guido van Rossum <guido@python.org>
parents: 1313
diff changeset
618 }
92e6a8cf14be * pythonmain.c: -k option, usage message, more environment flags.
Guido van Rossum <guido@python.org>
parents: 1313
diff changeset
619
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22957
diff changeset
620 PyDoc_STRVAR(ctime_doc,
8568
8716816e0859 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8470
diff changeset
621 "ctime(seconds) -> string\n\
8716816e0859 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8470
diff changeset
622 \n\
8716816e0859 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8470
diff changeset
623 Convert a time in seconds since the Epoch to a string in local time.\n\
16054
4cc9a1ebea62 Make the 'time' argument to the timemodule functions strftime, asctime,
Thomas Wouters <thomas@python.org>
parents: 15539
diff changeset
624 This is equivalent to asctime(localtime(seconds)). When the time tuple is\n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22957
diff changeset
625 not present, current time as returned by localtime() is used.");
8568
8716816e0859 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8470
diff changeset
626
7574
7e7d6b1b8a4b Check for HAVE_MKTIME (if you don't have it, some tests will fail, but
Guido van Rossum <guido@python.org>
parents: 7532
diff changeset
627 #ifdef HAVE_MKTIME
4615
87617701d721 Greatly renamed.
Barry Warsaw <barry@python.org>
parents: 4607
diff changeset
628 static PyObject *
38489
3fe3ccdf0155 Make use of METH_O and METH_NOARGS where possible.
Georg Brandl <georg@python.org>
parents: 38330
diff changeset
629 time_mktime(PyObject *self, PyObject *tup)
1313
6ee380349c84 * Added gmtime/localtime/mktime and SYSV timezone globals to timemodule.c.
Guido van Rossum <guido@python.org>
parents: 1191
diff changeset
630 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
631 struct tm buf;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
632 time_t tt;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
633 if (!gettmarg(tup, &buf))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
634 return NULL;
67948
7a89f4a73d1a Merged revisions 87919 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents: 67921
diff changeset
635 buf.tm_wday = -1; /* sentinel; original value ignored */
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
636 tt = mktime(&buf);
67948
7a89f4a73d1a Merged revisions 87919 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents: 67921
diff changeset
637 /* Return value of -1 does not necessarily mean an error, but tm_wday
68588
cd8d3c2d3bce #11565: Fix several typos. Patch by Piotr Kasprzyk.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 68256
diff changeset
638 * cannot remain set to -1 if mktime succeeded. */
67948
7a89f4a73d1a Merged revisions 87919 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents: 67921
diff changeset
639 if (tt == (time_t)(-1) && buf.tm_wday == -1) {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
640 PyErr_SetString(PyExc_OverflowError,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
641 "mktime argument out of range");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
642 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
643 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
644 return PyFloat_FromDouble((double)tt);
1313
6ee380349c84 * Added gmtime/localtime/mktime and SYSV timezone globals to timemodule.c.
Guido van Rossum <guido@python.org>
parents: 1191
diff changeset
645 }
8568
8716816e0859 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8470
diff changeset
646
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22957
diff changeset
647 PyDoc_STRVAR(mktime_doc,
8568
8716816e0859 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8470
diff changeset
648 "mktime(tuple) -> floating point number\n\
8716816e0859 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8470
diff changeset
649 \n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22957
diff changeset
650 Convert a time tuple in local time to seconds since the Epoch.");
7574
7e7d6b1b8a4b Check for HAVE_MKTIME (if you don't have it, some tests will fail, but
Guido van Rossum <guido@python.org>
parents: 7532
diff changeset
651 #endif /* HAVE_MKTIME */
1313
6ee380349c84 * Added gmtime/localtime/mktime and SYSV timezone globals to timemodule.c.
Guido van Rossum <guido@python.org>
parents: 1191
diff changeset
652
28299
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
653 #ifdef HAVE_WORKING_TZSET
46317
864a5671c7a4 Declare inittimezone static.
Skip Montanaro <skip@pobox.com>
parents: 45767
diff changeset
654 static void inittimezone(PyObject *module);
28299
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
655
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
656 static PyObject *
38489
3fe3ccdf0155 Make use of METH_O and METH_NOARGS where possible.
Georg Brandl <georg@python.org>
parents: 38330
diff changeset
657 time_tzset(PyObject *self, PyObject *unused)
28299
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
658 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
659 PyObject* m;
28299
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
660
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
661 m = PyImport_ImportModuleNoBlock("time");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
662 if (m == NULL) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
663 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
664 }
14346
5397fdf88ec2 Do the absolute minimal amount of modifications to eradicate
Barry Warsaw <barry@python.org>
parents: 14001
diff changeset
665
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
666 tzset();
28299
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
667
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
668 /* Reset timezone, altzone, daylight and tzname */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
669 inittimezone(m);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
670 Py_DECREF(m);
32388
5cf507b64f31 Bug 975996: Add _PyTime_DoubleToTimet to C API
Tim Peters <tim.peters@gmail.com>
parents: 32384
diff changeset
671
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
672 Py_INCREF(Py_None);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
673 return Py_None;
28299
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
674 }
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
675
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
676 PyDoc_STRVAR(tzset_doc,
67921
89d52effc30a Merged revisions 86542,87136,87216,87221,87228,87256,87337-87338,87372,87516,87571,88164 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 67280
diff changeset
677 "tzset()\n\
8568
8716816e0859 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8470
diff changeset
678 \n\
28299
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
679 Initialize, or reinitialize, the local timezone to the value stored in\n\
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
680 os.environ['TZ']. The TZ environment variable should be specified in\n\
32772
2ec451230b8e Fix SF #994580, typo in time.tzsets docstring. Backport candidate
Neal Norwitz <nnorwitz@gmail.com>
parents: 32388
diff changeset
681 standard Unix timezone format as documented in the tzset man page\n\
28299
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
682 (eg. 'US/Eastern', 'Europe/Amsterdam'). Unknown timezones will silently\n\
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
683 fall back to UTC. If the TZ environment variable is not set, the local\n\
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
684 timezone is set to the systems best guess of wallclock time.\n\
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
685 Changing the TZ environment variable without calling tzset *may* change\n\
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
686 the local timezone used by methods such as localtime, but this behaviour\n\
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
687 should not be relied on.");
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
688 #endif /* HAVE_WORKING_TZSET */
20080
f48a41c97021 SF patch #459385 (Norman Vine): time.timezone fix for Cygwin.
Guido van Rossum <guido@python.org>
parents: 19426
diff changeset
689
46317
864a5671c7a4 Declare inittimezone static.
Skip Montanaro <skip@pobox.com>
parents: 45767
diff changeset
690 static void
864a5671c7a4 Declare inittimezone static.
Skip Montanaro <skip@pobox.com>
parents: 45767
diff changeset
691 inittimezone(PyObject *m) {
28299
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
692 /* This code moved from inittime wholesale to allow calling it from
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
693 time_tzset. In the future, some parts of it can be moved back
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
694 (for platforms that don't HAVE_WORKING_TZSET, when we know what they
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
695 are), and the extraneous calls to tzset(3) should be removed.
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
696 I haven't done this yet, as I don't want to change this code as
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
697 little as possible when introducing the time.tzset and time.tzsetwall
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
698 methods. This should simply be a method of doing the following once,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
699 at the top of this function and removing the call to tzset() from
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
700 time_tzset():
8568
8716816e0859 Added doc strings.
Guido van Rossum <guido@python.org>
parents: 8470
diff changeset
701
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
702 #ifdef HAVE_TZSET
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
703 tzset()
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
704 #endif
22728
14b7986a92e1 Remove all but one use of the module dict.
Fred Drake <fdrake@acm.org>
parents: 22256
diff changeset
705
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
706 And I'm lazy and hate C so nyer.
28299
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
707 */
20080
f48a41c97021 SF patch #459385 (Norman Vine): time.timezone fix for Cygwin.
Guido van Rossum <guido@python.org>
parents: 19426
diff changeset
708 #if defined(HAVE_TZNAME) && !defined(__GLIBC__) && !defined(__CYGWIN__)
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
709 tzset();
9160
f0a92c0a115e Fixes for OS/2 by Jeff Rush.
Guido van Rossum <guido@python.org>
parents: 9042
diff changeset
710 #ifdef PYOS_OS2
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
711 PyModule_AddIntConstant(m, "timezone", _timezone);
9160
f0a92c0a115e Fixes for OS/2 by Jeff Rush.
Guido van Rossum <guido@python.org>
parents: 9042
diff changeset
712 #else /* !PYOS_OS2 */
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
713 PyModule_AddIntConstant(m, "timezone", timezone);
9160
f0a92c0a115e Fixes for OS/2 by Jeff Rush.
Guido van Rossum <guido@python.org>
parents: 9042
diff changeset
714 #endif /* PYOS_OS2 */
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
715 #ifdef HAVE_ALTZONE
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
716 PyModule_AddIntConstant(m, "altzone", altzone);
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
717 #else
9160
f0a92c0a115e Fixes for OS/2 by Jeff Rush.
Guido van Rossum <guido@python.org>
parents: 9042
diff changeset
718 #ifdef PYOS_OS2
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
719 PyModule_AddIntConstant(m, "altzone", _timezone-3600);
9160
f0a92c0a115e Fixes for OS/2 by Jeff Rush.
Guido van Rossum <guido@python.org>
parents: 9042
diff changeset
720 #else /* !PYOS_OS2 */
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
721 PyModule_AddIntConstant(m, "altzone", timezone-3600);
9160
f0a92c0a115e Fixes for OS/2 by Jeff Rush.
Guido van Rossum <guido@python.org>
parents: 9042
diff changeset
722 #endif /* PYOS_OS2 */
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
723 #endif
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
724 PyModule_AddIntConstant(m, "daylight", daylight);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
725 PyModule_AddObject(m, "tzname",
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
726 Py_BuildValue("(zz)", tzname[0], tzname[1]));
20080
f48a41c97021 SF patch #459385 (Norman Vine): time.timezone fix for Cygwin.
Guido van Rossum <guido@python.org>
parents: 19426
diff changeset
727 #else /* !HAVE_TZNAME || __GLIBC__ || __CYGWIN__*/
25810
915112671152 Patch #623780: Replace obsolete struct macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 24471
diff changeset
728 #ifdef HAVE_STRUCT_TM_TM_ZONE
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
729 {
1313
6ee380349c84 * Added gmtime/localtime/mktime and SYSV timezone globals to timemodule.c.
Guido van Rossum <guido@python.org>
parents: 1191
diff changeset
730 #define YEAR ((time_t)((365 * 24 + 6) * 3600))
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
731 time_t t;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
732 struct tm *p;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
733 long janzone, julyzone;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
734 char janname[10], julyname[10];
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
735 t = (time((time_t *)0) / YEAR) * YEAR;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
736 p = localtime(&t);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
737 janzone = -p->tm_gmtoff;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
738 strncpy(janname, p->tm_zone ? p->tm_zone : " ", 9);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
739 janname[9] = '\0';
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
740 t += YEAR/2;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
741 p = localtime(&t);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
742 julyzone = -p->tm_gmtoff;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
743 strncpy(julyname, p->tm_zone ? p->tm_zone : " ", 9);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
744 julyname[9] = '\0';
20080
f48a41c97021 SF patch #459385 (Norman Vine): time.timezone fix for Cygwin.
Guido van Rossum <guido@python.org>
parents: 19426
diff changeset
745
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
746 if( janzone < julyzone ) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
747 /* DST is reversed in the southern hemisphere */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
748 PyModule_AddIntConstant(m, "timezone", julyzone);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
749 PyModule_AddIntConstant(m, "altzone", janzone);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
750 PyModule_AddIntConstant(m, "daylight",
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
751 janzone != julyzone);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
752 PyModule_AddObject(m, "tzname",
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
753 Py_BuildValue("(zz)",
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
754 julyname, janname));
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
755 } else {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
756 PyModule_AddIntConstant(m, "timezone", janzone);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
757 PyModule_AddIntConstant(m, "altzone", julyzone);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
758 PyModule_AddIntConstant(m, "daylight",
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
759 janzone != julyzone);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
760 PyModule_AddObject(m, "tzname",
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
761 Py_BuildValue("(zz)",
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
762 janname, julyname));
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
763 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
764 }
6459
b65eb44422ba timezone support for macintosh (Jack)
Guido van Rossum <guido@python.org>
parents: 5238
diff changeset
765 #else
25810
915112671152 Patch #623780: Replace obsolete struct macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 24471
diff changeset
766 #endif /* HAVE_STRUCT_TM_TM_ZONE */
17079
bc0555be2212 SF patch 407758, "timemodule patches for Cygwin", from Norman Vine.
Tim Peters <tim.peters@gmail.com>
parents: 16997
diff changeset
767 #ifdef __CYGWIN__
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
768 tzset();
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
769 PyModule_AddIntConstant(m, "timezone", _timezone);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
770 PyModule_AddIntConstant(m, "altzone", _timezone-3600);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
771 PyModule_AddIntConstant(m, "daylight", _daylight);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
772 PyModule_AddObject(m, "tzname",
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
773 Py_BuildValue("(zz)", _tzname[0], _tzname[1]));
17079
bc0555be2212 SF patch 407758, "timemodule patches for Cygwin", from Norman Vine.
Tim Peters <tim.peters@gmail.com>
parents: 16997
diff changeset
774 #endif /* __CYGWIN__ */
20080
f48a41c97021 SF patch #459385 (Norman Vine): time.timezone fix for Cygwin.
Guido van Rossum <guido@python.org>
parents: 19426
diff changeset
775 #endif /* !HAVE_TZNAME || __GLIBC__ || __CYGWIN__*/
28299
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
776 }
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
777
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
778
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
779 static PyMethodDef time_methods[] = {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
780 {"time", time_time, METH_NOARGS, time_doc},
28299
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
781 #ifdef HAVE_CLOCK
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
782 {"clock", time_clock, METH_NOARGS, clock_doc},
28299
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
783 #endif
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
784 {"sleep", time_sleep, METH_VARARGS, sleep_doc},
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
785 {"gmtime", time_gmtime, METH_VARARGS, gmtime_doc},
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
786 {"localtime", time_localtime, METH_VARARGS, localtime_doc},
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
787 {"asctime", time_asctime, METH_VARARGS, asctime_doc},
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
788 {"ctime", time_ctime, METH_VARARGS, ctime_doc},
28299
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
789 #ifdef HAVE_MKTIME
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
790 {"mktime", time_mktime, METH_O, mktime_doc},
28299
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
791 #endif
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
792 #ifdef HAVE_STRFTIME
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
793 {"strftime", time_strftime, METH_VARARGS, strftime_doc},
28299
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
794 #endif
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
795 {"strptime", time_strptime, METH_VARARGS, strptime_doc},
28299
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
796 #ifdef HAVE_WORKING_TZSET
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
797 {"tzset", time_tzset, METH_NOARGS, tzset_doc},
28299
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
798 #endif
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
799 {NULL, NULL} /* sentinel */
28299
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
800 };
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
801
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
802
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
803 PyDoc_STRVAR(module_doc,
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
804 "This module provides various functions to manipulate time values.\n\
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
805 \n\
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
806 There are two standard representations of time. One is the number\n\
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
807 of seconds since the Epoch, in UTC (a.k.a. GMT). It may be an integer\n\
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
808 or a floating point number (to represent fractions of seconds).\n\
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
809 The Epoch is system-defined; on Unix, it is generally January 1st, 1970.\n\
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
810 The actual value can be retrieved by calling gmtime(0).\n\
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
811 \n\
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
812 The other representation is a tuple of 9 integers giving local time.\n\
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
813 The tuple items are:\n\
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
814 year (four digits, e.g. 1998)\n\
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
815 month (1-12)\n\
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
816 day (1-31)\n\
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
817 hours (0-23)\n\
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
818 minutes (0-59)\n\
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
819 seconds (0-59)\n\
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
820 weekday (0-6, Monday is 0)\n\
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
821 Julian day (day in the year, 1-366)\n\
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
822 DST (Daylight Savings Time) flag (-1, 0 or 1)\n\
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
823 If the DST flag is 0, the time is given in the regular time zone;\n\
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
824 if it is 1, the time is given in the DST time zone;\n\
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
825 if it is -1, mktime() should guess based on the date and time.\n\
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
826 \n\
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
827 Variables:\n\
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
828 \n\
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
829 timezone -- difference in seconds between UTC and local standard time\n\
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
830 altzone -- difference in seconds between UTC and local DST time\n\
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
831 daylight -- whether local time should reflect DST\n\
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
832 tzname -- tuple of (standard time zone name, DST time zone name)\n\
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
833 \n\
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
834 Functions:\n\
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
835 \n\
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
836 time() -- return current time in seconds since the Epoch as a float\n\
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
837 clock() -- return CPU time since process start as a float\n\
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
838 sleep() -- delay for a number of seconds given as a float\n\
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
839 gmtime() -- convert seconds since Epoch to UTC tuple\n\
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
840 localtime() -- convert seconds since Epoch to local time tuple\n\
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
841 asctime() -- convert time tuple to string\n\
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
842 ctime() -- convert time in seconds to string\n\
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
843 mktime() -- convert local time tuple to seconds since Epoch\n\
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
844 strftime() -- convert time tuple to string according to format specification\n\
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
845 strptime() -- parse string to time tuple according to format specification\n\
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
846 tzset() -- change the local timezone");
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
847
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
848
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
849 PyMODINIT_FUNC
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
850 inittime(void)
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
851 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
852 PyObject *m;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
853 char *p;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
854 m = Py_InitModule3("time", time_methods, module_doc);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
855 if (m == NULL)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
856 return;
28299
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
857
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
858 /* Accept 2-digit dates unless PYTHONY2K is set and non-empty */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
859 p = Py_GETENV("PYTHONY2K");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
860 PyModule_AddIntConstant(m, "accept2dyear", (long) (!p || !*p));
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
861 /* Squirrel away the module's dictionary for the y2k check */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
862 moddict = PyModule_GetDict(m);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
863 Py_INCREF(moddict);
28299
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
864
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
865 /* Set, or reset, module variables like time.timezone */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
866 inittimezone(m);
28299
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
867
24243
c423a88b22ce Fix bug 581232 - [Windows] Can not interrupt time.sleep()
Mark Hammond <mhammond@skippinet.com.au>
parents: 24071
diff changeset
868 #ifdef MS_WINDOWS
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
869 /* Helper to allow interrupts for Windows.
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
870 If Ctrl+C event delivered while not sleeping
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
871 it will be ignored.
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
872 */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
873 main_thread = PyThread_get_thread_ident();
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
874 hInterruptEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
875 SetConsoleCtrlHandler( PyCtrlHandler, TRUE);
24243
c423a88b22ce Fix bug 581232 - [Windows] Can not interrupt time.sleep()
Mark Hammond <mhammond@skippinet.com.au>
parents: 24071
diff changeset
876 #endif /* MS_WINDOWS */
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
877 if (!initialized) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
878 PyStructSequence_InitType(&StructTimeType,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
879 &struct_time_type_desc);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
880 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
881 Py_INCREF(&StructTimeType);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
882 PyModule_AddObject(m, "struct_time", (PyObject*) &StructTimeType);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
883 initialized = 1;
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
884 }
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
885
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
886
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
887 /* Implement floattime() for various platforms */
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
888
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
889 static double
13651
8a063423e0b7 Bunch of minor ANSIfications: 'void initfunc()' -> 'void initfunc(void)',
Thomas Wouters <thomas@python.org>
parents: 13501
diff changeset
890 floattime(void)
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
891 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
892 /* There are three ways to get the time:
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
893 (1) gettimeofday() -- resolution in microseconds
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
894 (2) ftime() -- resolution in milliseconds
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
895 (3) time() -- resolution in seconds
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
896 In all cases the return value is a float in seconds.
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
897 Since on some systems (e.g. SCO ODT 3.0) gettimeofday() may
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
898 fail, so we fall back on ftime() or time().
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
899 Note: clock resolution does not imply clock accuracy! */
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
900 #ifdef HAVE_GETTIMEOFDAY
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
901 {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
902 struct timeval t;
2055
cf31eab6ab5a Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents: 1827
diff changeset
903 #ifdef GETTIMEOFDAY_NO_TZ
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
904 if (gettimeofday(&t) == 0)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
905 return (double)t.tv_sec + t.tv_usec*0.000001;
2055
cf31eab6ab5a Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents: 1827
diff changeset
906 #else /* !GETTIMEOFDAY_NO_TZ */
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
907 if (gettimeofday(&t, (struct timezone *)NULL) == 0)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
908 return (double)t.tv_sec + t.tv_usec*0.000001;
2055
cf31eab6ab5a Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents: 1827
diff changeset
909 #endif /* !GETTIMEOFDAY_NO_TZ */
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
910 }
37934
ea67628ddae5 Patch 1471925 - Weak linking support for OSX
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 37772
diff changeset
911
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
912 #endif /* !HAVE_GETTIMEOFDAY */
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
913 {
10362
1409e7687a9a Patch by Chris Herborth for BeOS code.
Guido van Rossum <guido@python.org>
parents: 10275
diff changeset
914 #if defined(HAVE_FTIME)
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
915 struct timeb t;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
916 ftime(&t);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
917 return (double)t.time + (double)t.millitm * (double)0.001;
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
918 #else /* !HAVE_FTIME */
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
919 time_t secs;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
920 time(&secs);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
921 return (double)secs;
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
922 #endif /* !HAVE_FTIME */
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
923 }
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
924 }
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
925
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
926
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
927 /* Implement floatsleep() for various platforms.
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
928 When interrupted (or when another error occurs), return -1 and
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
929 set an exception; else return 0. */
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
930
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
931 static int
2506
9d6e97d66670 changes for MPW
Guido van Rossum <guido@python.org>
parents: 2215
diff changeset
932 floatsleep(double secs)
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
933 {
24071
8142f8d668a0 Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents: 23832
diff changeset
934 /* XXX Should test for MS_WINDOWS first! */
22114
c454b76d51e7 OS/2 EMX port changes (Modules part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents: 21938
diff changeset
935 #if defined(HAVE_SELECT) && !defined(__BEOS__) && !defined(__EMX__)
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
936 struct timeval t;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
937 double frac;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
938 frac = fmod(secs, 1.0);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
939 secs = floor(secs);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
940 t.tv_sec = (long)secs;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
941 t.tv_usec = (long)(frac*1000000.0);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
942 Py_BEGIN_ALLOW_THREADS
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
943 if (select(0, (fd_set *)0, (fd_set *)0, (fd_set *)0, &t) != 0) {
11447
239ca4788bec Jack Jansen: Mac has no EINTR.
Guido van Rossum <guido@python.org>
parents: 11206
diff changeset
944 #ifdef EINTR
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
945 if (errno != EINTR) {
11447
239ca4788bec Jack Jansen: Mac has no EINTR.
Guido van Rossum <guido@python.org>
parents: 11206
diff changeset
946 #else
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
947 if (1) {
11447
239ca4788bec Jack Jansen: Mac has no EINTR.
Guido van Rossum <guido@python.org>
parents: 11206
diff changeset
948 #endif
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
949 Py_BLOCK_THREADS
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
950 PyErr_SetFromErrno(PyExc_IOError);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
951 return -1;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
952 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
953 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
954 Py_END_ALLOW_THREADS
21738
ca1b67f5a3ec Patch #504225: add plan9 ifdef to timemodule floatsleep.
Martin v. Löwis <martin@v.loewis.de>
parents: 21712
diff changeset
955 #elif defined(__WATCOMC__) && !defined(__QNX__)
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
956 /* XXX Can't interrupt this sleep */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
957 Py_BEGIN_ALLOW_THREADS
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
958 delay((int)(secs * 1000 + 0.5)); /* delay() uses milliseconds */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
959 Py_END_ALLOW_THREADS
24071
8142f8d668a0 Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents: 23832
diff changeset
960 #elif defined(MS_WINDOWS)
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
961 {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
962 double millisecs = secs * 1000.0;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
963 unsigned long ul_millis;
27294
7055f4c1edcc Windows flavor of floatsleep(): folded long lines, introduced a temp
Tim Peters <tim.peters@gmail.com>
parents: 27281
diff changeset
964
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
965 if (millisecs > (double)ULONG_MAX) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
966 PyErr_SetString(PyExc_OverflowError,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
967 "sleep length is too large");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
968 return -1;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
969 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
970 Py_BEGIN_ALLOW_THREADS
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
971 /* Allow sleep(0) to maintain win32 semantics, and as decreed
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
972 * by Guido, only the main thread can be interrupted.
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
973 */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
974 ul_millis = (unsigned long)millisecs;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
975 if (ul_millis == 0 ||
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
976 main_thread != PyThread_get_thread_ident())
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
977 Sleep(ul_millis);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
978 else {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
979 DWORD rc;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
980 ResetEvent(hInterruptEvent);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
981 rc = WaitForSingleObject(hInterruptEvent, ul_millis);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
982 if (rc == WAIT_OBJECT_0) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
983 /* Yield to make sure real Python signal
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
984 * handler called.
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
985 */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
986 Sleep(1);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
987 Py_BLOCK_THREADS
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
988 errno = EINTR;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
989 PyErr_SetFromErrno(PyExc_IOError);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
990 return -1;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
991 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
992 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
993 Py_END_ALLOW_THREADS
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
994 }
21738
ca1b67f5a3ec Patch #504225: add plan9 ifdef to timemodule floatsleep.
Martin v. Löwis <martin@v.loewis.de>
parents: 21712
diff changeset
995 #elif defined(PYOS_OS2)
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
996 /* This Sleep *IS* Interruptable by Exceptions */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
997 Py_BEGIN_ALLOW_THREADS
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
998 if (DosSleep(secs * 1000) != NO_ERROR) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
999 Py_BLOCK_THREADS
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
1000 PyErr_SetFromErrno(PyExc_IOError);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
1001 return -1;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
1002 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
1003 Py_END_ALLOW_THREADS
21738
ca1b67f5a3ec Patch #504225: add plan9 ifdef to timemodule floatsleep.
Martin v. Löwis <martin@v.loewis.de>
parents: 21712
diff changeset
1004 #elif defined(__BEOS__)
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
1005 /* This sleep *CAN BE* interrupted. */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
1006 {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
1007 if( secs <= 0.0 ) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
1008 return;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
1009 }
20080
f48a41c97021 SF patch #459385 (Norman Vine): time.timezone fix for Cygwin.
Guido van Rossum <guido@python.org>
parents: 19426
diff changeset
1010
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
1011 Py_BEGIN_ALLOW_THREADS
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
1012 /* BeOS snooze() is in microseconds... */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
1013 if( snooze( (bigtime_t)( secs * 1000.0 * 1000.0 ) ) == B_INTERRUPTED ) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
1014 Py_BLOCK_THREADS
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
1015 PyErr_SetFromErrno( PyExc_IOError );
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
1016 return -1;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
1017 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
1018 Py_END_ALLOW_THREADS
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
1019 }
21738
ca1b67f5a3ec Patch #504225: add plan9 ifdef to timemodule floatsleep.
Martin v. Löwis <martin@v.loewis.de>
parents: 21712
diff changeset
1020 #elif defined(RISCOS)
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
1021 if (secs <= 0.0)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
1022 return 0;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
1023 Py_BEGIN_ALLOW_THREADS
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
1024 /* This sleep *CAN BE* interrupted. */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
1025 if ( riscos_sleep(secs) )
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
1026 return -1;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
1027 Py_END_ALLOW_THREADS
21738
ca1b67f5a3ec Patch #504225: add plan9 ifdef to timemodule floatsleep.
Martin v. Löwis <martin@v.loewis.de>
parents: 21712
diff changeset
1028 #elif defined(PLAN9)
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
1029 {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
1030 double millisecs = secs * 1000.0;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
1031 if (millisecs > (double)LONG_MAX) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
1032 PyErr_SetString(PyExc_OverflowError, "sleep length is too large");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
1033 return -1;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
1034 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
1035 /* This sleep *CAN BE* interrupted. */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
1036 Py_BEGIN_ALLOW_THREADS
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
1037 if(sleep((long)millisecs) < 0){
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
1038 Py_BLOCK_THREADS
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
1039 PyErr_SetFromErrno(PyExc_IOError);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
1040 return -1;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
1041 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
1042 Py_END_ALLOW_THREADS
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
1043 }
21738
ca1b67f5a3ec Patch #504225: add plan9 ifdef to timemodule floatsleep.
Martin v. Löwis <martin@v.loewis.de>
parents: 21712
diff changeset
1044 #else
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
1045 /* XXX Can't interrupt this sleep */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
1046 Py_BEGIN_ALLOW_THREADS
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
1047 sleep((int)secs);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
1048 Py_END_ALLOW_THREADS
21738
ca1b67f5a3ec Patch #504225: add plan9 ifdef to timemodule floatsleep.
Martin v. Löwis <martin@v.loewis.de>
parents: 21712
diff changeset
1049 #endif
20539
2d599a36b67a SF patch #462296: Add attributes to os.stat results; by Nick Mathewson.
Guido van Rossum <guido@python.org>
parents: 20080
diff changeset
1050
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47895
diff changeset
1051 return 0;
209
e486c849c50c New hacks for include files to get time_t in the most portable way.
Guido van Rossum <guido@python.org>
parents: 181
diff changeset
1052 }
28299
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
1053
14316df1c298 - New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents: 27294
diff changeset
1054