diff --git a/libc/Makefile b/libc/Makefile
index bc6aeb50..d9a268a2 100644
--- a/libc/Makefile
+++ b/libc/Makefile
@@ -120,6 +120,8 @@ strstr.o \
strtok.o \
strtok_r.o \
strxfrm.o \
+time/asctime.o \
+time/asctime_r.o \
timespec.o \
time/strftime.o \
ungetc.o \
diff --git a/libc/time/asctime.cpp b/libc/time/asctime.cpp
new file mode 100644
index 00000000..f0c6bc14
--- /dev/null
+++ b/libc/time/asctime.cpp
@@ -0,0 +1,36 @@
+/*******************************************************************************
+
+ Copyright(C) Jonas 'Sortie' Termansen 2013.
+
+ This file is part of the Sortix C Library.
+
+ The Sortix C Library is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or (at your
+ option) any later version.
+
+ The Sortix C Library is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+ License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with the Sortix C Library. If not, see .
+
+ time/asctime.cpp
+ Convert date and time to a string.
+
+*******************************************************************************/
+
+#include
+#include
+#include
+
+// TODO: Oh god. This function is horrible! It's obsolescent in POSIX - but it's
+// still widely used and I need it at the moment to port software. Please
+// do remove this function when all the calls to it has been purged.
+extern "C" char* asctime(const struct tm* tm)
+{
+ static char buf[26];
+ return asctime_r(tm, buf);
+}
diff --git a/libc/time/asctime_r.cpp b/libc/time/asctime_r.cpp
new file mode 100644
index 00000000..4d4043a6
--- /dev/null
+++ b/libc/time/asctime_r.cpp
@@ -0,0 +1,72 @@
+/*******************************************************************************
+
+ Copyright(C) Jonas 'Sortie' Termansen 2013.
+
+ This file is part of the Sortix C Library.
+
+ The Sortix C Library is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or (at your
+ option) any later version.
+
+ The Sortix C Library is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+ License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with the Sortix C Library. If not, see .
+
+ time/asctime_r.cpp
+ Convert date and time to a string.
+
+*******************************************************************************/
+
+#include
+#include
+#include
+
+// TODO: Oh god. This function is horrible! It's obsolescent in POSIX - but it's
+// still widely used and I need it at the moment to port software. Please
+// do remove this function when all the calls to it has been purged.
+extern "C" char* asctime_r(const struct tm* tm, char* buf)
+{
+ static char wday_names[7][4] =
+ {
+ "Sun",
+ "Mon",
+ "Tue",
+ "Wed",
+ "Thu",
+ "Fri",
+ "Sat"
+ };
+ static char mon_names[12][4] =
+ {
+ "Jan",
+ "Feb",
+ "Mar",
+ "Apr",
+ "May",
+ "Jun",
+ "Jul",
+ "Aug",
+ "Sep",
+ "Oct",
+ "Nov",
+ "Dec",
+ };
+
+ // TODO: This is not exactly the same as in POSIX because printf currently
+ // doesn't support precision ('.'), only field width.
+ int bytes = sprintf(buf, "%s %s%3d %02d:%02d%02d %d\n",
+ wday_names[tm->tm_wday],
+ mon_names[tm->tm_mon],
+ tm->tm_mday,
+ tm->tm_hour,
+ tm->tm_min,
+ tm->tm_sec,
+ tm->tm_year + 1900);
+ assert(bytes+1 <= 26);
+ return buf;
+}