summaryrefslogtreecommitdiffstats
path: root/sysdep/unix
diff options
context:
space:
mode:
Diffstat (limited to 'sysdep/unix')
-rw-r--r--sysdep/unix/io.c27
-rw-r--r--sysdep/unix/timer.h4
2 files changed, 31 insertions, 0 deletions
diff --git a/sysdep/unix/io.c b/sysdep/unix/io.c
index 6d44f80..39cf200 100644
--- a/sysdep/unix/io.c
+++ b/sysdep/unix/io.c
@@ -217,6 +217,33 @@ tm_shot(void)
}
}
+bird_clock_t
+tm_parse_date(char *x)
+{
+ struct tm tm;
+ int n;
+ time_t t;
+
+ if (sscanf(x, "%d-%d-%d%n", &tm.tm_mday, &tm.tm_mon, &tm.tm_year, &n) != 3 || x[n])
+ return 0;
+ tm.tm_mon--;
+ tm.tm_year -= 1900;
+ tm.tm_hour = tm.tm_min = tm.tm_sec = 0;
+ t = mktime(&tm);
+ if (t == (time_t) -1)
+ return 0;
+ return t;
+}
+
+void
+tm_format_date(char *x, bird_clock_t t)
+{
+ struct tm *tm;
+
+ tm = localtime(&t);
+ sprintf(x, "%02d-%02d-%04d", tm->tm_mday, tm->tm_mon+1, tm->tm_year+1900);
+}
+
/*
* Sockets
*/
diff --git a/sysdep/unix/timer.h b/sysdep/unix/timer.h
index 10351a6..afb2668 100644
--- a/sysdep/unix/timer.h
+++ b/sysdep/unix/timer.h
@@ -32,4 +32,8 @@ void tm_dump_all(void);
extern bird_clock_t now; /* Time in seconds since unknown epoch */
+bird_clock_t tm_parse_date(char *); /* Convert date to bird_clock_t */
+void tm_format_date(char *, bird_clock_t); /* Convert bird_clock_t to date */
+#define TM_DATE_BUFFER_SIZE 12 /* Buffer size required by tm_format_date */
+
#endif