Mercurial > cpython-lru_cache-weakref
annotate Modules/timemodule.c @ 54294:dba767bc3155 legacy-trunk
remove mention of old ctypes version
| author | Benjamin Peterson <benjamin@python.org> |
|---|---|
| date | Sat, 23 May 2009 20:59:09 +0000 |
| parents | b586ca3a3062 |
| children | 4ce4da847d93 |
| 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 { |
|
c423a88b22ce
Fix bug 581232 - [Windows] Can not interrupt time.sleep()
Mark Hammond <mhammond@skippinet.com.au>
parents:
24071
diff
changeset
|
49 SetEvent(hInterruptEvent); |
|
c423a88b22ce
Fix bug 581232 - [Windows] Can not interrupt time.sleep()
Mark Hammond <mhammond@skippinet.com.au>
parents:
24071
diff
changeset
|
50 /* allow other default handlers to be called. |
|
c423a88b22ce
Fix bug 581232 - [Windows] Can not interrupt time.sleep()
Mark Hammond <mhammond@skippinet.com.au>
parents:
24071
diff
changeset
|
51 Default Python handler will setup the |
|
c423a88b22ce
Fix bug 581232 - [Windows] Can not interrupt time.sleep()
Mark Hammond <mhammond@skippinet.com.au>
parents:
24071
diff
changeset
|
52 KeyboardInterrupt exception. |
|
c423a88b22ce
Fix bug 581232 - [Windows] Can not interrupt time.sleep()
Mark Hammond <mhammond@skippinet.com.au>
parents:
24071
diff
changeset
|
53 */ |
|
c423a88b22ce
Fix bug 581232 - [Windows] Can not interrupt time.sleep()
Mark Hammond <mhammond@skippinet.com.au>
parents:
24071
diff
changeset
|
54 return FALSE; |
|
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 { |
|
ec64a6be32f7
Raise ValueError when value being stored in a time_t variable will result in
Brett Cannon <bcannon@gmail.com>
parents:
31608
diff
changeset
|
105 time_t result; |
|
ec64a6be32f7
Raise ValueError when value being stored in a time_t variable will result in
Brett Cannon <bcannon@gmail.com>
parents:
31608
diff
changeset
|
106 double diff; |
|
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 |
|
ec64a6be32f7
Raise ValueError when value being stored in a time_t variable will result in
Brett Cannon <bcannon@gmail.com>
parents:
31608
diff
changeset
|
108 result = (time_t)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
|
109 /* How much info did we lose? time_t may be an integral or |
|
ec64a6be32f7
Raise ValueError when value being stored in a time_t variable will result in
Brett Cannon <bcannon@gmail.com>
parents:
31608
diff
changeset
|
110 * floating type, and we don't know which. If it's integral, |
|
ec64a6be32f7
Raise ValueError when value being stored in a time_t variable will result in
Brett Cannon <bcannon@gmail.com>
parents:
31608
diff
changeset
|
111 * we don't know whether C truncates, rounds, returns the floor, |
|
ec64a6be32f7
Raise ValueError when value being stored in a time_t variable will result in
Brett Cannon <bcannon@gmail.com>
parents:
31608
diff
changeset
|
112 * etc. If we lost a second or more, the C rounding is |
|
ec64a6be32f7
Raise ValueError when value being stored in a time_t variable will result in
Brett Cannon <bcannon@gmail.com>
parents:
31608
diff
changeset
|
113 * unreasonable, or the input just doesn't fit in a time_t; |
|
ec64a6be32f7
Raise ValueError when value being stored in a time_t variable will result in
Brett Cannon <bcannon@gmail.com>
parents:
31608
diff
changeset
|
114 * call it an error regardless. Note that the original cast to |
|
ec64a6be32f7
Raise ValueError when value being stored in a time_t variable will result in
Brett Cannon <bcannon@gmail.com>
parents:
31608
diff
changeset
|
115 * time_t can cause a C error too, but nothing we can do to |
|
ec64a6be32f7
Raise ValueError when value being stored in a time_t variable will result in
Brett Cannon <bcannon@gmail.com>
parents:
31608
diff
changeset
|
116 * worm around that. |
|
ec64a6be32f7
Raise ValueError when value being stored in a time_t variable will result in
Brett Cannon <bcannon@gmail.com>
parents:
31608
diff
changeset
|
117 */ |
|
ec64a6be32f7
Raise ValueError when value being stored in a time_t variable will result in
Brett Cannon <bcannon@gmail.com>
parents:
31608
diff
changeset
|
118 diff = x - (double)result; |
|
ec64a6be32f7
Raise ValueError when value being stored in a time_t variable will result in
Brett Cannon <bcannon@gmail.com>
parents:
31608
diff
changeset
|
119 if (diff <= -1.0 || diff >= 1.0) { |
|
ec64a6be32f7
Raise ValueError when value being stored in a time_t variable will result in
Brett Cannon <bcannon@gmail.com>
parents:
31608
diff
changeset
|
120 PyErr_SetString(PyExc_ValueError, |
|
ec64a6be32f7
Raise ValueError when value being stored in a time_t variable will result in
Brett Cannon <bcannon@gmail.com>
parents:
31608
diff
changeset
|
121 "timestamp out of range for platform time_t"); |
|
ec64a6be32f7
Raise ValueError when value being stored in a time_t variable will result in
Brett Cannon <bcannon@gmail.com>
parents:
31608
diff
changeset
|
122 result = (time_t)-1; |
|
ec64a6be32f7
Raise ValueError when value being stored in a time_t variable will result in
Brett Cannon <bcannon@gmail.com>
parents:
31608
diff
changeset
|
123 } |
|
ec64a6be32f7
Raise ValueError when value being stored in a time_t variable will result in
Brett Cannon <bcannon@gmail.com>
parents:
31608
diff
changeset
|
124 return result; |
|
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 { |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
130 double secs; |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
131 secs = floattime(); |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
132 if (secs == 0.0) { |
| 4615 | 133 PyErr_SetFromErrno(PyExc_IOError); |
|
1177
533e36de1e4d
* Configure.py: use #!/usr/local/bin/python
Guido van Rossum <guido@python.org>
parents:
956
diff
changeset
|
134 return NULL; |
|
533e36de1e4d
* Configure.py: use #!/usr/local/bin/python
Guido van Rossum <guido@python.org>
parents:
956
diff
changeset
|
135 } |
| 4615 | 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 { |
| 4615 | 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 { |
|
21938
4ab29b06a76c
Windows time_clock(): rewrite to get rid of horrid casting tricks.
Tim Peters <tim.peters@gmail.com>
parents:
21934
diff
changeset
|
167 static LARGE_INTEGER ctrStart; |
|
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
|
168 static double divisor = 0.0; |
|
21938
4ab29b06a76c
Windows time_clock(): rewrite to get rid of horrid casting tricks.
Tim Peters <tim.peters@gmail.com>
parents:
21934
diff
changeset
|
169 LARGE_INTEGER now; |
|
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
|
170 double diff; |
|
5238
15288c8343a5
Win32 precision clock() -- Mark Hammond.
Guido van Rossum <guido@python.org>
parents:
5100
diff
changeset
|
171 |
|
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
|
172 if (divisor == 0.0) { |
|
21938
4ab29b06a76c
Windows time_clock(): rewrite to get rid of horrid casting tricks.
Tim Peters <tim.peters@gmail.com>
parents:
21934
diff
changeset
|
173 LARGE_INTEGER freq; |
|
4ab29b06a76c
Windows time_clock(): rewrite to get rid of horrid casting tricks.
Tim Peters <tim.peters@gmail.com>
parents:
21934
diff
changeset
|
174 QueryPerformanceCounter(&ctrStart); |
|
4ab29b06a76c
Windows time_clock(): rewrite to get rid of horrid casting tricks.
Tim Peters <tim.peters@gmail.com>
parents:
21934
diff
changeset
|
175 if (!QueryPerformanceFrequency(&freq) || freq.QuadPart == 0) { |
|
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
|
176 /* Unlikely to happen - this works on all intel |
|
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
|
177 machines at least! Revert to clock() */ |
|
41321
e3349d412681
In Windows' time.clock(), when QueryPerformanceFrequency() fails,
Georg Brandl <georg@python.org>
parents:
40503
diff
changeset
|
178 return PyFloat_FromDouble(((double)clock()) / |
|
e3349d412681
In Windows' time.clock(), when QueryPerformanceFrequency() fails,
Georg Brandl <georg@python.org>
parents:
40503
diff
changeset
|
179 CLOCKS_PER_SEC); |
|
5238
15288c8343a5
Win32 precision clock() -- Mark Hammond.
Guido van Rossum <guido@python.org>
parents:
5100
diff
changeset
|
180 } |
|
21938
4ab29b06a76c
Windows time_clock(): rewrite to get rid of horrid casting tricks.
Tim Peters <tim.peters@gmail.com>
parents:
21934
diff
changeset
|
181 divisor = (double)freq.QuadPart; |
|
5238
15288c8343a5
Win32 precision clock() -- Mark Hammond.
Guido van Rossum <guido@python.org>
parents:
5100
diff
changeset
|
182 } |
|
21938
4ab29b06a76c
Windows time_clock(): rewrite to get rid of horrid casting tricks.
Tim Peters <tim.peters@gmail.com>
parents:
21934
diff
changeset
|
183 QueryPerformanceCounter(&now); |
|
4ab29b06a76c
Windows time_clock(): rewrite to get rid of horrid casting tricks.
Tim Peters <tim.peters@gmail.com>
parents:
21934
diff
changeset
|
184 diff = (double)(now.QuadPart - ctrStart.QuadPart); |
|
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
|
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 { |
|
1181
950cd37fcddc
* Makefile: use cp -r to install the library
Guido van Rossum <guido@python.org>
parents:
1177
diff
changeset
|
203 double secs; |
|
16054
4cc9a1ebea62
Make the 'time' argument to the timemodule functions strftime, asctime,
Thomas Wouters <thomas@python.org>
parents:
15539
diff
changeset
|
204 if (!PyArg_ParseTuple(args, "d:sleep", &secs)) |
| 6 | 205 return NULL; |
|
6548
dd1e83323c45
Move the Py_{{BEGIN,END}_ALLOW,BLOCK}_THREADS macros in time_sleep()
Guido van Rossum <guido@python.org>
parents:
6459
diff
changeset
|
206 if (floatsleep(secs) != 0) |
|
dd1e83323c45
Move the Py_{{BEGIN,END}_ALLOW,BLOCK}_THREADS macros in time_sleep()
Guido van Rossum <guido@python.org>
parents:
6459
diff
changeset
|
207 return NULL; |
|
dd1e83323c45
Move the Py_{{BEGIN,END}_ALLOW,BLOCK}_THREADS macros in time_sleep()
Guido van Rossum <guido@python.org>
parents:
6459
diff
changeset
|
208 Py_INCREF(Py_None); |
| 4615 | 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[] = { |
|
2d599a36b67a
SF patch #462296: Add attributes to os.stat results; by Nick Mathewson.
Guido van Rossum <guido@python.org>
parents:
20080
diff
changeset
|
219 {"tm_year", NULL}, |
|
2d599a36b67a
SF patch #462296: Add attributes to os.stat results; by Nick Mathewson.
Guido van Rossum <guido@python.org>
parents:
20080
diff
changeset
|
220 {"tm_mon", NULL}, |
|
2d599a36b67a
SF patch #462296: Add attributes to os.stat results; by Nick Mathewson.
Guido van Rossum <guido@python.org>
parents:
20080
diff
changeset
|
221 {"tm_mday", NULL}, |
|
2d599a36b67a
SF patch #462296: Add attributes to os.stat results; by Nick Mathewson.
Guido van Rossum <guido@python.org>
parents:
20080
diff
changeset
|
222 {"tm_hour", NULL}, |
|
2d599a36b67a
SF patch #462296: Add attributes to os.stat results; by Nick Mathewson.
Guido van Rossum <guido@python.org>
parents:
20080
diff
changeset
|
223 {"tm_min", NULL}, |
|
2d599a36b67a
SF patch #462296: Add attributes to os.stat results; by Nick Mathewson.
Guido van Rossum <guido@python.org>
parents:
20080
diff
changeset
|
224 {"tm_sec", NULL}, |
|
2d599a36b67a
SF patch #462296: Add attributes to os.stat results; by Nick Mathewson.
Guido van Rossum <guido@python.org>
parents:
20080
diff
changeset
|
225 {"tm_wday", NULL}, |
|
2d599a36b67a
SF patch #462296: Add attributes to os.stat results; by Nick Mathewson.
Guido van Rossum <guido@python.org>
parents:
20080
diff
changeset
|
226 {"tm_yday", NULL}, |
|
2d599a36b67a
SF patch #462296: Add attributes to os.stat results; by Nick Mathewson.
Guido van Rossum <guido@python.org>
parents:
20080
diff
changeset
|
227 {"tm_isdst", NULL}, |
|
2d599a36b67a
SF patch #462296: Add attributes to os.stat results; by Nick Mathewson.
Guido van Rossum <guido@python.org>
parents:
20080
diff
changeset
|
228 {0} |
|
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 = { |
|
21313
91dd223829c6
Patch supplied by Burton Radons for his own SF bug #487390: Modifying
Guido van Rossum <guido@python.org>
parents:
21133
diff
changeset
|
232 "time.struct_time", |
|
20539
2d599a36b67a
SF patch #462296: Add attributes to os.stat results; by Nick Mathewson.
Guido van Rossum <guido@python.org>
parents:
20080
diff
changeset
|
233 NULL, |
|
2d599a36b67a
SF patch #462296: Add attributes to os.stat results; by Nick Mathewson.
Guido van Rossum <guido@python.org>
parents:
20080
diff
changeset
|
234 struct_time_type_fields, |
|
2d599a36b67a
SF patch #462296: Add attributes to os.stat results; by Nick Mathewson.
Guido van Rossum <guido@python.org>
parents:
20080
diff
changeset
|
235 9, |
|
2d599a36b67a
SF patch #462296: Add attributes to os.stat results; by Nick Mathewson.
Guido van Rossum <guido@python.org>
parents:
20080
diff
changeset
|
236 }; |
|
21938
4ab29b06a76c
Windows time_clock(): rewrite to get rid of horrid casting tricks.
Tim Peters <tim.peters@gmail.com>
parents:
21934
diff
changeset
|
237 |
|
37772
b90a7c6021bc
Initialize structseq types only once.
Martin v. Löwis <martin@v.loewis.de>
parents:
37666
diff
changeset
|
238 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
|
239 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
|
240 |
| 4615 | 241 static PyObject * |
|
13501
ca32ff7a067e
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13447
diff
changeset
|
242 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
|
243 { |
|
20539
2d599a36b67a
SF patch #462296: Add attributes to os.stat results; by Nick Mathewson.
Guido van Rossum <guido@python.org>
parents:
20080
diff
changeset
|
244 PyObject *v = PyStructSequence_New(&StructTimeType); |
|
2d599a36b67a
SF patch #462296: Add attributes to os.stat results; by Nick Mathewson.
Guido van Rossum <guido@python.org>
parents:
20080
diff
changeset
|
245 if (v == NULL) |
|
2d599a36b67a
SF patch #462296: Add attributes to os.stat results; by Nick Mathewson.
Guido van Rossum <guido@python.org>
parents:
20080
diff
changeset
|
246 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
|
247 |
|
20539
2d599a36b67a
SF patch #462296: Add attributes to os.stat results; by Nick Mathewson.
Guido van Rossum <guido@python.org>
parents:
20080
diff
changeset
|
248 #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
|
249 |
|
2d599a36b67a
SF patch #462296: Add attributes to os.stat results; by Nick Mathewson.
Guido van Rossum <guido@python.org>
parents:
20080
diff
changeset
|
250 SET(0, p->tm_year + 1900); |
|
2d599a36b67a
SF patch #462296: Add attributes to os.stat results; by Nick Mathewson.
Guido van Rossum <guido@python.org>
parents:
20080
diff
changeset
|
251 SET(1, p->tm_mon + 1); /* Want January == 1 */ |
|
2d599a36b67a
SF patch #462296: Add attributes to os.stat results; by Nick Mathewson.
Guido van Rossum <guido@python.org>
parents:
20080
diff
changeset
|
252 SET(2, p->tm_mday); |
|
2d599a36b67a
SF patch #462296: Add attributes to os.stat results; by Nick Mathewson.
Guido van Rossum <guido@python.org>
parents:
20080
diff
changeset
|
253 SET(3, p->tm_hour); |
|
2d599a36b67a
SF patch #462296: Add attributes to os.stat results; by Nick Mathewson.
Guido van Rossum <guido@python.org>
parents:
20080
diff
changeset
|
254 SET(4, p->tm_min); |
|
2d599a36b67a
SF patch #462296: Add attributes to os.stat results; by Nick Mathewson.
Guido van Rossum <guido@python.org>
parents:
20080
diff
changeset
|
255 SET(5, p->tm_sec); |
|
2d599a36b67a
SF patch #462296: Add attributes to os.stat results; by Nick Mathewson.
Guido van Rossum <guido@python.org>
parents:
20080
diff
changeset
|
256 SET(6, (p->tm_wday + 6) % 7); /* Want Monday == 0 */ |
|
2d599a36b67a
SF patch #462296: Add attributes to os.stat results; by Nick Mathewson.
Guido van Rossum <guido@python.org>
parents:
20080
diff
changeset
|
257 SET(7, p->tm_yday + 1); /* Want January, 1 == 1 */ |
|
2d599a36b67a
SF patch #462296: Add attributes to os.stat results; by Nick Mathewson.
Guido van Rossum <guido@python.org>
parents:
20080
diff
changeset
|
258 SET(8, p->tm_isdst); |
|
2d599a36b67a
SF patch #462296: Add attributes to os.stat results; by Nick Mathewson.
Guido van Rossum <guido@python.org>
parents:
20080
diff
changeset
|
259 #undef SET |
|
2d599a36b67a
SF patch #462296: Add attributes to os.stat results; by Nick Mathewson.
Guido van Rossum <guido@python.org>
parents:
20080
diff
changeset
|
260 if (PyErr_Occurred()) { |
|
2d599a36b67a
SF patch #462296: Add attributes to os.stat results; by Nick Mathewson.
Guido van Rossum <guido@python.org>
parents:
20080
diff
changeset
|
261 Py_XDECREF(v); |
|
2d599a36b67a
SF patch #462296: Add attributes to os.stat results; by Nick Mathewson.
Guido van Rossum <guido@python.org>
parents:
20080
diff
changeset
|
262 return NULL; |
|
2d599a36b67a
SF patch #462296: Add attributes to os.stat results; by Nick Mathewson.
Guido van Rossum <guido@python.org>
parents:
20080
diff
changeset
|
263 } |
|
2d599a36b67a
SF patch #462296: Add attributes to os.stat results; by Nick Mathewson.
Guido van Rossum <guido@python.org>
parents:
20080
diff
changeset
|
264 |
|
2d599a36b67a
SF patch #462296: Add attributes to os.stat results; by Nick Mathewson.
Guido van Rossum <guido@python.org>
parents:
20080
diff
changeset
|
265 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
|
266 } |
|
933882c0e9fb
Added strptime, if it exists. Modified after a patch by Jesse Hallio.
Guido van Rossum <guido@python.org>
parents:
8161
diff
changeset
|
267 |
|
933882c0e9fb
Added strptime, if it exists. Modified after a patch by Jesse Hallio.
Guido van Rossum <guido@python.org>
parents:
8161
diff
changeset
|
268 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
|
269 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
|
270 { |
|
4373
98ea80051dbc
Check for NULL pointer returned from localtime()/gmtime().
Guido van Rossum <guido@python.org>
parents:
4232
diff
changeset
|
271 struct tm *p; |
|
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
|
272 time_t whent = _PyTime_DoubleToTimet(when); |
|
ec64a6be32f7
Raise ValueError when value being stored in a time_t variable will result in
Brett Cannon <bcannon@gmail.com>
parents:
31608
diff
changeset
|
273 |
|
ec64a6be32f7
Raise ValueError when value being stored in a time_t variable will result in
Brett Cannon <bcannon@gmail.com>
parents:
31608
diff
changeset
|
274 if (whent == (time_t)-1 && PyErr_Occurred()) |
|
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 return NULL; |
|
4373
98ea80051dbc
Check for NULL pointer returned from localtime()/gmtime().
Guido van Rossum <guido@python.org>
parents:
4232
diff
changeset
|
276 errno = 0; |
|
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
|
277 p = function(&whent); |
|
4373
98ea80051dbc
Check for NULL pointer returned from localtime()/gmtime().
Guido van Rossum <guido@python.org>
parents:
4232
diff
changeset
|
278 if (p == NULL) { |
|
98ea80051dbc
Check for NULL pointer returned from localtime()/gmtime().
Guido van Rossum <guido@python.org>
parents:
4232
diff
changeset
|
279 #ifdef EINVAL |
|
4514
f6976b9a85a4
Should compare errno to 0, not NULL
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
280 if (errno == 0) |
|
4373
98ea80051dbc
Check for NULL pointer returned from localtime()/gmtime().
Guido van Rossum <guido@python.org>
parents:
4232
diff
changeset
|
281 errno = EINVAL; |
|
98ea80051dbc
Check for NULL pointer returned from localtime()/gmtime().
Guido van Rossum <guido@python.org>
parents:
4232
diff
changeset
|
282 #endif |
|
27281
5a050200f736
When time.localtime() is passed a tick count the platform C localtime()
Tim Peters <tim.peters@gmail.com>
parents:
25810
diff
changeset
|
283 return PyErr_SetFromErrno(PyExc_ValueError); |
|
4373
98ea80051dbc
Check for NULL pointer returned from localtime()/gmtime().
Guido van Rossum <guido@python.org>
parents:
4232
diff
changeset
|
284 } |
|
8470
933882c0e9fb
Added strptime, if it exists. Modified after a patch by Jesse Hallio.
Guido van Rossum <guido@python.org>
parents:
8161
diff
changeset
|
285 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
|
286 } |
|
6ee380349c84
* Added gmtime/localtime/mktime and SYSV timezone globals to timemodule.c.
Guido van Rossum <guido@python.org>
parents:
1191
diff
changeset
|
287 |
|
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
|
288 /* 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
|
289 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
|
290 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
|
291 */ |
|
582eb51b8492
allow ctime(), gmtime(), and localtime() to take None as equivalent to an omitted arg
Fred Drake <fdrake@acm.org>
parents:
32772
diff
changeset
|
292 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
|
293 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
|
294 { |
|
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 PyObject *ot = NULL; |
|
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 |
|
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 if (!PyArg_ParseTuple(args, format, &ot)) |
|
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 return 0; |
|
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 if (ot == NULL || ot == Py_None) |
|
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 *pwhen = floattime(); |
|
582eb51b8492
allow ctime(), gmtime(), and localtime() to take None as equivalent to an omitted arg
Fred Drake <fdrake@acm.org>
parents:
32772
diff
changeset
|
301 else { |
|
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 double when = PyFloat_AsDouble(ot); |
|
582eb51b8492
allow ctime(), gmtime(), and localtime() to take None as equivalent to an omitted arg
Fred Drake <fdrake@acm.org>
parents:
32772
diff
changeset
|
303 if (PyErr_Occurred()) |
|
582eb51b8492
allow ctime(), gmtime(), and localtime() to take None as equivalent to an omitted arg
Fred Drake <fdrake@acm.org>
parents:
32772
diff
changeset
|
304 return 0; |
|
582eb51b8492
allow ctime(), gmtime(), and localtime() to take None as equivalent to an omitted arg
Fred Drake <fdrake@acm.org>
parents:
32772
diff
changeset
|
305 *pwhen = when; |
|
582eb51b8492
allow ctime(), gmtime(), and localtime() to take None as equivalent to an omitted arg
Fred Drake <fdrake@acm.org>
parents:
32772
diff
changeset
|
306 } |
|
582eb51b8492
allow ctime(), gmtime(), and localtime() to take None as equivalent to an omitted arg
Fred Drake <fdrake@acm.org>
parents:
32772
diff
changeset
|
307 return 1; |
|
582eb51b8492
allow ctime(), gmtime(), and localtime() to take None as equivalent to an omitted arg
Fred Drake <fdrake@acm.org>
parents:
32772
diff
changeset
|
308 } |
|
582eb51b8492
allow ctime(), gmtime(), and localtime() to take None as equivalent to an omitted arg
Fred Drake <fdrake@acm.org>
parents:
32772
diff
changeset
|
309 |
| 4615 | 310 static PyObject * |
|
13501
ca32ff7a067e
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13447
diff
changeset
|
311 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
|
312 { |
|
6ee380349c84
* Added gmtime/localtime/mktime and SYSV timezone globals to timemodule.c.
Guido van Rossum <guido@python.org>
parents:
1191
diff
changeset
|
313 double when; |
|
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 if (!parse_time_double_args(args, "|O:gmtime", &when)) |
|
1313
6ee380349c84
* Added gmtime/localtime/mktime and SYSV timezone globals to timemodule.c.
Guido van Rossum <guido@python.org>
parents:
1191
diff
changeset
|
315 return NULL; |
|
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
|
316 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
|
317 } |
|
6ee380349c84
* Added gmtime/localtime/mktime and SYSV timezone globals to timemodule.c.
Guido van Rossum <guido@python.org>
parents:
1191
diff
changeset
|
318 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
22957
diff
changeset
|
319 PyDoc_STRVAR(gmtime_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
|
320 "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
|
321 tm_sec, tm_wday, tm_yday, tm_isdst)\n\ |
| 8568 | 322 \n\ |
|
16054
4cc9a1ebea62
Make the 'time' argument to the timemodule functions strftime, asctime,
Thomas Wouters <thomas@python.org>
parents:
15539
diff
changeset
|
323 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
|
324 GMT). When 'seconds' is not passed in, convert the current time instead."); |
| 8568 | 325 |
| 4615 | 326 static PyObject * |
|
13501
ca32ff7a067e
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13447
diff
changeset
|
327 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
|
328 { |
|
6ee380349c84
* Added gmtime/localtime/mktime and SYSV timezone globals to timemodule.c.
Guido van Rossum <guido@python.org>
parents:
1191
diff
changeset
|
329 double when; |
|
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
|
330 if (!parse_time_double_args(args, "|O:localtime", &when)) |
|
1313
6ee380349c84
* Added gmtime/localtime/mktime and SYSV timezone globals to timemodule.c.
Guido van Rossum <guido@python.org>
parents:
1191
diff
changeset
|
331 return NULL; |
|
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
|
332 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
|
333 } |
|
6ee380349c84
* Added gmtime/localtime/mktime and SYSV timezone globals to timemodule.c.
Guido van Rossum <guido@python.org>
parents:
1191
diff
changeset
|
334 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
22957
diff
changeset
|
335 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
|
336 "localtime([seconds]) -> (tm_year,tm_mon,tm_mday,tm_hour,tm_min,\n\ |
|
863692dc411e
Fix the docstrings of time.localtime() and gmtime() for the tm_mday field.
Brett Cannon <bcannon@gmail.com>
parents:
41321
diff
changeset
|
337 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
|
338 \n\ |
|
16054
4cc9a1ebea62
Make the 'time' argument to the timemodule functions strftime, asctime,
Thomas Wouters <thomas@python.org>
parents:
15539
diff
changeset
|
339 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
|
340 When 'seconds' is not passed in, convert the current time instead."); |
| 8568 | 341 |
|
1318
92e6a8cf14be
* pythonmain.c: -k option, usage message, more environment flags.
Guido van Rossum <guido@python.org>
parents:
1313
diff
changeset
|
342 static int |
|
13501
ca32ff7a067e
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13447
diff
changeset
|
343 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
|
344 { |
|
9042
9fd915d23cfa
Y2K fix affecting asctime(), mktime(), strftime().
Guido van Rossum <guido@python.org>
parents:
8823
diff
changeset
|
345 int y; |
|
13709
4e2aaf1e722a
Use 'void' directly instead of the ANY #define, now that all code is ANSI C.
Thomas Wouters <thomas@python.org>
parents:
13691
diff
changeset
|
346 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
|
347 |
| 4615 | 348 if (!PyArg_Parse(args, "(iiiiiiiii)", |
|
9042
9fd915d23cfa
Y2K fix affecting asctime(), mktime(), strftime().
Guido van Rossum <guido@python.org>
parents:
8823
diff
changeset
|
349 &y, |
|
4947
78d880043129
Formatting, and minor error detection
Barry Warsaw <barry@python.org>
parents:
4618
diff
changeset
|
350 &p->tm_mon, |
|
78d880043129
Formatting, and minor error detection
Barry Warsaw <barry@python.org>
parents:
4618
diff
changeset
|
351 &p->tm_mday, |
|
78d880043129
Formatting, and minor error detection
Barry Warsaw <barry@python.org>
parents:
4618
diff
changeset
|
352 &p->tm_hour, |
|
78d880043129
Formatting, and minor error detection
Barry Warsaw <barry@python.org>
parents:
4618
diff
changeset
|
353 &p->tm_min, |
|
78d880043129
Formatting, and minor error detection
Barry Warsaw <barry@python.org>
parents:
4618
diff
changeset
|
354 &p->tm_sec, |
|
78d880043129
Formatting, and minor error detection
Barry Warsaw <barry@python.org>
parents:
4618
diff
changeset
|
355 &p->tm_wday, |
|
78d880043129
Formatting, and minor error detection
Barry Warsaw <barry@python.org>
parents:
4618
diff
changeset
|
356 &p->tm_yday, |
|
78d880043129
Formatting, and minor error detection
Barry Warsaw <barry@python.org>
parents:
4618
diff
changeset
|
357 &p->tm_isdst)) |
|
1318
92e6a8cf14be
* pythonmain.c: -k option, usage message, more environment flags.
Guido van Rossum <guido@python.org>
parents:
1313
diff
changeset
|
358 return 0; |
|
9042
9fd915d23cfa
Y2K fix affecting asctime(), mktime(), strftime().
Guido van Rossum <guido@python.org>
parents:
8823
diff
changeset
|
359 if (y < 1900) { |
|
9fd915d23cfa
Y2K fix affecting asctime(), mktime(), strftime().
Guido van Rossum <guido@python.org>
parents:
8823
diff
changeset
|
360 PyObject *accept = PyDict_GetItemString(moddict, |
|
9fd915d23cfa
Y2K fix affecting asctime(), mktime(), strftime().
Guido van Rossum <guido@python.org>
parents:
8823
diff
changeset
|
361 "accept2dyear"); |
|
9fd915d23cfa
Y2K fix affecting asctime(), mktime(), strftime().
Guido van Rossum <guido@python.org>
parents:
8823
diff
changeset
|
362 if (accept == NULL || !PyInt_Check(accept) || |
|
9fd915d23cfa
Y2K fix affecting asctime(), mktime(), strftime().
Guido van Rossum <guido@python.org>
parents:
8823
diff
changeset
|
363 PyInt_AsLong(accept) == 0) { |
|
9fd915d23cfa
Y2K fix affecting asctime(), mktime(), strftime().
Guido van Rossum <guido@python.org>
parents:
8823
diff
changeset
|
364 PyErr_SetString(PyExc_ValueError, |
|
9fd915d23cfa
Y2K fix affecting asctime(), mktime(), strftime().
Guido van Rossum <guido@python.org>
parents:
8823
diff
changeset
|
365 "year >= 1900 required"); |
|
9fd915d23cfa
Y2K fix affecting asctime(), mktime(), strftime().
Guido van Rossum <guido@python.org>
parents:
8823
diff
changeset
|
366 return 0; |
|
9fd915d23cfa
Y2K fix affecting asctime(), mktime(), strftime().
Guido van Rossum <guido@python.org>
parents:
8823
diff
changeset
|
367 } |
|
9fd915d23cfa
Y2K fix affecting asctime(), mktime(), strftime().
Guido van Rossum <guido@python.org>
parents:
8823
diff
changeset
|
368 if (69 <= y && y <= 99) |
|
9fd915d23cfa
Y2K fix affecting asctime(), mktime(), strftime().
Guido van Rossum <guido@python.org>
parents:
8823
diff
changeset
|
369 y += 1900; |
|
9fd915d23cfa
Y2K fix affecting asctime(), mktime(), strftime().
Guido van Rossum <guido@python.org>
parents:
8823
diff
changeset
|
370 else if (0 <= y && y <= 68) |
|
9fd915d23cfa
Y2K fix affecting asctime(), mktime(), strftime().
Guido van Rossum <guido@python.org>
parents:
8823
diff
changeset
|
371 y += 2000; |
|
9fd915d23cfa
Y2K fix affecting asctime(), mktime(), strftime().
Guido van Rossum <guido@python.org>
parents:
8823
diff
changeset
|
372 else { |
|
9fd915d23cfa
Y2K fix affecting asctime(), mktime(), strftime().
Guido van Rossum <guido@python.org>
parents:
8823
diff
changeset
|
373 PyErr_SetString(PyExc_ValueError, |
|
19426
75269ab26d03
make the gettmarg error message more correct by making it more vague ;-)
Skip Montanaro <skip@pobox.com>
parents:
18808
diff
changeset
|
374 "year out of range"); |
|
9042
9fd915d23cfa
Y2K fix affecting asctime(), mktime(), strftime().
Guido van Rossum <guido@python.org>
parents:
8823
diff
changeset
|
375 return 0; |
|
9fd915d23cfa
Y2K fix affecting asctime(), mktime(), strftime().
Guido van Rossum <guido@python.org>
parents:
8823
diff
changeset
|
376 } |
|
9fd915d23cfa
Y2K fix affecting asctime(), mktime(), strftime().
Guido van Rossum <guido@python.org>
parents:
8823
diff
changeset
|
377 } |
|
9fd915d23cfa
Y2K fix affecting asctime(), mktime(), strftime().
Guido van Rossum <guido@python.org>
parents:
8823
diff
changeset
|
378 p->tm_year = y - 1900; |
|
1318
92e6a8cf14be
* pythonmain.c: -k option, usage message, more environment flags.
Guido van Rossum <guido@python.org>
parents:
1313
diff
changeset
|
379 p->tm_mon--; |
|
92e6a8cf14be
* pythonmain.c: -k option, usage message, more environment flags.
Guido van Rossum <guido@python.org>
parents:
1313
diff
changeset
|
380 p->tm_wday = (p->tm_wday + 1) % 7; |
|
92e6a8cf14be
* pythonmain.c: -k option, usage message, more environment flags.
Guido van Rossum <guido@python.org>
parents:
1313
diff
changeset
|
381 p->tm_yday--; |
|
92e6a8cf14be
* pythonmain.c: -k option, usage message, more environment flags.
Guido van Rossum <guido@python.org>
parents:
1313
diff
changeset
|
382 return 1; |
|
92e6a8cf14be
* pythonmain.c: -k option, usage message, more environment flags.
Guido van Rossum <guido@python.org>
parents:
1313
diff
changeset
|
383 } |
|
92e6a8cf14be
* pythonmain.c: -k option, usage message, more environment flags.
Guido van Rossum <guido@python.org>
parents:
1313
diff
changeset
|
384 |
| 3086 | 385 #ifdef HAVE_STRFTIME |
| 4615 | 386 static PyObject * |
|
13501
ca32ff7a067e
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13447
diff
changeset
|
387 time_strftime(PyObject *self, PyObject *args) |
| 3086 | 388 { |
|
16054
4cc9a1ebea62
Make the 'time' argument to the timemodule functions strftime, asctime,
Thomas Wouters <thomas@python.org>
parents:
15539
diff
changeset
|
389 PyObject *tup = NULL; |
| 3086 | 390 struct tm buf; |
| 391 const char *fmt; | |
|
13086
de4e30962fab
Trent Mick: use size_t instead of int where appropriate (time_strftime()).
Guido van Rossum <guido@python.org>
parents:
12644
diff
changeset
|
392 size_t fmtlen, buflen; |
| 3086 | 393 char *outbuf = 0; |
|
13086
de4e30962fab
Trent Mick: use size_t instead of int where appropriate (time_strftime()).
Guido van Rossum <guido@python.org>
parents:
12644
diff
changeset
|
394 size_t i; |
| 3086 | 395 |
|
13709
4e2aaf1e722a
Use 'void' directly instead of the ANY #define, now that all code is ANSI C.
Thomas Wouters <thomas@python.org>
parents:
13691
diff
changeset
|
396 memset((void *) &buf, '\0', sizeof(buf)); |
|
8161
125bfd896967
Instead of calling mktime(), which has all sorts of unwanted side
Guido van Rossum <guido@python.org>
parents:
7574
diff
changeset
|
397 |
|
16054
4cc9a1ebea62
Make the 'time' argument to the timemodule functions strftime, asctime,
Thomas Wouters <thomas@python.org>
parents:
15539
diff
changeset
|
398 if (!PyArg_ParseTuple(args, "s|O:strftime", &fmt, &tup)) |
| 3086 | 399 return NULL; |
|
16054
4cc9a1ebea62
Make the 'time' argument to the timemodule functions strftime, asctime,
Thomas Wouters <thomas@python.org>
parents:
15539
diff
changeset
|
400 |
|
4cc9a1ebea62
Make the 'time' argument to the timemodule functions strftime, asctime,
Thomas Wouters <thomas@python.org>
parents:
15539
diff
changeset
|
401 if (tup == NULL) { |
|
4cc9a1ebea62
Make the 'time' argument to the timemodule functions strftime, asctime,
Thomas Wouters <thomas@python.org>
parents:
15539
diff
changeset
|
402 time_t tt = time(NULL); |
|
4cc9a1ebea62
Make the 'time' argument to the timemodule functions strftime, asctime,
Thomas Wouters <thomas@python.org>
parents:
15539
diff
changeset
|
403 buf = *localtime(&tt); |
|
4cc9a1ebea62
Make the 'time' argument to the timemodule functions strftime, asctime,
Thomas Wouters <thomas@python.org>
parents:
15539
diff
changeset
|
404 } else if (!gettmarg(tup, &buf)) |
|
4cc9a1ebea62
Make the 'time' argument to the timemodule functions strftime, asctime,
Thomas Wouters <thomas@python.org>
parents:
15539
diff
changeset
|
405 return NULL; |
|
20080
f48a41c97021
SF patch #459385 (Norman Vine): time.timezone fix for Cygwin.
Guido van Rossum <guido@python.org>
parents:
19426
diff
changeset
|
406 |
|
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
|
407 /* Checks added to make sure strftime() does not crash Python by |
|
ae8dbf500172
Have strftime() check its time tuple argument to make sure the tuple's values
Brett Cannon <bcannon@gmail.com>
parents:
30979
diff
changeset
|
408 indexing blindly into some array for a textual representation |
|
ae8dbf500172
Have strftime() check its time tuple argument to make sure the tuple's values
Brett Cannon <bcannon@gmail.com>
parents:
30979
diff
changeset
|
409 by some bad index (fixes bug #897625). |
|
32388
5cf507b64f31
Bug 975996: Add _PyTime_DoubleToTimet to C API
Tim Peters <tim.peters@gmail.com>
parents:
32384
diff
changeset
|
410 |
|
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
|
411 Also support values of zero from Python code for arguments in which |
|
979e390e2bb4
Fix bug #1520914. Starting in 2.4, time.strftime() began to check the bounds
Brett Cannon <bcannon@gmail.com>
parents:
38999
diff
changeset
|
412 that is out of range by forcing that value to the lowest value that |
|
39134
079e42e0b826
Remove an XXX marker in a comment.
Brett Cannon <bcannon@gmail.com>
parents:
39114
diff
changeset
|
413 is valid (fixed bug #1520914). |
|
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
|
414 |
|
979e390e2bb4
Fix bug #1520914. Starting in 2.4, time.strftime() began to check the bounds
Brett Cannon <bcannon@gmail.com>
parents:
38999
diff
changeset
|
415 Valid ranges based on what is allowed in struct tm: |
|
979e390e2bb4
Fix bug #1520914. Starting in 2.4, time.strftime() began to check the bounds
Brett Cannon <bcannon@gmail.com>
parents:
38999
diff
changeset
|
416 |
|
979e390e2bb4
Fix bug #1520914. Starting in 2.4, time.strftime() began to check the bounds
Brett Cannon <bcannon@gmail.com>
parents:
38999
diff
changeset
|
417 - tm_year: [0, max(int)] (1) |
|
979e390e2bb4
Fix bug #1520914. Starting in 2.4, time.strftime() began to check the bounds
Brett Cannon <bcannon@gmail.com>
parents:
38999
diff
changeset
|
418 - tm_mon: [0, 11] (2) |
|
979e390e2bb4
Fix bug #1520914. Starting in 2.4, time.strftime() began to check the bounds
Brett Cannon <bcannon@gmail.com>
parents:
38999
diff
changeset
|
419 - tm_mday: [1, 31] |
|
979e390e2bb4
Fix bug #1520914. Starting in 2.4, time.strftime() began to check the bounds
Brett Cannon <bcannon@gmail.com>
parents:
38999
diff
changeset
|
420 - tm_hour: [0, 23] |
|
979e390e2bb4
Fix bug #1520914. Starting in 2.4, time.strftime() began to check the bounds
Brett Cannon <bcannon@gmail.com>
parents:
38999
diff
changeset
|
421 - tm_min: [0, 59] |
|
979e390e2bb4
Fix bug #1520914. Starting in 2.4, time.strftime() began to check the bounds
Brett Cannon <bcannon@gmail.com>
parents:
38999
diff
changeset
|
422 - tm_sec: [0, 60] |
|
979e390e2bb4
Fix bug #1520914. Starting in 2.4, time.strftime() began to check the bounds
Brett Cannon <bcannon@gmail.com>
parents:
38999
diff
changeset
|
423 - tm_wday: [0, 6] (1) |
|
979e390e2bb4
Fix bug #1520914. Starting in 2.4, time.strftime() began to check the bounds
Brett Cannon <bcannon@gmail.com>
parents:
38999
diff
changeset
|
424 - tm_yday: [0, 365] (2) |
|
979e390e2bb4
Fix bug #1520914. Starting in 2.4, time.strftime() began to check the bounds
Brett Cannon <bcannon@gmail.com>
parents:
38999
diff
changeset
|
425 - tm_isdst: [-max(int), max(int)] |
|
979e390e2bb4
Fix bug #1520914. Starting in 2.4, time.strftime() began to check the bounds
Brett Cannon <bcannon@gmail.com>
parents:
38999
diff
changeset
|
426 |
|
979e390e2bb4
Fix bug #1520914. Starting in 2.4, time.strftime() began to check the bounds
Brett Cannon <bcannon@gmail.com>
parents:
38999
diff
changeset
|
427 (1) gettmarg() handles bounds-checking. |
|
979e390e2bb4
Fix bug #1520914. Starting in 2.4, time.strftime() began to check the bounds
Brett Cannon <bcannon@gmail.com>
parents:
38999
diff
changeset
|
428 (2) Python's acceptable range is one greater than the range in C, |
|
979e390e2bb4
Fix bug #1520914. Starting in 2.4, time.strftime() began to check the bounds
Brett Cannon <bcannon@gmail.com>
parents:
38999
diff
changeset
|
429 thus need to check against automatic decrement by gettmarg(). |
|
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
|
430 */ |
|
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
|
431 if (buf.tm_mon == -1) |
|
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 buf.tm_mon = 0; |
|
979e390e2bb4
Fix bug #1520914. Starting in 2.4, time.strftime() began to check the bounds
Brett Cannon <bcannon@gmail.com>
parents:
38999
diff
changeset
|
433 else if (buf.tm_mon < 0 || buf.tm_mon > 11) { |
|
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
|
434 PyErr_SetString(PyExc_ValueError, "month out of range"); |
|
ae8dbf500172
Have strftime() check its time tuple argument to make sure the tuple's values
Brett Cannon <bcannon@gmail.com>
parents:
30979
diff
changeset
|
435 return NULL; |
|
ae8dbf500172
Have strftime() check its time tuple argument to make sure the tuple's values
Brett Cannon <bcannon@gmail.com>
parents:
30979
diff
changeset
|
436 } |
|
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
|
437 if (buf.tm_mday == 0) |
|
979e390e2bb4
Fix bug #1520914. Starting in 2.4, time.strftime() began to check the bounds
Brett Cannon <bcannon@gmail.com>
parents:
38999
diff
changeset
|
438 buf.tm_mday = 1; |
|
979e390e2bb4
Fix bug #1520914. Starting in 2.4, time.strftime() began to check the bounds
Brett Cannon <bcannon@gmail.com>
parents:
38999
diff
changeset
|
439 else if (buf.tm_mday < 0 || buf.tm_mday > 31) { |
|
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
|
440 PyErr_SetString(PyExc_ValueError, "day of month out of range"); |
|
ae8dbf500172
Have strftime() check its time tuple argument to make sure the tuple's values
Brett Cannon <bcannon@gmail.com>
parents:
30979
diff
changeset
|
441 return NULL; |
|
ae8dbf500172
Have strftime() check its time tuple argument to make sure the tuple's values
Brett Cannon <bcannon@gmail.com>
parents:
30979
diff
changeset
|
442 } |
|
ae8dbf500172
Have strftime() check its time tuple argument to make sure the tuple's values
Brett Cannon <bcannon@gmail.com>
parents:
30979
diff
changeset
|
443 if (buf.tm_hour < 0 || buf.tm_hour > 23) { |
|
ae8dbf500172
Have strftime() check its time tuple argument to make sure the tuple's values
Brett Cannon <bcannon@gmail.com>
parents:
30979
diff
changeset
|
444 PyErr_SetString(PyExc_ValueError, "hour out of range"); |
|
ae8dbf500172
Have strftime() check its time tuple argument to make sure the tuple's values
Brett Cannon <bcannon@gmail.com>
parents:
30979
diff
changeset
|
445 return NULL; |
|
ae8dbf500172
Have strftime() check its time tuple argument to make sure the tuple's values
Brett Cannon <bcannon@gmail.com>
parents:
30979
diff
changeset
|
446 } |
|
ae8dbf500172
Have strftime() check its time tuple argument to make sure the tuple's values
Brett Cannon <bcannon@gmail.com>
parents:
30979
diff
changeset
|
447 if (buf.tm_min < 0 || buf.tm_min > 59) { |
|
ae8dbf500172
Have strftime() check its time tuple argument to make sure the tuple's values
Brett Cannon <bcannon@gmail.com>
parents:
30979
diff
changeset
|
448 PyErr_SetString(PyExc_ValueError, "minute out of range"); |
|
ae8dbf500172
Have strftime() check its time tuple argument to make sure the tuple's values
Brett Cannon <bcannon@gmail.com>
parents:
30979
diff
changeset
|
449 return NULL; |
|
ae8dbf500172
Have strftime() check its time tuple argument to make sure the tuple's values
Brett Cannon <bcannon@gmail.com>
parents:
30979
diff
changeset
|
450 } |
|
ae8dbf500172
Have strftime() check its time tuple argument to make sure the tuple's values
Brett Cannon <bcannon@gmail.com>
parents:
30979
diff
changeset
|
451 if (buf.tm_sec < 0 || buf.tm_sec > 61) { |
|
ae8dbf500172
Have strftime() check its time tuple argument to make sure the tuple's values
Brett Cannon <bcannon@gmail.com>
parents:
30979
diff
changeset
|
452 PyErr_SetString(PyExc_ValueError, "seconds out of range"); |
|
ae8dbf500172
Have strftime() check its time tuple argument to make sure the tuple's values
Brett Cannon <bcannon@gmail.com>
parents:
30979
diff
changeset
|
453 return NULL; |
|
ae8dbf500172
Have strftime() check its time tuple argument to make sure the tuple's values
Brett Cannon <bcannon@gmail.com>
parents:
30979
diff
changeset
|
454 } |
|
ae8dbf500172
Have strftime() check its time tuple argument to make sure the tuple's values
Brett Cannon <bcannon@gmail.com>
parents:
30979
diff
changeset
|
455 /* tm_wday does not need checking of its upper-bound since taking |
|
ae8dbf500172
Have strftime() check its time tuple argument to make sure the tuple's values
Brett Cannon <bcannon@gmail.com>
parents:
30979
diff
changeset
|
456 ``% 7`` in gettmarg() automatically restricts the range. */ |
|
ae8dbf500172
Have strftime() check its time tuple argument to make sure the tuple's values
Brett Cannon <bcannon@gmail.com>
parents:
30979
diff
changeset
|
457 if (buf.tm_wday < 0) { |
|
ae8dbf500172
Have strftime() check its time tuple argument to make sure the tuple's values
Brett Cannon <bcannon@gmail.com>
parents:
30979
diff
changeset
|
458 PyErr_SetString(PyExc_ValueError, "day of week out of range"); |
|
ae8dbf500172
Have strftime() check its time tuple argument to make sure the tuple's values
Brett Cannon <bcannon@gmail.com>
parents:
30979
diff
changeset
|
459 return NULL; |
|
ae8dbf500172
Have strftime() check its time tuple argument to make sure the tuple's values
Brett Cannon <bcannon@gmail.com>
parents:
30979
diff
changeset
|
460 } |
|
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
|
461 if (buf.tm_yday == -1) |
|
979e390e2bb4
Fix bug #1520914. Starting in 2.4, time.strftime() began to check the bounds
Brett Cannon <bcannon@gmail.com>
parents:
38999
diff
changeset
|
462 buf.tm_yday = 0; |
|
979e390e2bb4
Fix bug #1520914. Starting in 2.4, time.strftime() began to check the bounds
Brett Cannon <bcannon@gmail.com>
parents:
38999
diff
changeset
|
463 else if (buf.tm_yday < 0 || buf.tm_yday > 365) { |
|
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
|
464 PyErr_SetString(PyExc_ValueError, "day of year out of range"); |
|
ae8dbf500172
Have strftime() check its time tuple argument to make sure the tuple's values
Brett Cannon <bcannon@gmail.com>
parents:
30979
diff
changeset
|
465 return NULL; |
|
ae8dbf500172
Have strftime() check its time tuple argument to make sure the tuple's values
Brett Cannon <bcannon@gmail.com>
parents:
30979
diff
changeset
|
466 } |
|
ae8dbf500172
Have strftime() check its time tuple argument to make sure the tuple's values
Brett Cannon <bcannon@gmail.com>
parents:
30979
diff
changeset
|
467 if (buf.tm_isdst < -1 || buf.tm_isdst > 1) { |
|
ae8dbf500172
Have strftime() check its time tuple argument to make sure the tuple's values
Brett Cannon <bcannon@gmail.com>
parents:
30979
diff
changeset
|
468 PyErr_SetString(PyExc_ValueError, |
|
ae8dbf500172
Have strftime() check its time tuple argument to make sure the tuple's values
Brett Cannon <bcannon@gmail.com>
parents:
30979
diff
changeset
|
469 "daylight savings flag out of range"); |
|
ae8dbf500172
Have strftime() check its time tuple argument to make sure the tuple's values
Brett Cannon <bcannon@gmail.com>
parents:
30979
diff
changeset
|
470 return NULL; |
|
ae8dbf500172
Have strftime() check its time tuple argument to make sure the tuple's values
Brett Cannon <bcannon@gmail.com>
parents:
30979
diff
changeset
|
471 } |
|
ae8dbf500172
Have strftime() check its time tuple argument to make sure the tuple's values
Brett Cannon <bcannon@gmail.com>
parents:
30979
diff
changeset
|
472 |
|
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
|
473 #ifdef MS_WINDOWS |
|
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
|
474 /* check that the format string contains only valid directives */ |
|
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
|
475 for(outbuf = strchr(fmt, '%'); |
|
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
|
476 outbuf != NULL; |
|
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
|
477 outbuf = strchr(outbuf+2, '%')) |
|
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
|
478 { |
|
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
|
479 if (outbuf[1]=='#') |
|
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
|
480 ++outbuf; /* not documented by python, */ |
|
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 if (outbuf[1]=='\0' || |
|
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
|
482 !strchr("aAbBcdfHIjmMpSUwWxXyYzZ%", outbuf[1])) |
|
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
|
483 { |
|
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
|
484 PyErr_SetString(PyExc_ValueError, "Invalid format string"); |
|
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
|
485 return 0; |
|
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
|
486 } |
|
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
|
487 } |
|
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
|
488 #endif |
|
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
|
489 |
|
10275
632bd3a5ddef
Patch by Tadayoshi Funaba (with some changes) to be smarter about
Guido van Rossum <guido@python.org>
parents:
10269
diff
changeset
|
490 fmtlen = strlen(fmt); |
|
632bd3a5ddef
Patch by Tadayoshi Funaba (with some changes) to be smarter about
Guido van Rossum <guido@python.org>
parents:
10269
diff
changeset
|
491 |
|
4947
78d880043129
Formatting, and minor error detection
Barry Warsaw <barry@python.org>
parents:
4618
diff
changeset
|
492 /* I hate these functions that presume you know how big the output |
|
78d880043129
Formatting, and minor error detection
Barry Warsaw <barry@python.org>
parents:
4618
diff
changeset
|
493 * will be ahead of time... |
|
78d880043129
Formatting, and minor error detection
Barry Warsaw <barry@python.org>
parents:
4618
diff
changeset
|
494 */ |
|
10275
632bd3a5ddef
Patch by Tadayoshi Funaba (with some changes) to be smarter about
Guido van Rossum <guido@python.org>
parents:
10269
diff
changeset
|
495 for (i = 1024; ; i += i) { |
|
37666
5a9fcd676b3f
C++ compiler changes. casts, rename variables with reserved names.
Anthony Baxter <anthonybaxter@gmail.com>
parents:
36324
diff
changeset
|
496 outbuf = (char *)malloc(i); |
| 3086 | 497 if (outbuf == NULL) { |
| 4615 | 498 return PyErr_NoMemory(); |
| 3086 | 499 } |
|
10275
632bd3a5ddef
Patch by Tadayoshi Funaba (with some changes) to be smarter about
Guido van Rossum <guido@python.org>
parents:
10269
diff
changeset
|
500 buflen = strftime(outbuf, i, fmt, &buf); |
|
632bd3a5ddef
Patch by Tadayoshi Funaba (with some changes) to be smarter about
Guido van Rossum <guido@python.org>
parents:
10269
diff
changeset
|
501 if (buflen > 0 || i >= 256 * fmtlen) { |
|
632bd3a5ddef
Patch by Tadayoshi Funaba (with some changes) to be smarter about
Guido van Rossum <guido@python.org>
parents:
10269
diff
changeset
|
502 /* If the buffer is 256 times as long as the format, |
|
632bd3a5ddef
Patch by Tadayoshi Funaba (with some changes) to be smarter about
Guido van Rossum <guido@python.org>
parents:
10269
diff
changeset
|
503 it's probably not failing for lack of room! |
|
632bd3a5ddef
Patch by Tadayoshi Funaba (with some changes) to be smarter about
Guido van Rossum <guido@python.org>
parents:
10269
diff
changeset
|
504 More likely, the format yields an empty result, |
|
632bd3a5ddef
Patch by Tadayoshi Funaba (with some changes) to be smarter about
Guido van Rossum <guido@python.org>
parents:
10269
diff
changeset
|
505 e.g. an empty format, or %Z when the timezone |
|
632bd3a5ddef
Patch by Tadayoshi Funaba (with some changes) to be smarter about
Guido van Rossum <guido@python.org>
parents:
10269
diff
changeset
|
506 is unknown. */ |
| 4615 | 507 PyObject *ret; |
|
47527
52294af4b663
This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents:
47294
diff
changeset
|
508 ret = PyString_FromStringAndSize(outbuf, buflen); |
| 3086 | 509 free(outbuf); |
| 510 return ret; | |
| 511 } | |
| 512 free(outbuf); | |
|
38999
75bdb1eb0766
Fix build problems with the platform SDK on windows. It is not sufficient to test for the C compiler version when determining if we have the secure CRT from microsoft. Must test with an undocumented macro, __STDC_SECURE_LIB__ too.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
38779
diff
changeset
|
513 #if defined _MSC_VER && _MSC_VER >= 1400 && defined(__STDC_SECURE_LIB__) |
|
38779
4c74ec831a6c
Fix the CRT argument error handling for VisualStudio .NET 2005. Install a CRT error handler and disable the assertion for debug builds. This causes CRT to set errno to EINVAL.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
38716
diff
changeset
|
514 /* VisualStudio .NET 2005 does this properly */ |
|
4c74ec831a6c
Fix the CRT argument error handling for VisualStudio .NET 2005. Install a CRT error handler and disable the assertion for debug builds. This causes CRT to set errno to EINVAL.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
38716
diff
changeset
|
515 if (buflen == 0 && errno == EINVAL) { |
|
4c74ec831a6c
Fix the CRT argument error handling for VisualStudio .NET 2005. Install a CRT error handler and disable the assertion for debug builds. This causes CRT to set errno to EINVAL.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
38716
diff
changeset
|
516 PyErr_SetString(PyExc_ValueError, "Invalid format string"); |
|
4c74ec831a6c
Fix the CRT argument error handling for VisualStudio .NET 2005. Install a CRT error handler and disable the assertion for debug builds. This causes CRT to set errno to EINVAL.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
38716
diff
changeset
|
517 return 0; |
|
4c74ec831a6c
Fix the CRT argument error handling for VisualStudio .NET 2005. Install a CRT error handler and disable the assertion for debug builds. This causes CRT to set errno to EINVAL.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
38716
diff
changeset
|
518 } |
|
4c74ec831a6c
Fix the CRT argument error handling for VisualStudio .NET 2005. Install a CRT error handler and disable the assertion for debug builds. This causes CRT to set errno to EINVAL.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
38716
diff
changeset
|
519 #endif |
|
4c74ec831a6c
Fix the CRT argument error handling for VisualStudio .NET 2005. Install a CRT error handler and disable the assertion for debug builds. This causes CRT to set errno to EINVAL.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
38716
diff
changeset
|
520 |
| 3086 | 521 } |
| 522 } | |
| 8568 | 523 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
22957
diff
changeset
|
524 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
|
525 "strftime(format[, tuple]) -> string\n\ |
| 8568 | 526 \n\ |
| 527 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
|
528 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
|
529 is not present, current time as returned by localtime() is used."); |
| 3086 | 530 #endif /* HAVE_STRFTIME */ |
| 531 | |
|
24323
ab1877a7b262
Patch to call the Pure python strptime implementation if there's no
Guido van Rossum <guido@python.org>
parents:
24243
diff
changeset
|
532 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
|
533 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
|
534 { |
|
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
|
535 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
|
536 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
|
537 |
|
27294
7055f4c1edcc
Windows flavor of floatsleep(): folded long lines, introduced a temp
Tim Peters <tim.peters@gmail.com>
parents:
27281
diff
changeset
|
538 if (!strptime_module) |
|
24323
ab1877a7b262
Patch to call the Pure python strptime implementation if there's no
Guido van Rossum <guido@python.org>
parents:
24243
diff
changeset
|
539 return NULL; |
|
45767
212e9c8ad087
add %f format to datetime - issue 1158
Skip Montanaro <skip@pobox.com>
parents:
44439
diff
changeset
|
540 strptime_result = PyObject_CallMethod(strptime_module, "_strptime_time", "O", args); |
|
28569
75113759252c
SF patch #718867: Fix reference leak for time.strptime
Raymond Hettinger <python@rcn.com>
parents:
28299
diff
changeset
|
541 Py_DECREF(strptime_module); |
|
75113759252c
SF patch #718867: Fix reference leak for time.strptime
Raymond Hettinger <python@rcn.com>
parents:
28299
diff
changeset
|
542 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
|
543 } |
|
ab1877a7b262
Patch to call the Pure python strptime implementation if there's no
Guido van Rossum <guido@python.org>
parents:
24243
diff
changeset
|
544 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
22957
diff
changeset
|
545 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
|
546 "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
|
547 \n\ |
| 8568 | 548 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
|
549 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
|
550 |
|
8470
933882c0e9fb
Added strptime, if it exists. Modified after a patch by Jesse Hallio.
Guido van Rossum <guido@python.org>
parents:
8161
diff
changeset
|
551 |
| 4615 | 552 static PyObject * |
|
13501
ca32ff7a067e
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13447
diff
changeset
|
553 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
|
554 { |
|
16054
4cc9a1ebea62
Make the 'time' argument to the timemodule functions strftime, asctime,
Thomas Wouters <thomas@python.org>
parents:
15539
diff
changeset
|
555 PyObject *tup = NULL; |
|
1318
92e6a8cf14be
* pythonmain.c: -k option, usage message, more environment flags.
Guido van Rossum <guido@python.org>
parents:
1313
diff
changeset
|
556 struct tm buf; |
|
92e6a8cf14be
* pythonmain.c: -k option, usage message, more environment flags.
Guido van Rossum <guido@python.org>
parents:
1313
diff
changeset
|
557 char *p; |
|
38489
3fe3ccdf0155
Make use of METH_O and METH_NOARGS where possible.
Georg Brandl <georg@python.org>
parents:
38330
diff
changeset
|
558 if (!PyArg_UnpackTuple(args, "asctime", 0, 1, &tup)) |
|
11650
99a01cb3ddb5
The functions asctime() and mktime() are documented to take a 9-tuple
Guido van Rossum <guido@python.org>
parents:
11447
diff
changeset
|
559 return NULL; |
|
16054
4cc9a1ebea62
Make the 'time' argument to the timemodule functions strftime, asctime,
Thomas Wouters <thomas@python.org>
parents:
15539
diff
changeset
|
560 if (tup == NULL) { |
|
4cc9a1ebea62
Make the 'time' argument to the timemodule functions strftime, asctime,
Thomas Wouters <thomas@python.org>
parents:
15539
diff
changeset
|
561 time_t tt = time(NULL); |
|
4cc9a1ebea62
Make the 'time' argument to the timemodule functions strftime, asctime,
Thomas Wouters <thomas@python.org>
parents:
15539
diff
changeset
|
562 buf = *localtime(&tt); |
|
4cc9a1ebea62
Make the 'time' argument to the timemodule functions strftime, asctime,
Thomas Wouters <thomas@python.org>
parents:
15539
diff
changeset
|
563 } else if (!gettmarg(tup, &buf)) |
|
1318
92e6a8cf14be
* pythonmain.c: -k option, usage message, more environment flags.
Guido van Rossum <guido@python.org>
parents:
1313
diff
changeset
|
564 return NULL; |
|
92e6a8cf14be
* pythonmain.c: -k option, usage message, more environment flags.
Guido van Rossum <guido@python.org>
parents:
1313
diff
changeset
|
565 p = asctime(&buf); |
|
92e6a8cf14be
* pythonmain.c: -k option, usage message, more environment flags.
Guido van Rossum <guido@python.org>
parents:
1313
diff
changeset
|
566 if (p[24] == '\n') |
|
92e6a8cf14be
* pythonmain.c: -k option, usage message, more environment flags.
Guido van Rossum <guido@python.org>
parents:
1313
diff
changeset
|
567 p[24] = '\0'; |
|
47527
52294af4b663
This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents:
47294
diff
changeset
|
568 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
|
569 } |
|
92e6a8cf14be
* pythonmain.c: -k option, usage message, more environment flags.
Guido van Rossum <guido@python.org>
parents:
1313
diff
changeset
|
570 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
22957
diff
changeset
|
571 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
|
572 "asctime([tuple]) -> string\n\ |
| 8568 | 573 \n\ |
|
16054
4cc9a1ebea62
Make the 'time' argument to the timemodule functions strftime, asctime,
Thomas Wouters <thomas@python.org>
parents:
15539
diff
changeset
|
574 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
|
575 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
|
576 is used."); |
| 8568 | 577 |
| 4615 | 578 static PyObject * |
|
13501
ca32ff7a067e
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13447
diff
changeset
|
579 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
|
580 { |
|
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
|
581 PyObject *ot = NULL; |
|
1318
92e6a8cf14be
* pythonmain.c: -k option, usage message, more environment flags.
Guido van Rossum <guido@python.org>
parents:
1313
diff
changeset
|
582 time_t tt; |
|
92e6a8cf14be
* pythonmain.c: -k option, usage message, more environment flags.
Guido van Rossum <guido@python.org>
parents:
1313
diff
changeset
|
583 char *p; |
|
20080
f48a41c97021
SF patch #459385 (Norman Vine): time.timezone fix for Cygwin.
Guido van Rossum <guido@python.org>
parents:
19426
diff
changeset
|
584 |
|
38489
3fe3ccdf0155
Make use of METH_O and METH_NOARGS where possible.
Georg Brandl <georg@python.org>
parents:
38330
diff
changeset
|
585 if (!PyArg_UnpackTuple(args, "ctime", 0, 1, &ot)) |
|
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
|
586 return NULL; |
|
582eb51b8492
allow ctime(), gmtime(), and localtime() to take None as equivalent to an omitted arg
Fred Drake <fdrake@acm.org>
parents:
32772
diff
changeset
|
587 if (ot == NULL || ot == Py_None) |
|
16054
4cc9a1ebea62
Make the 'time' argument to the timemodule functions strftime, asctime,
Thomas Wouters <thomas@python.org>
parents:
15539
diff
changeset
|
588 tt = time(NULL); |
|
4cc9a1ebea62
Make the 'time' argument to the timemodule functions strftime, asctime,
Thomas Wouters <thomas@python.org>
parents:
15539
diff
changeset
|
589 else { |
|
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
|
590 double dt = PyFloat_AsDouble(ot); |
|
582eb51b8492
allow ctime(), gmtime(), and localtime() to take None as equivalent to an omitted arg
Fred Drake <fdrake@acm.org>
parents:
32772
diff
changeset
|
591 if (PyErr_Occurred()) |
|
16054
4cc9a1ebea62
Make the 'time' argument to the timemodule functions strftime, asctime,
Thomas Wouters <thomas@python.org>
parents:
15539
diff
changeset
|
592 return NULL; |
|
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
|
593 tt = _PyTime_DoubleToTimet(dt); |
|
ec64a6be32f7
Raise ValueError when value being stored in a time_t variable will result in
Brett Cannon <bcannon@gmail.com>
parents:
31608
diff
changeset
|
594 if (tt == (time_t)-1 && PyErr_Occurred()) |
|
ec64a6be32f7
Raise ValueError when value being stored in a time_t variable will result in
Brett Cannon <bcannon@gmail.com>
parents:
31608
diff
changeset
|
595 return NULL; |
|
16054
4cc9a1ebea62
Make the 'time' argument to the timemodule functions strftime, asctime,
Thomas Wouters <thomas@python.org>
parents:
15539
diff
changeset
|
596 } |
|
1318
92e6a8cf14be
* pythonmain.c: -k option, usage message, more environment flags.
Guido van Rossum <guido@python.org>
parents:
1313
diff
changeset
|
597 p = ctime(&tt); |
|
7532
bf236fbf11da
Raise ValueError: "unconvertible time" when ctime() returns NULL,
Guido van Rossum <guido@python.org>
parents:
6973
diff
changeset
|
598 if (p == NULL) { |
|
bf236fbf11da
Raise ValueError: "unconvertible time" when ctime() returns NULL,
Guido van Rossum <guido@python.org>
parents:
6973
diff
changeset
|
599 PyErr_SetString(PyExc_ValueError, "unconvertible time"); |
|
bf236fbf11da
Raise ValueError: "unconvertible time" when ctime() returns NULL,
Guido van Rossum <guido@python.org>
parents:
6973
diff
changeset
|
600 return NULL; |
|
bf236fbf11da
Raise ValueError: "unconvertible time" when ctime() returns NULL,
Guido van Rossum <guido@python.org>
parents:
6973
diff
changeset
|
601 } |
|
1318
92e6a8cf14be
* pythonmain.c: -k option, usage message, more environment flags.
Guido van Rossum <guido@python.org>
parents:
1313
diff
changeset
|
602 if (p[24] == '\n') |
|
92e6a8cf14be
* pythonmain.c: -k option, usage message, more environment flags.
Guido van Rossum <guido@python.org>
parents:
1313
diff
changeset
|
603 p[24] = '\0'; |
|
47527
52294af4b663
This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents:
47294
diff
changeset
|
604 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
|
605 } |
|
92e6a8cf14be
* pythonmain.c: -k option, usage message, more environment flags.
Guido van Rossum <guido@python.org>
parents:
1313
diff
changeset
|
606 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
22957
diff
changeset
|
607 PyDoc_STRVAR(ctime_doc, |
| 8568 | 608 "ctime(seconds) -> string\n\ |
| 609 \n\ | |
| 610 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
|
611 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
|
612 not present, current time as returned by localtime() is used."); |
| 8568 | 613 |
|
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
|
614 #ifdef HAVE_MKTIME |
| 4615 | 615 static PyObject * |
|
38489
3fe3ccdf0155
Make use of METH_O and METH_NOARGS where possible.
Georg Brandl <georg@python.org>
parents:
38330
diff
changeset
|
616 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
|
617 { |
|
6ee380349c84
* Added gmtime/localtime/mktime and SYSV timezone globals to timemodule.c.
Guido van Rossum <guido@python.org>
parents:
1191
diff
changeset
|
618 struct tm buf; |
| 3592 | 619 time_t tt; |
|
11650
99a01cb3ddb5
The functions asctime() and mktime() are documented to take a 9-tuple
Guido van Rossum <guido@python.org>
parents:
11447
diff
changeset
|
620 if (!gettmarg(tup, &buf)) |
|
1313
6ee380349c84
* Added gmtime/localtime/mktime and SYSV timezone globals to timemodule.c.
Guido van Rossum <guido@python.org>
parents:
1191
diff
changeset
|
621 return NULL; |
| 3592 | 622 tt = mktime(&buf); |
| 623 if (tt == (time_t)(-1)) { | |
| 4615 | 624 PyErr_SetString(PyExc_OverflowError, |
|
20080
f48a41c97021
SF patch #459385 (Norman Vine): time.timezone fix for Cygwin.
Guido van Rossum <guido@python.org>
parents:
19426
diff
changeset
|
625 "mktime argument out of range"); |
| 3592 | 626 return NULL; |
| 627 } | |
| 4615 | 628 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
|
629 } |
| 8568 | 630 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
22957
diff
changeset
|
631 PyDoc_STRVAR(mktime_doc, |
| 8568 | 632 "mktime(tuple) -> floating point number\n\ |
| 633 \n\ | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
22957
diff
changeset
|
634 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
|
635 #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
|
636 |
|
28299
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
637 #ifdef HAVE_WORKING_TZSET |
|
46317
864a5671c7a4
Declare inittimezone static.
Skip Montanaro <skip@pobox.com>
parents:
45767
diff
changeset
|
638 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
|
639 |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
640 static PyObject * |
|
38489
3fe3ccdf0155
Make use of METH_O and METH_NOARGS where possible.
Georg Brandl <georg@python.org>
parents:
38330
diff
changeset
|
641 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
|
642 { |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
643 PyObject* m; |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
644 |
|
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
|
645 m = PyImport_ImportModuleNoBlock("time"); |
|
28299
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
646 if (m == NULL) { |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
647 return NULL; |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
648 } |
|
14346
5397fdf88ec2
Do the absolute minimal amount of modifications to eradicate
Barry Warsaw <barry@python.org>
parents:
14001
diff
changeset
|
649 |
|
28299
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
650 tzset(); |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
651 |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
652 /* Reset timezone, altzone, daylight and tzname */ |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
653 inittimezone(m); |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
654 Py_DECREF(m); |
|
32388
5cf507b64f31
Bug 975996: Add _PyTime_DoubleToTimet to C API
Tim Peters <tim.peters@gmail.com>
parents:
32384
diff
changeset
|
655 |
|
28299
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
656 Py_INCREF(Py_None); |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
657 return Py_None; |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
658 } |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
659 |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
660 PyDoc_STRVAR(tzset_doc, |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
661 "tzset(zone)\n\ |
| 8568 | 662 \n\ |
|
28299
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
663 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
|
664 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
|
665 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
|
666 (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
|
667 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
|
668 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
|
669 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
|
670 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
|
671 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
|
672 #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
|
673 |
|
46317
864a5671c7a4
Declare inittimezone static.
Skip Montanaro <skip@pobox.com>
parents:
45767
diff
changeset
|
674 static void |
|
864a5671c7a4
Declare inittimezone static.
Skip Montanaro <skip@pobox.com>
parents:
45767
diff
changeset
|
675 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
|
676 /* This code moved from inittime wholesale to allow calling it from |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
677 time_tzset. In the future, some parts of it can be moved back |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
678 (for platforms that don't HAVE_WORKING_TZSET, when we know what they |
| 46324 | 679 are), and the extraneous calls to tzset(3) should be removed. |
| 40503 | 680 I haven't done this yet, as I don't want to change this code as |
|
28299
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
681 little as possible when introducing the time.tzset and time.tzsetwall |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
682 methods. This should simply be a method of doing the following once, |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
683 at the top of this function and removing the call to tzset() from |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
684 time_tzset(): |
| 8568 | 685 |
|
28299
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
686 #ifdef HAVE_TZSET |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
687 tzset() |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
688 #endif |
|
22728
14b7986a92e1
Remove all but one use of the module dict.
Fred Drake <fdrake@acm.org>
parents:
22256
diff
changeset
|
689 |
|
28299
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
690 And I'm lazy and hate C so nyer. |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
691 */ |
|
20080
f48a41c97021
SF patch #459385 (Norman Vine): time.timezone fix for Cygwin.
Guido van Rossum <guido@python.org>
parents:
19426
diff
changeset
|
692 #if defined(HAVE_TZNAME) && !defined(__GLIBC__) && !defined(__CYGWIN__) |
|
1313
6ee380349c84
* Added gmtime/localtime/mktime and SYSV timezone globals to timemodule.c.
Guido van Rossum <guido@python.org>
parents:
1191
diff
changeset
|
693 tzset(); |
|
9160
f0a92c0a115e
Fixes for OS/2 by Jeff Rush.
Guido van Rossum <guido@python.org>
parents:
9042
diff
changeset
|
694 #ifdef PYOS_OS2 |
|
22728
14b7986a92e1
Remove all but one use of the module dict.
Fred Drake <fdrake@acm.org>
parents:
22256
diff
changeset
|
695 PyModule_AddIntConstant(m, "timezone", _timezone); |
|
9160
f0a92c0a115e
Fixes for OS/2 by Jeff Rush.
Guido van Rossum <guido@python.org>
parents:
9042
diff
changeset
|
696 #else /* !PYOS_OS2 */ |
|
22728
14b7986a92e1
Remove all but one use of the module dict.
Fred Drake <fdrake@acm.org>
parents:
22256
diff
changeset
|
697 PyModule_AddIntConstant(m, "timezone", timezone); |
|
9160
f0a92c0a115e
Fixes for OS/2 by Jeff Rush.
Guido van Rossum <guido@python.org>
parents:
9042
diff
changeset
|
698 #endif /* PYOS_OS2 */ |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
699 #ifdef HAVE_ALTZONE |
|
22728
14b7986a92e1
Remove all but one use of the module dict.
Fred Drake <fdrake@acm.org>
parents:
22256
diff
changeset
|
700 PyModule_AddIntConstant(m, "altzone", altzone); |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
701 #else |
|
9160
f0a92c0a115e
Fixes for OS/2 by Jeff Rush.
Guido van Rossum <guido@python.org>
parents:
9042
diff
changeset
|
702 #ifdef PYOS_OS2 |
|
22728
14b7986a92e1
Remove all but one use of the module dict.
Fred Drake <fdrake@acm.org>
parents:
22256
diff
changeset
|
703 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
|
704 #else /* !PYOS_OS2 */ |
|
22728
14b7986a92e1
Remove all but one use of the module dict.
Fred Drake <fdrake@acm.org>
parents:
22256
diff
changeset
|
705 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
|
706 #endif /* PYOS_OS2 */ |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
707 #endif |
|
22728
14b7986a92e1
Remove all but one use of the module dict.
Fred Drake <fdrake@acm.org>
parents:
22256
diff
changeset
|
708 PyModule_AddIntConstant(m, "daylight", daylight); |
|
14b7986a92e1
Remove all but one use of the module dict.
Fred Drake <fdrake@acm.org>
parents:
22256
diff
changeset
|
709 PyModule_AddObject(m, "tzname", |
|
14b7986a92e1
Remove all but one use of the module dict.
Fred Drake <fdrake@acm.org>
parents:
22256
diff
changeset
|
710 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
|
711 #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
|
712 #ifdef HAVE_STRUCT_TM_TM_ZONE |
|
1313
6ee380349c84
* Added gmtime/localtime/mktime and SYSV timezone globals to timemodule.c.
Guido van Rossum <guido@python.org>
parents:
1191
diff
changeset
|
713 { |
|
6ee380349c84
* Added gmtime/localtime/mktime and SYSV timezone globals to timemodule.c.
Guido van Rossum <guido@python.org>
parents:
1191
diff
changeset
|
714 #define YEAR ((time_t)((365 * 24 + 6) * 3600)) |
|
6ee380349c84
* Added gmtime/localtime/mktime and SYSV timezone globals to timemodule.c.
Guido van Rossum <guido@python.org>
parents:
1191
diff
changeset
|
715 time_t t; |
|
6ee380349c84
* Added gmtime/localtime/mktime and SYSV timezone globals to timemodule.c.
Guido van Rossum <guido@python.org>
parents:
1191
diff
changeset
|
716 struct tm *p; |
|
10493
f5d7c4945d5f
Chris Lawrence writes:
Guido van Rossum <guido@python.org>
parents:
10362
diff
changeset
|
717 long janzone, julyzone; |
|
f5d7c4945d5f
Chris Lawrence writes:
Guido van Rossum <guido@python.org>
parents:
10362
diff
changeset
|
718 char janname[10], julyname[10]; |
|
1313
6ee380349c84
* Added gmtime/localtime/mktime and SYSV timezone globals to timemodule.c.
Guido van Rossum <guido@python.org>
parents:
1191
diff
changeset
|
719 t = (time((time_t *)0) / YEAR) * YEAR; |
|
6ee380349c84
* Added gmtime/localtime/mktime and SYSV timezone globals to timemodule.c.
Guido van Rossum <guido@python.org>
parents:
1191
diff
changeset
|
720 p = localtime(&t); |
|
10493
f5d7c4945d5f
Chris Lawrence writes:
Guido van Rossum <guido@python.org>
parents:
10362
diff
changeset
|
721 janzone = -p->tm_gmtoff; |
|
f5d7c4945d5f
Chris Lawrence writes:
Guido van Rossum <guido@python.org>
parents:
10362
diff
changeset
|
722 strncpy(janname, p->tm_zone ? p->tm_zone : " ", 9); |
|
f5d7c4945d5f
Chris Lawrence writes:
Guido van Rossum <guido@python.org>
parents:
10362
diff
changeset
|
723 janname[9] = '\0'; |
|
1313
6ee380349c84
* Added gmtime/localtime/mktime and SYSV timezone globals to timemodule.c.
Guido van Rossum <guido@python.org>
parents:
1191
diff
changeset
|
724 t += YEAR/2; |
|
6ee380349c84
* Added gmtime/localtime/mktime and SYSV timezone globals to timemodule.c.
Guido van Rossum <guido@python.org>
parents:
1191
diff
changeset
|
725 p = localtime(&t); |
|
10493
f5d7c4945d5f
Chris Lawrence writes:
Guido van Rossum <guido@python.org>
parents:
10362
diff
changeset
|
726 julyzone = -p->tm_gmtoff; |
|
f5d7c4945d5f
Chris Lawrence writes:
Guido van Rossum <guido@python.org>
parents:
10362
diff
changeset
|
727 strncpy(julyname, p->tm_zone ? p->tm_zone : " ", 9); |
|
f5d7c4945d5f
Chris Lawrence writes:
Guido van Rossum <guido@python.org>
parents:
10362
diff
changeset
|
728 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
|
729 |
|
10493
f5d7c4945d5f
Chris Lawrence writes:
Guido van Rossum <guido@python.org>
parents:
10362
diff
changeset
|
730 if( janzone < julyzone ) { |
|
f5d7c4945d5f
Chris Lawrence writes:
Guido van Rossum <guido@python.org>
parents:
10362
diff
changeset
|
731 /* DST is reversed in the southern hemisphere */ |
|
22728
14b7986a92e1
Remove all but one use of the module dict.
Fred Drake <fdrake@acm.org>
parents:
22256
diff
changeset
|
732 PyModule_AddIntConstant(m, "timezone", julyzone); |
|
14b7986a92e1
Remove all but one use of the module dict.
Fred Drake <fdrake@acm.org>
parents:
22256
diff
changeset
|
733 PyModule_AddIntConstant(m, "altzone", janzone); |
|
14b7986a92e1
Remove all but one use of the module dict.
Fred Drake <fdrake@acm.org>
parents:
22256
diff
changeset
|
734 PyModule_AddIntConstant(m, "daylight", |
|
14b7986a92e1
Remove all but one use of the module dict.
Fred Drake <fdrake@acm.org>
parents:
22256
diff
changeset
|
735 janzone != julyzone); |
|
14b7986a92e1
Remove all but one use of the module dict.
Fred Drake <fdrake@acm.org>
parents:
22256
diff
changeset
|
736 PyModule_AddObject(m, "tzname", |
|
14b7986a92e1
Remove all but one use of the module dict.
Fred Drake <fdrake@acm.org>
parents:
22256
diff
changeset
|
737 Py_BuildValue("(zz)", |
|
14b7986a92e1
Remove all but one use of the module dict.
Fred Drake <fdrake@acm.org>
parents:
22256
diff
changeset
|
738 julyname, janname)); |
|
10493
f5d7c4945d5f
Chris Lawrence writes:
Guido van Rossum <guido@python.org>
parents:
10362
diff
changeset
|
739 } else { |
|
22728
14b7986a92e1
Remove all but one use of the module dict.
Fred Drake <fdrake@acm.org>
parents:
22256
diff
changeset
|
740 PyModule_AddIntConstant(m, "timezone", janzone); |
|
14b7986a92e1
Remove all but one use of the module dict.
Fred Drake <fdrake@acm.org>
parents:
22256
diff
changeset
|
741 PyModule_AddIntConstant(m, "altzone", julyzone); |
|
14b7986a92e1
Remove all but one use of the module dict.
Fred Drake <fdrake@acm.org>
parents:
22256
diff
changeset
|
742 PyModule_AddIntConstant(m, "daylight", |
|
14b7986a92e1
Remove all but one use of the module dict.
Fred Drake <fdrake@acm.org>
parents:
22256
diff
changeset
|
743 janzone != julyzone); |
|
14b7986a92e1
Remove all but one use of the module dict.
Fred Drake <fdrake@acm.org>
parents:
22256
diff
changeset
|
744 PyModule_AddObject(m, "tzname", |
|
14b7986a92e1
Remove all but one use of the module dict.
Fred Drake <fdrake@acm.org>
parents:
22256
diff
changeset
|
745 Py_BuildValue("(zz)", |
|
14b7986a92e1
Remove all but one use of the module dict.
Fred Drake <fdrake@acm.org>
parents:
22256
diff
changeset
|
746 janname, julyname)); |
|
10493
f5d7c4945d5f
Chris Lawrence writes:
Guido van Rossum <guido@python.org>
parents:
10362
diff
changeset
|
747 } |
|
1313
6ee380349c84
* Added gmtime/localtime/mktime and SYSV timezone globals to timemodule.c.
Guido van Rossum <guido@python.org>
parents:
1191
diff
changeset
|
748 } |
|
6459
b65eb44422ba
timezone support for macintosh (Jack)
Guido van Rossum <guido@python.org>
parents:
5238
diff
changeset
|
749 #else |
|
25810
915112671152
Patch #623780: Replace obsolete struct macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
24471
diff
changeset
|
750 #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
|
751 #ifdef __CYGWIN__ |
|
bc0555be2212
SF patch 407758, "timemodule patches for Cygwin", from Norman Vine.
Tim Peters <tim.peters@gmail.com>
parents:
16997
diff
changeset
|
752 tzset(); |
|
22728
14b7986a92e1
Remove all but one use of the module dict.
Fred Drake <fdrake@acm.org>
parents:
22256
diff
changeset
|
753 PyModule_AddIntConstant(m, "timezone", _timezone); |
|
38202
bfb76ae82c91
Patch #1490224: set time.altzone correctly on Cygwin.
Georg Brandl <georg@python.org>
parents:
37934
diff
changeset
|
754 PyModule_AddIntConstant(m, "altzone", _timezone-3600); |
|
22728
14b7986a92e1
Remove all but one use of the module dict.
Fred Drake <fdrake@acm.org>
parents:
22256
diff
changeset
|
755 PyModule_AddIntConstant(m, "daylight", _daylight); |
|
14b7986a92e1
Remove all but one use of the module dict.
Fred Drake <fdrake@acm.org>
parents:
22256
diff
changeset
|
756 PyModule_AddObject(m, "tzname", |
|
14b7986a92e1
Remove all but one use of the module dict.
Fred Drake <fdrake@acm.org>
parents:
22256
diff
changeset
|
757 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
|
758 #endif /* __CYGWIN__ */ |
|
20080
f48a41c97021
SF patch #459385 (Norman Vine): time.timezone fix for Cygwin.
Guido van Rossum <guido@python.org>
parents:
19426
diff
changeset
|
759 #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
|
760 } |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
761 |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
762 |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
763 static PyMethodDef time_methods[] = { |
|
38489
3fe3ccdf0155
Make use of METH_O and METH_NOARGS where possible.
Georg Brandl <georg@python.org>
parents:
38330
diff
changeset
|
764 {"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
|
765 #ifdef HAVE_CLOCK |
|
38489
3fe3ccdf0155
Make use of METH_O and METH_NOARGS where possible.
Georg Brandl <georg@python.org>
parents:
38330
diff
changeset
|
766 {"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
|
767 #endif |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
768 {"sleep", time_sleep, METH_VARARGS, sleep_doc}, |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
769 {"gmtime", time_gmtime, METH_VARARGS, gmtime_doc}, |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
770 {"localtime", time_localtime, METH_VARARGS, localtime_doc}, |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
771 {"asctime", time_asctime, METH_VARARGS, asctime_doc}, |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
772 {"ctime", time_ctime, METH_VARARGS, ctime_doc}, |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
773 #ifdef HAVE_MKTIME |
|
38489
3fe3ccdf0155
Make use of METH_O and METH_NOARGS where possible.
Georg Brandl <georg@python.org>
parents:
38330
diff
changeset
|
774 {"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
|
775 #endif |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
776 #ifdef HAVE_STRFTIME |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
777 {"strftime", time_strftime, METH_VARARGS, strftime_doc}, |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
778 #endif |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
779 {"strptime", time_strptime, METH_VARARGS, strptime_doc}, |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
780 #ifdef HAVE_WORKING_TZSET |
|
38489
3fe3ccdf0155
Make use of METH_O and METH_NOARGS where possible.
Georg Brandl <georg@python.org>
parents:
38330
diff
changeset
|
781 {"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
|
782 #endif |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
783 {NULL, NULL} /* sentinel */ |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
784 }; |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
785 |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
786 |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
787 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
|
788 "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
|
789 \n\ |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
790 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
|
791 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
|
792 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
|
793 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
|
794 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
|
795 \n\ |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
796 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
|
797 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
|
798 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
|
799 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
|
800 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
|
801 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
|
802 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
|
803 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
|
804 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
|
805 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
|
806 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
|
807 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
|
808 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
|
809 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
|
810 \n\ |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
811 Variables:\n\ |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
812 \n\ |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
813 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
|
814 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
|
815 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
|
816 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
|
817 \n\ |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
818 Functions:\n\ |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
819 \n\ |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
820 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
|
821 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
|
822 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
|
823 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
|
824 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
|
825 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
|
826 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
|
827 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
|
828 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
|
829 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
|
830 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
|
831 |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
832 |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
833 PyMODINIT_FUNC |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
834 inittime(void) |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
835 { |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
836 PyObject *m; |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
837 char *p; |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
838 m = Py_InitModule3("time", time_methods, module_doc); |
|
36324
1af7f719ed28
Check return result from Py_InitModule*(). This API can fail.
Neal Norwitz <nnorwitz@gmail.com>
parents:
32939
diff
changeset
|
839 if (m == NULL) |
|
1af7f719ed28
Check return result from Py_InitModule*(). This API can fail.
Neal Norwitz <nnorwitz@gmail.com>
parents:
32939
diff
changeset
|
840 return; |
|
28299
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
841 |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
842 /* Accept 2-digit dates unless PYTHONY2K is set and non-empty */ |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
843 p = Py_GETENV("PYTHONY2K"); |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
844 PyModule_AddIntConstant(m, "accept2dyear", (long) (!p || !*p)); |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
845 /* Squirrel away the module's dictionary for the y2k check */ |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
846 moddict = PyModule_GetDict(m); |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
847 Py_INCREF(moddict); |
|
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 /* Set, or reset, module variables like time.timezone */ |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
850 inittimezone(m); |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
851 |
|
24243
c423a88b22ce
Fix bug 581232 - [Windows] Can not interrupt time.sleep()
Mark Hammond <mhammond@skippinet.com.au>
parents:
24071
diff
changeset
|
852 #ifdef MS_WINDOWS |
|
c423a88b22ce
Fix bug 581232 - [Windows] Can not interrupt time.sleep()
Mark Hammond <mhammond@skippinet.com.au>
parents:
24071
diff
changeset
|
853 /* Helper to allow interrupts for Windows. |
|
c423a88b22ce
Fix bug 581232 - [Windows] Can not interrupt time.sleep()
Mark Hammond <mhammond@skippinet.com.au>
parents:
24071
diff
changeset
|
854 If Ctrl+C event delivered while not sleeping |
|
c423a88b22ce
Fix bug 581232 - [Windows] Can not interrupt time.sleep()
Mark Hammond <mhammond@skippinet.com.au>
parents:
24071
diff
changeset
|
855 it will be ignored. |
|
c423a88b22ce
Fix bug 581232 - [Windows] Can not interrupt time.sleep()
Mark Hammond <mhammond@skippinet.com.au>
parents:
24071
diff
changeset
|
856 */ |
|
c423a88b22ce
Fix bug 581232 - [Windows] Can not interrupt time.sleep()
Mark Hammond <mhammond@skippinet.com.au>
parents:
24071
diff
changeset
|
857 main_thread = PyThread_get_thread_ident(); |
|
c423a88b22ce
Fix bug 581232 - [Windows] Can not interrupt time.sleep()
Mark Hammond <mhammond@skippinet.com.au>
parents:
24071
diff
changeset
|
858 hInterruptEvent = CreateEvent(NULL, TRUE, FALSE, NULL); |
|
c423a88b22ce
Fix bug 581232 - [Windows] Can not interrupt time.sleep()
Mark Hammond <mhammond@skippinet.com.au>
parents:
24071
diff
changeset
|
859 SetConsoleCtrlHandler( PyCtrlHandler, TRUE); |
|
c423a88b22ce
Fix bug 581232 - [Windows] Can not interrupt time.sleep()
Mark Hammond <mhammond@skippinet.com.au>
parents:
24071
diff
changeset
|
860 #endif /* MS_WINDOWS */ |
|
37772
b90a7c6021bc
Initialize structseq types only once.
Martin v. Löwis <martin@v.loewis.de>
parents:
37666
diff
changeset
|
861 if (!initialized) { |
|
38326
9f884d34a0ec
Some Win64 pre-release in 2000 didn't support
Tim Peters <tim.peters@gmail.com>
parents:
38202
diff
changeset
|
862 PyStructSequence_InitType(&StructTimeType, |
|
37772
b90a7c6021bc
Initialize structseq types only once.
Martin v. Löwis <martin@v.loewis.de>
parents:
37666
diff
changeset
|
863 &struct_time_type_desc); |
|
b90a7c6021bc
Initialize structseq types only once.
Martin v. Löwis <martin@v.loewis.de>
parents:
37666
diff
changeset
|
864 } |
|
22728
14b7986a92e1
Remove all but one use of the module dict.
Fred Drake <fdrake@acm.org>
parents:
22256
diff
changeset
|
865 Py_INCREF(&StructTimeType); |
|
14b7986a92e1
Remove all but one use of the module dict.
Fred Drake <fdrake@acm.org>
parents:
22256
diff
changeset
|
866 PyModule_AddObject(m, "struct_time", (PyObject*) &StructTimeType); |
|
37772
b90a7c6021bc
Initialize structseq types only once.
Martin v. Löwis <martin@v.loewis.de>
parents:
37666
diff
changeset
|
867 initialized = 1; |
| 6 | 868 } |
| 869 | |
| 870 | |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
871 /* Implement floattime() for various platforms */ |
| 6 | 872 |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
873 static double |
|
13651
8a063423e0b7
Bunch of minor ANSIfications: 'void initfunc()' -> 'void initfunc(void)',
Thomas Wouters <thomas@python.org>
parents:
13501
diff
changeset
|
874 floattime(void) |
| 6 | 875 { |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
876 /* There are three ways to get the time: |
|
4947
78d880043129
Formatting, and minor error detection
Barry Warsaw <barry@python.org>
parents:
4618
diff
changeset
|
877 (1) gettimeofday() -- resolution in microseconds |
|
78d880043129
Formatting, and minor error detection
Barry Warsaw <barry@python.org>
parents:
4618
diff
changeset
|
878 (2) ftime() -- resolution in milliseconds |
|
78d880043129
Formatting, and minor error detection
Barry Warsaw <barry@python.org>
parents:
4618
diff
changeset
|
879 (3) time() -- resolution in seconds |
|
78d880043129
Formatting, and minor error detection
Barry Warsaw <barry@python.org>
parents:
4618
diff
changeset
|
880 In all cases the return value is a float in seconds. |
|
78d880043129
Formatting, and minor error detection
Barry Warsaw <barry@python.org>
parents:
4618
diff
changeset
|
881 Since on some systems (e.g. SCO ODT 3.0) gettimeofday() may |
|
78d880043129
Formatting, and minor error detection
Barry Warsaw <barry@python.org>
parents:
4618
diff
changeset
|
882 fail, so we fall back on ftime() or time(). |
|
78d880043129
Formatting, and minor error detection
Barry Warsaw <barry@python.org>
parents:
4618
diff
changeset
|
883 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
|
884 #ifdef HAVE_GETTIMEOFDAY |
|
4947
78d880043129
Formatting, and minor error detection
Barry Warsaw <barry@python.org>
parents:
4618
diff
changeset
|
885 { |
|
78d880043129
Formatting, and minor error detection
Barry Warsaw <barry@python.org>
parents:
4618
diff
changeset
|
886 struct timeval t; |
|
2055
cf31eab6ab5a
Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents:
1827
diff
changeset
|
887 #ifdef GETTIMEOFDAY_NO_TZ |
|
4947
78d880043129
Formatting, and minor error detection
Barry Warsaw <barry@python.org>
parents:
4618
diff
changeset
|
888 if (gettimeofday(&t) == 0) |
|
78d880043129
Formatting, and minor error detection
Barry Warsaw <barry@python.org>
parents:
4618
diff
changeset
|
889 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
|
890 #else /* !GETTIMEOFDAY_NO_TZ */ |
|
4947
78d880043129
Formatting, and minor error detection
Barry Warsaw <barry@python.org>
parents:
4618
diff
changeset
|
891 if (gettimeofday(&t, (struct timezone *)NULL) == 0) |
|
78d880043129
Formatting, and minor error detection
Barry Warsaw <barry@python.org>
parents:
4618
diff
changeset
|
892 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
|
893 #endif /* !GETTIMEOFDAY_NO_TZ */ |
|
4947
78d880043129
Formatting, and minor error detection
Barry Warsaw <barry@python.org>
parents:
4618
diff
changeset
|
894 } |
|
37934
ea67628ddae5
Patch 1471925 - Weak linking support for OSX
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
37772
diff
changeset
|
895 |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
896 #endif /* !HAVE_GETTIMEOFDAY */ |
|
4947
78d880043129
Formatting, and minor error detection
Barry Warsaw <barry@python.org>
parents:
4618
diff
changeset
|
897 { |
|
10362
1409e7687a9a
Patch by Chris Herborth for BeOS code.
Guido van Rossum <guido@python.org>
parents:
10275
diff
changeset
|
898 #if defined(HAVE_FTIME) |
|
4947
78d880043129
Formatting, and minor error detection
Barry Warsaw <barry@python.org>
parents:
4618
diff
changeset
|
899 struct timeb t; |
|
78d880043129
Formatting, and minor error detection
Barry Warsaw <barry@python.org>
parents:
4618
diff
changeset
|
900 ftime(&t); |
|
78d880043129
Formatting, and minor error detection
Barry Warsaw <barry@python.org>
parents:
4618
diff
changeset
|
901 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
|
902 #else /* !HAVE_FTIME */ |
|
4947
78d880043129
Formatting, and minor error detection
Barry Warsaw <barry@python.org>
parents:
4618
diff
changeset
|
903 time_t secs; |
|
78d880043129
Formatting, and minor error detection
Barry Warsaw <barry@python.org>
parents:
4618
diff
changeset
|
904 time(&secs); |
|
78d880043129
Formatting, and minor error detection
Barry Warsaw <barry@python.org>
parents:
4618
diff
changeset
|
905 return (double)secs; |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
906 #endif /* !HAVE_FTIME */ |
|
4947
78d880043129
Formatting, and minor error detection
Barry Warsaw <barry@python.org>
parents:
4618
diff
changeset
|
907 } |
| 6 | 908 } |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
909 |
| 6 | 910 |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
911 /* Implement floatsleep() for various platforms. |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
912 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
|
913 set an exception; else return 0. */ |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
914 |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
915 static int |
| 2506 | 916 floatsleep(double secs) |
| 6 | 917 { |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
23832
diff
changeset
|
918 /* 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
|
919 #if defined(HAVE_SELECT) && !defined(__BEOS__) && !defined(__EMX__) |
|
143
1870d82de069
Added BSD implementations of millisleep.
Guido van Rossum <guido@python.org>
parents:
86
diff
changeset
|
920 struct timeval t; |
|
1181
950cd37fcddc
* Makefile: use cp -r to install the library
Guido van Rossum <guido@python.org>
parents:
1177
diff
changeset
|
921 double frac; |
|
950cd37fcddc
* Makefile: use cp -r to install the library
Guido van Rossum <guido@python.org>
parents:
1177
diff
changeset
|
922 frac = fmod(secs, 1.0); |
|
950cd37fcddc
* Makefile: use cp -r to install the library
Guido van Rossum <guido@python.org>
parents:
1177
diff
changeset
|
923 secs = floor(secs); |
|
950cd37fcddc
* Makefile: use cp -r to install the library
Guido van Rossum <guido@python.org>
parents:
1177
diff
changeset
|
924 t.tv_sec = (long)secs; |
|
950cd37fcddc
* Makefile: use cp -r to install the library
Guido van Rossum <guido@python.org>
parents:
1177
diff
changeset
|
925 t.tv_usec = (long)(frac*1000000.0); |
|
6548
dd1e83323c45
Move the Py_{{BEGIN,END}_ALLOW,BLOCK}_THREADS macros in time_sleep()
Guido van Rossum <guido@python.org>
parents:
6459
diff
changeset
|
926 Py_BEGIN_ALLOW_THREADS |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
927 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
|
928 #ifdef EINTR |
|
11206
98d457383a2d
In floatsleep(), when using select(), ignore EINTR error.
Guido van Rossum <guido@python.org>
parents:
10734
diff
changeset
|
929 if (errno != EINTR) { |
|
11447
239ca4788bec
Jack Jansen: Mac has no EINTR.
Guido van Rossum <guido@python.org>
parents:
11206
diff
changeset
|
930 #else |
|
239ca4788bec
Jack Jansen: Mac has no EINTR.
Guido van Rossum <guido@python.org>
parents:
11206
diff
changeset
|
931 if (1) { |
|
239ca4788bec
Jack Jansen: Mac has no EINTR.
Guido van Rossum <guido@python.org>
parents:
11206
diff
changeset
|
932 #endif |
|
12046
a384b0f69512
Fix probable bug; if errno == EINTR, floatsleep() doesn't break out of
Andrew M. Kuchling <amk@amk.ca>
parents:
12003
diff
changeset
|
933 Py_BLOCK_THREADS |
|
11206
98d457383a2d
In floatsleep(), when using select(), ignore EINTR error.
Guido van Rossum <guido@python.org>
parents:
10734
diff
changeset
|
934 PyErr_SetFromErrno(PyExc_IOError); |
|
98d457383a2d
In floatsleep(), when using select(), ignore EINTR error.
Guido van Rossum <guido@python.org>
parents:
10734
diff
changeset
|
935 return -1; |
|
98d457383a2d
In floatsleep(), when using select(), ignore EINTR error.
Guido van Rossum <guido@python.org>
parents:
10734
diff
changeset
|
936 } |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
937 } |
|
6548
dd1e83323c45
Move the Py_{{BEGIN,END}_ALLOW,BLOCK}_THREADS macros in time_sleep()
Guido van Rossum <guido@python.org>
parents:
6459
diff
changeset
|
938 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
|
939 #elif defined(__WATCOMC__) && !defined(__QNX__) |
| 3592 | 940 /* XXX Can't interrupt this sleep */ |
|
6548
dd1e83323c45
Move the Py_{{BEGIN,END}_ALLOW,BLOCK}_THREADS macros in time_sleep()
Guido van Rossum <guido@python.org>
parents:
6459
diff
changeset
|
941 Py_BEGIN_ALLOW_THREADS |
| 3592 | 942 delay((int)(secs * 1000 + 0.5)); /* delay() uses milliseconds */ |
|
6548
dd1e83323c45
Move the Py_{{BEGIN,END}_ALLOW,BLOCK}_THREADS macros in time_sleep()
Guido van Rossum <guido@python.org>
parents:
6459
diff
changeset
|
943 Py_END_ALLOW_THREADS |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
23832
diff
changeset
|
944 #elif defined(MS_WINDOWS) |
|
13154
357b71c6933b
Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents:
13152
diff
changeset
|
945 { |
|
357b71c6933b
Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents:
13152
diff
changeset
|
946 double millisecs = secs * 1000.0; |
|
27294
7055f4c1edcc
Windows flavor of floatsleep(): folded long lines, introduced a temp
Tim Peters <tim.peters@gmail.com>
parents:
27281
diff
changeset
|
947 unsigned long ul_millis; |
|
7055f4c1edcc
Windows flavor of floatsleep(): folded long lines, introduced a temp
Tim Peters <tim.peters@gmail.com>
parents:
27281
diff
changeset
|
948 |
|
13154
357b71c6933b
Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents:
13152
diff
changeset
|
949 if (millisecs > (double)ULONG_MAX) { |
|
27294
7055f4c1edcc
Windows flavor of floatsleep(): folded long lines, introduced a temp
Tim Peters <tim.peters@gmail.com>
parents:
27281
diff
changeset
|
950 PyErr_SetString(PyExc_OverflowError, |
|
7055f4c1edcc
Windows flavor of floatsleep(): folded long lines, introduced a temp
Tim Peters <tim.peters@gmail.com>
parents:
27281
diff
changeset
|
951 "sleep length is too large"); |
|
13154
357b71c6933b
Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents:
13152
diff
changeset
|
952 return -1; |
|
357b71c6933b
Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents:
13152
diff
changeset
|
953 } |
|
357b71c6933b
Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents:
13152
diff
changeset
|
954 Py_BEGIN_ALLOW_THREADS |
|
27294
7055f4c1edcc
Windows flavor of floatsleep(): folded long lines, introduced a temp
Tim Peters <tim.peters@gmail.com>
parents:
27281
diff
changeset
|
955 /* Allow sleep(0) to maintain win32 semantics, and as decreed |
|
7055f4c1edcc
Windows flavor of floatsleep(): folded long lines, introduced a temp
Tim Peters <tim.peters@gmail.com>
parents:
27281
diff
changeset
|
956 * by Guido, only the main thread can be interrupted. |
|
7055f4c1edcc
Windows flavor of floatsleep(): folded long lines, introduced a temp
Tim Peters <tim.peters@gmail.com>
parents:
27281
diff
changeset
|
957 */ |
|
7055f4c1edcc
Windows flavor of floatsleep(): folded long lines, introduced a temp
Tim Peters <tim.peters@gmail.com>
parents:
27281
diff
changeset
|
958 ul_millis = (unsigned long)millisecs; |
|
7055f4c1edcc
Windows flavor of floatsleep(): folded long lines, introduced a temp
Tim Peters <tim.peters@gmail.com>
parents:
27281
diff
changeset
|
959 if (ul_millis == 0 || |
|
7055f4c1edcc
Windows flavor of floatsleep(): folded long lines, introduced a temp
Tim Peters <tim.peters@gmail.com>
parents:
27281
diff
changeset
|
960 main_thread != PyThread_get_thread_ident()) |
|
7055f4c1edcc
Windows flavor of floatsleep(): folded long lines, introduced a temp
Tim Peters <tim.peters@gmail.com>
parents:
27281
diff
changeset
|
961 Sleep(ul_millis); |
|
24243
c423a88b22ce
Fix bug 581232 - [Windows] Can not interrupt time.sleep()
Mark Hammond <mhammond@skippinet.com.au>
parents:
24071
diff
changeset
|
962 else { |
|
c423a88b22ce
Fix bug 581232 - [Windows] Can not interrupt time.sleep()
Mark Hammond <mhammond@skippinet.com.au>
parents:
24071
diff
changeset
|
963 DWORD rc; |
|
c423a88b22ce
Fix bug 581232 - [Windows] Can not interrupt time.sleep()
Mark Hammond <mhammond@skippinet.com.au>
parents:
24071
diff
changeset
|
964 ResetEvent(hInterruptEvent); |
|
27294
7055f4c1edcc
Windows flavor of floatsleep(): folded long lines, introduced a temp
Tim Peters <tim.peters@gmail.com>
parents:
27281
diff
changeset
|
965 rc = WaitForSingleObject(hInterruptEvent, ul_millis); |
|
7055f4c1edcc
Windows flavor of floatsleep(): folded long lines, introduced a temp
Tim Peters <tim.peters@gmail.com>
parents:
27281
diff
changeset
|
966 if (rc == WAIT_OBJECT_0) { |
|
7055f4c1edcc
Windows flavor of floatsleep(): folded long lines, introduced a temp
Tim Peters <tim.peters@gmail.com>
parents:
27281
diff
changeset
|
967 /* Yield to make sure real Python signal |
|
7055f4c1edcc
Windows flavor of floatsleep(): folded long lines, introduced a temp
Tim Peters <tim.peters@gmail.com>
parents:
27281
diff
changeset
|
968 * handler called. |
|
7055f4c1edcc
Windows flavor of floatsleep(): folded long lines, introduced a temp
Tim Peters <tim.peters@gmail.com>
parents:
27281
diff
changeset
|
969 */ |
|
24243
c423a88b22ce
Fix bug 581232 - [Windows] Can not interrupt time.sleep()
Mark Hammond <mhammond@skippinet.com.au>
parents:
24071
diff
changeset
|
970 Sleep(1); |
|
c423a88b22ce
Fix bug 581232 - [Windows] Can not interrupt time.sleep()
Mark Hammond <mhammond@skippinet.com.au>
parents:
24071
diff
changeset
|
971 Py_BLOCK_THREADS |
|
c423a88b22ce
Fix bug 581232 - [Windows] Can not interrupt time.sleep()
Mark Hammond <mhammond@skippinet.com.au>
parents:
24071
diff
changeset
|
972 errno = EINTR; |
|
c423a88b22ce
Fix bug 581232 - [Windows] Can not interrupt time.sleep()
Mark Hammond <mhammond@skippinet.com.au>
parents:
24071
diff
changeset
|
973 PyErr_SetFromErrno(PyExc_IOError); |
|
c423a88b22ce
Fix bug 581232 - [Windows] Can not interrupt time.sleep()
Mark Hammond <mhammond@skippinet.com.au>
parents:
24071
diff
changeset
|
974 return -1; |
|
c423a88b22ce
Fix bug 581232 - [Windows] Can not interrupt time.sleep()
Mark Hammond <mhammond@skippinet.com.au>
parents:
24071
diff
changeset
|
975 } |
|
c423a88b22ce
Fix bug 581232 - [Windows] Can not interrupt time.sleep()
Mark Hammond <mhammond@skippinet.com.au>
parents:
24071
diff
changeset
|
976 } |
|
13154
357b71c6933b
Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents:
13152
diff
changeset
|
977 Py_END_ALLOW_THREADS |
|
357b71c6933b
Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents:
13152
diff
changeset
|
978 } |
|
21738
ca1b67f5a3ec
Patch #504225: add plan9 ifdef to timemodule floatsleep.
Martin v. Löwis <martin@v.loewis.de>
parents:
21712
diff
changeset
|
979 #elif defined(PYOS_OS2) |
|
6626
5e31d381fa47
os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents:
6548
diff
changeset
|
980 /* This Sleep *IS* Interruptable by Exceptions */ |
|
6973
bbad2c684ad7
At Jeff Rush' request, add Py_BEGIN/END_ALLOW_THREADS around call to
Guido van Rossum <guido@python.org>
parents:
6785
diff
changeset
|
981 Py_BEGIN_ALLOW_THREADS |
|
6626
5e31d381fa47
os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents:
6548
diff
changeset
|
982 if (DosSleep(secs * 1000) != NO_ERROR) { |
|
6973
bbad2c684ad7
At Jeff Rush' request, add Py_BEGIN/END_ALLOW_THREADS around call to
Guido van Rossum <guido@python.org>
parents:
6785
diff
changeset
|
983 Py_BLOCK_THREADS |
|
6626
5e31d381fa47
os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents:
6548
diff
changeset
|
984 PyErr_SetFromErrno(PyExc_IOError); |
|
5e31d381fa47
os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents:
6548
diff
changeset
|
985 return -1; |
|
5e31d381fa47
os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents:
6548
diff
changeset
|
986 } |
|
6973
bbad2c684ad7
At Jeff Rush' request, add Py_BEGIN/END_ALLOW_THREADS around call to
Guido van Rossum <guido@python.org>
parents:
6785
diff
changeset
|
987 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
|
988 #elif defined(__BEOS__) |
|
8823
f2a4a2b60860
Changes for BeOS, QNX and long long, by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
8568
diff
changeset
|
989 /* This sleep *CAN BE* interrupted. */ |
|
f2a4a2b60860
Changes for BeOS, QNX and long long, by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
8568
diff
changeset
|
990 { |
|
f2a4a2b60860
Changes for BeOS, QNX and long long, by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
8568
diff
changeset
|
991 if( secs <= 0.0 ) { |
|
f2a4a2b60860
Changes for BeOS, QNX and long long, by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
8568
diff
changeset
|
992 return; |
|
f2a4a2b60860
Changes for BeOS, QNX and long long, by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
8568
diff
changeset
|
993 } |
|
20080
f48a41c97021
SF patch #459385 (Norman Vine): time.timezone fix for Cygwin.
Guido van Rossum <guido@python.org>
parents:
19426
diff
changeset
|
994 |
|
8823
f2a4a2b60860
Changes for BeOS, QNX and long long, by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
8568
diff
changeset
|
995 Py_BEGIN_ALLOW_THREADS |
|
10362
1409e7687a9a
Patch by Chris Herborth for BeOS code.
Guido van Rossum <guido@python.org>
parents:
10275
diff
changeset
|
996 /* BeOS snooze() is in microseconds... */ |
|
1409e7687a9a
Patch by Chris Herborth for BeOS code.
Guido van Rossum <guido@python.org>
parents:
10275
diff
changeset
|
997 if( snooze( (bigtime_t)( secs * 1000.0 * 1000.0 ) ) == B_INTERRUPTED ) { |
|
8823
f2a4a2b60860
Changes for BeOS, QNX and long long, by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
8568
diff
changeset
|
998 Py_BLOCK_THREADS |
|
f2a4a2b60860
Changes for BeOS, QNX and long long, by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
8568
diff
changeset
|
999 PyErr_SetFromErrno( PyExc_IOError ); |
|
f2a4a2b60860
Changes for BeOS, QNX and long long, by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
8568
diff
changeset
|
1000 return -1; |
|
f2a4a2b60860
Changes for BeOS, QNX and long long, by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
8568
diff
changeset
|
1001 } |
|
f2a4a2b60860
Changes for BeOS, QNX and long long, by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
8568
diff
changeset
|
1002 Py_END_ALLOW_THREADS |
|
f2a4a2b60860
Changes for BeOS, QNX and long long, by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
8568
diff
changeset
|
1003 } |
|
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(RISCOS) |
|
17396
beb9d2b02846
Updated version of RISCOS support. SF patch 411213 by Dietmar Schwertberger
Guido van Rossum <guido@python.org>
parents:
17079
diff
changeset
|
1005 if (secs <= 0.0) |
|
beb9d2b02846
Updated version of RISCOS support. SF patch 411213 by Dietmar Schwertberger
Guido van Rossum <guido@python.org>
parents:
17079
diff
changeset
|
1006 return 0; |
|
beb9d2b02846
Updated version of RISCOS support. SF patch 411213 by Dietmar Schwertberger
Guido van Rossum <guido@python.org>
parents:
17079
diff
changeset
|
1007 Py_BEGIN_ALLOW_THREADS |
|
beb9d2b02846
Updated version of RISCOS support. SF patch 411213 by Dietmar Schwertberger
Guido van Rossum <guido@python.org>
parents:
17079
diff
changeset
|
1008 /* This sleep *CAN BE* interrupted. */ |
|
29066
90342f395721
Patch #734231: Update RiscOS support. In particular, correct
Martin v. Löwis <martin@v.loewis.de>
parents:
28569
diff
changeset
|
1009 if ( riscos_sleep(secs) ) |
|
17396
beb9d2b02846
Updated version of RISCOS support. SF patch 411213 by Dietmar Schwertberger
Guido van Rossum <guido@python.org>
parents:
17079
diff
changeset
|
1010 return -1; |
|
beb9d2b02846
Updated version of RISCOS support. SF patch 411213 by Dietmar Schwertberger
Guido van Rossum <guido@python.org>
parents:
17079
diff
changeset
|
1011 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
|
1012 #elif defined(PLAN9) |
|
ca1b67f5a3ec
Patch #504225: add plan9 ifdef to timemodule floatsleep.
Martin v. Löwis <martin@v.loewis.de>
parents:
21712
diff
changeset
|
1013 { |
|
ca1b67f5a3ec
Patch #504225: add plan9 ifdef to timemodule floatsleep.
Martin v. Löwis <martin@v.loewis.de>
parents:
21712
diff
changeset
|
1014 double millisecs = secs * 1000.0; |
|
ca1b67f5a3ec
Patch #504225: add plan9 ifdef to timemodule floatsleep.
Martin v. Löwis <martin@v.loewis.de>
parents:
21712
diff
changeset
|
1015 if (millisecs > (double)LONG_MAX) { |
|
ca1b67f5a3ec
Patch #504225: add plan9 ifdef to timemodule floatsleep.
Martin v. Löwis <martin@v.loewis.de>
parents:
21712
diff
changeset
|
1016 PyErr_SetString(PyExc_OverflowError, "sleep length is too large"); |
|
ca1b67f5a3ec
Patch #504225: add plan9 ifdef to timemodule floatsleep.
Martin v. Löwis <martin@v.loewis.de>
parents:
21712
diff
changeset
|
1017 return -1; |
|
ca1b67f5a3ec
Patch #504225: add plan9 ifdef to timemodule floatsleep.
Martin v. Löwis <martin@v.loewis.de>
parents:
21712
diff
changeset
|
1018 } |
|
ca1b67f5a3ec
Patch #504225: add plan9 ifdef to timemodule floatsleep.
Martin v. Löwis <martin@v.loewis.de>
parents:
21712
diff
changeset
|
1019 /* This sleep *CAN BE* interrupted. */ |
|
ca1b67f5a3ec
Patch #504225: add plan9 ifdef to timemodule floatsleep.
Martin v. Löwis <martin@v.loewis.de>
parents:
21712
diff
changeset
|
1020 Py_BEGIN_ALLOW_THREADS |
|
ca1b67f5a3ec
Patch #504225: add plan9 ifdef to timemodule floatsleep.
Martin v. Löwis <martin@v.loewis.de>
parents:
21712
diff
changeset
|
1021 if(sleep((long)millisecs) < 0){ |
|
ca1b67f5a3ec
Patch #504225: add plan9 ifdef to timemodule floatsleep.
Martin v. Löwis <martin@v.loewis.de>
parents:
21712
diff
changeset
|
1022 Py_BLOCK_THREADS |
|
ca1b67f5a3ec
Patch #504225: add plan9 ifdef to timemodule floatsleep.
Martin v. Löwis <martin@v.loewis.de>
parents:
21712
diff
changeset
|
1023 PyErr_SetFromErrno(PyExc_IOError); |
|
ca1b67f5a3ec
Patch #504225: add plan9 ifdef to timemodule floatsleep.
Martin v. Löwis <martin@v.loewis.de>
parents:
21712
diff
changeset
|
1024 return -1; |
|
ca1b67f5a3ec
Patch #504225: add plan9 ifdef to timemodule floatsleep.
Martin v. Löwis <martin@v.loewis.de>
parents:
21712
diff
changeset
|
1025 } |
|
ca1b67f5a3ec
Patch #504225: add plan9 ifdef to timemodule floatsleep.
Martin v. Löwis <martin@v.loewis.de>
parents:
21712
diff
changeset
|
1026 Py_END_ALLOW_THREADS |
|
ca1b67f5a3ec
Patch #504225: add plan9 ifdef to timemodule floatsleep.
Martin v. Löwis <martin@v.loewis.de>
parents:
21712
diff
changeset
|
1027 } |
|
ca1b67f5a3ec
Patch #504225: add plan9 ifdef to timemodule floatsleep.
Martin v. Löwis <martin@v.loewis.de>
parents:
21712
diff
changeset
|
1028 #else |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
1029 /* XXX Can't interrupt this sleep */ |
|
6548
dd1e83323c45
Move the Py_{{BEGIN,END}_ALLOW,BLOCK}_THREADS macros in time_sleep()
Guido van Rossum <guido@python.org>
parents:
6459
diff
changeset
|
1030 Py_BEGIN_ALLOW_THREADS |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
1031 sleep((int)secs); |
|
6548
dd1e83323c45
Move the Py_{{BEGIN,END}_ALLOW,BLOCK}_THREADS macros in time_sleep()
Guido van Rossum <guido@python.org>
parents:
6459
diff
changeset
|
1032 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
|
1033 #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
|
1034 |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
1035 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
|
1036 } |
|
28299
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
1037 |
|
14316df1c298
- New function time.tzset() provides access to the C library tzet()
Guido van Rossum <guido@python.org>
parents:
27294
diff
changeset
|
1038 |
