diff options
Diffstat (limited to 'sysdep/unix')
-rw-r--r-- | sysdep/unix/io.c | 19 | ||||
-rw-r--r-- | sysdep/unix/timer.h | 2 |
2 files changed, 21 insertions, 0 deletions
diff --git a/sysdep/unix/io.c b/sysdep/unix/io.c index 511c9497..f465da45 100644 --- a/sysdep/unix/io.c +++ b/sysdep/unix/io.c @@ -27,6 +27,7 @@ #include "lib/timer.h" #include "lib/socket.h" #include "lib/event.h" +#include "lib/string.h" #include "nest/iface.h" #ifdef IPV6 @@ -253,6 +254,24 @@ tm_format_date(char *x, bird_clock_t t) sprintf(x, "%02d-%02d-%04d", tm->tm_mday, tm->tm_mon+1, tm->tm_year+1900); } +void +tm_format_reltime(char *x, bird_clock_t t) +{ + struct tm *tm; + bird_clock_t delta = now - t; + static char *month_names[12] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; + + tm = localtime(&t); + if (delta < 0) + strcpy(x, "?fut?"); + else if (delta < 20*3600) + bsprintf(x, "%02d:%02d", tm->tm_hour, tm->tm_min); + else if (delta < 360*86400) + bsprintf(x, "%s%02d", month_names[tm->tm_mon], tm->tm_mday); + else + bsprintf(x, "%d", tm->tm_year+1900); +} + /* * Sockets */ diff --git a/sysdep/unix/timer.h b/sysdep/unix/timer.h index 482f531c..242b330b 100644 --- a/sysdep/unix/timer.h +++ b/sysdep/unix/timer.h @@ -35,6 +35,8 @@ 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 */ +void tm_format_reltime(char *, bird_clock_t); /* Convert bird_clock_t to relative datetime string */ +#define TM_RELTIME_BUFFER_SIZE 12 /* Buffer size required by tm_format_time */ #ifdef TIME_T_IS_64BIT #define TIME_INFINITY 0x7fffffffffffffff |