summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
Diffstat (limited to 'Modules')
-rw-r--r--Modules/timemodule.c110
1 files changed, 60 insertions, 50 deletions
diff --git a/Modules/timemodule.c b/Modules/timemodule.c
index 3df0885..097c4da 100644
--- a/Modules/timemodule.c
+++ b/Modules/timemodule.c
@@ -71,13 +71,6 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
#include <time.h>
#endif /* !unix */
-/* XXX This is bogus -- times() is defined in posixmodule.c */
-#ifdef DO_TIMES
-#include <sys/times.h>
-#include <sys/param.h>
-#include <errno.h>
-#endif
-
#ifdef SYSV
/* Access timezone stuff */
#ifdef OLDTZ /* ANSI prepends underscore to these */
@@ -227,32 +220,6 @@ time_millitimer(self, args)
#endif /* DO_MILLI */
-#ifdef DO_TIMES
-
-static object *
-time_times(self, args)
- object *self;
- object *args;
-{
- struct tms t;
- clock_t c;
- if (!getnoarg(args))
- return NULL;
- errno = 0;
- c = times(&t);
- if (c == (clock_t) -1) {
- err_errno(IOError);
- return NULL;
- }
- return mkvalue("(dddd)",
- (double)t.tms_utime / HZ,
- (double)t.tms_stime / HZ,
- (double)t.tms_cutime / HZ,
- (double)t.tms_cstime / HZ);
-}
-
-#endif
-
static object *
time_convert(when, function)
@@ -268,7 +235,7 @@ time_convert(when, function)
p->tm_min,
p->tm_sec,
(p->tm_wday + 6) % 7, /* Want Monday == 0 */
- p->tm_yday,
+ p->tm_yday + 1, /* Want January, 1 == 1 */
p->tm_isdst);
}
@@ -294,6 +261,62 @@ time_localtime(self, args)
return time_convert((time_t)when, localtime);
}
+static int
+gettmarg(args, p)
+ object *args;
+ struct tm *p;
+{
+ if (!getargs(args, "(iiiiiiiii)",
+ &p->tm_year,
+ &p->tm_mon,
+ &p->tm_mday,
+ &p->tm_hour,
+ &p->tm_min,
+ &p->tm_sec,
+ &p->tm_wday,
+ &p->tm_yday,
+ &p->tm_isdst))
+ return 0;
+ if (p->tm_year >= 1900)
+ p->tm_year -= 1900;
+ p->tm_mon--;
+ p->tm_wday = (p->tm_wday + 1) % 7;
+ p->tm_yday--;
+ return 1;
+}
+
+static object *
+time_asctime(self, args)
+ object *self;
+ object *args;
+{
+ struct tm buf;
+ char *p;
+ if (!gettmarg(args, &buf))
+ return NULL;
+ p = asctime(&buf);
+ if (p[24] == '\n')
+ p[24] = '\0';
+ return newstringobject(p);
+}
+
+static object *
+time_ctime(self, args)
+ object *self;
+ object *args;
+{
+ double dt;
+ time_t tt;
+ char *p;
+ if (!getargs(args, "d", &dt))
+ return NULL;
+ tt = dt;
+ p = ctime(&tt);
+ if (p[24] == '\n')
+ p[24] = '\0';
+ return newstringobject(p);
+}
+
/* Some very old systems may not have mktime(). Comment it out then! */
static object *
@@ -302,20 +325,8 @@ time_mktime(self, args)
object *args;
{
struct tm buf;
- if (!getargs(args, "(iiiiiiiii)",
- &buf.tm_year,
- &buf.tm_mon,
- &buf.tm_mday,
- &buf.tm_hour,
- &buf.tm_min,
- &buf.tm_sec,
- &buf.tm_wday,
- &buf.tm_yday,
- &buf.tm_isdst))
+ if (!gettmarg(args, &buf))
return NULL;
- if (buf.tm_year >= 1900)
- buf.tm_year -= 1900;
- buf.tm_mon--;
return newintobject((long)mktime(&buf));
}
@@ -324,13 +335,12 @@ static struct methodlist time_methods[] = {
{"millisleep", time_millisleep},
{"millitimer", time_millitimer},
#endif /* DO_MILLI */
-#ifdef DO_TIMES
- {"times", time_times},
-#endif
{"sleep", time_sleep},
{"time", time_time},
{"gmtime", time_gmtime},
{"localtime", time_localtime},
+ {"asctime", time_asctime},
+ {"ctime", time_ctime},
{"mktime", time_mktime},
{NULL, NULL} /* sentinel */
};