diff options
Diffstat (limited to 'Modules/timemodule.c')
-rw-r--r-- | Modules/timemodule.c | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/Modules/timemodule.c b/Modules/timemodule.c index ee3fb8d..d8c1b2b 100644 --- a/Modules/timemodule.c +++ b/Modules/timemodule.c @@ -52,6 +52,9 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include <sys/timeb.h> #endif +#ifdef __WATCOMC__ +#include <i86.h> +#else #ifdef _M_IX86 #include <windows.h> #define timezone _timezone @@ -59,6 +62,7 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #define daylight _daylight #define altzone _altzone #endif +#endif /* Forward declarations */ static int floatsleep PROTO((double)); @@ -268,9 +272,17 @@ time_mktime(self, args) object *args; { struct tm buf; + time_t tt; + tt = time(&tt); + buf = *localtime(&tt); if (!gettmarg(args, &buf)) return NULL; - return newintobject((long)mktime(&buf)); + tt = mktime(&buf); + if (tt == (time_t)(-1)) { + err_setstr(OverflowError, "mktime argument out of range"); + return NULL; + } + return newfloatobject((double)tt); } static struct methodlist time_methods[] = { @@ -423,6 +435,10 @@ floatsleep(secs) return -1; } #else /* !macintosh */ +#ifdef __WATCOMC__ + /* XXX Can't interrupt this sleep */ + delay((int)(secs * 1000 + 0.5)); /* delay() uses milliseconds */ +#else /* !__WATCOMC__ */ #ifdef MSDOS struct timeb t1, t2; double frac; @@ -459,6 +475,7 @@ floatsleep(secs) sleep((int)secs); #endif /* _M_IX86 */ #endif /* !MSDOS */ +#endif /* !__WATCOMC__ */ #endif /* !macintosh */ #endif /* !HAVE_SELECT */ return 0; |