summaryrefslogtreecommitdiffstats
path: root/mdk-stage1/dietlibc/libugly/mktime.c
diff options
context:
space:
mode:
Diffstat (limited to 'mdk-stage1/dietlibc/libugly/mktime.c')
-rw-r--r--mdk-stage1/dietlibc/libugly/mktime.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/mdk-stage1/dietlibc/libugly/mktime.c b/mdk-stage1/dietlibc/libugly/mktime.c
new file mode 100644
index 000000000..ee4dab6c1
--- /dev/null
+++ b/mdk-stage1/dietlibc/libugly/mktime.c
@@ -0,0 +1,21 @@
+#include <time.h>
+
+/* seconds per day */
+#define SPD 24*60*60
+
+extern unsigned int __spm[];
+
+time_t mktime(struct tm *t) {
+ time_t x=0;
+ unsigned int i;
+ if (t->tm_year<70) return (time_t)(-1);
+ for (i=70; i<t->tm_year; ++i) {
+ x+=__isleap(i+1900)?366:365;
+ }
+ t->tm_yday=__spm[t->tm_mon] + t->tm_mday-1 + ((t->tm_mon>2) && __isleap(t->tm_year)?1:0);
+ x+=t->tm_yday;
+ /* x is now the number of days since Jan 1 1970 */
+ t->tm_wday=(4+x)%7;
+ x = x*SPD + t->tm_hour*60*60 + t->tm_min*60 + t->tm_sec;
+ return x;
+}