about summary refs log tree commit diff
path: root/src/time/timegm.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/time/timegm.c')
-rw-r--r--src/time/timegm.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/src/time/timegm.c b/src/time/timegm.c
index 6d08917e..7148fca3 100644
--- a/src/time/timegm.c
+++ b/src/time/timegm.c
@@ -1,9 +1,18 @@
 #define _GNU_SOURCE
-#include <time.h>
-
-#include "__time.h"
+#include "time_impl.h"
+#include <errno.h>
 
 time_t timegm(struct tm *tm)
 {
-	return __tm_to_time(tm);
+	struct tm new;
+	long long t = __tm_to_secs(tm);
+	if (__secs_to_tm(t, &new) < 0) {
+		errno = EINVAL;
+		return -1;
+	}
+	*tm = new;
+	tm->tm_isdst = 0;
+	tm->__tm_gmtoff = 0;
+	tm->__tm_zone = "GMT";
+	return t;
 }