Watcom changes.
Add mktime() overflow test and make it NeXT robust by initializing
the structure from localtime().
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 @@
#include <sys/timeb.h>
#endif
+#ifdef __WATCOMC__
+#include <i86.h>
+#else
#ifdef _M_IX86
#include <windows.h>
#define timezone _timezone
@@ -59,6 +62,7 @@
#define daylight _daylight
#define altzone _altzone
#endif
+#endif
/* Forward declarations */
static int floatsleep PROTO((double));
@@ -268,9 +272,17 @@
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 @@
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 @@
sleep((int)secs);
#endif /* _M_IX86 */
#endif /* !MSDOS */
+#endif /* !__WATCOMC__ */
#endif /* !macintosh */
#endif /* !HAVE_SELECT */
return 0;