diff options
Diffstat (limited to 'sysdep')
-rw-r--r-- | sysdep/unix/io.c | 27 | ||||
-rw-r--r-- | sysdep/unix/timer.h | 4 |
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 |