Mercurial > cpython-lru_cache-weakref
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 |
| rev | line source |
|---|---|
|
145
853b736a6a9e
Added copyright notice.
Guido van Rossum <guido@python.org>
parents:
143
diff
changeset
|
1 |
| 6 | 2 /* Time module */ |
| 3 | |
| 4615 | 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 | 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 | 38 #include <i86.h> |
| 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 | 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 | 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 | 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 | 140 "time() -> floating point number\n\ |
| 141 \n\ | |
| 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 | 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 | 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 | 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 | 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 | 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 | 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 | 193 "clock() -> floating point number\n\ |
| 194 \n\ | |
| 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 | 198 #endif |
| 199 | |
| 4615 | 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 | 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 | 210 } |
| 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 | 213 "sleep(seconds)\n\ |
| 214 \n\ | |
| 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 | 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 | 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 | 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 | 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 | 331 |
| 4615 | 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 | 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 | 391 #ifdef HAVE_STRFTIME |
| 4615 | 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 | 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 | 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 | 530 } |
| 8568 | 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 | 534 \n\ |
| 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 | 538 #endif /* HAVE_STRFTIME */ |
| 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 | 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 | 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 | 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 | 590 |
| 4615 | 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 | 621 "ctime(seconds) -> string\n\ |
| 622 \n\ | |
| 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 | 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 | 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 | 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 | 648 "mktime(tuple) -> floating point number\n\ |
| 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 | 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 | 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 | 884 } |
| 885 | |
| 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 | 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 | 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 | 924 } |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
925 |
| 6 | 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 | 932 floatsleep(double secs) |
| 6 | 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 |
