summaryrefslogtreecommitdiffstats
path: root/sysdep
diff options
context:
space:
mode:
Diffstat (limited to 'sysdep')
-rw-r--r--sysdep/unix/io.c19
-rw-r--r--sysdep/unix/timer.h2
2 files changed, 21 insertions, 0 deletions
diff --git a/sysdep/unix/io.c b/sysdep/unix/io.c
index 511c949..f465da4 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 482f531..242b330 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