From 4f2d7949f03e1c198bc888f2d05f421d35c57e21 Mon Sep 17 00:00:00 2001 From: V3n3RiX Date: Mon, 9 Oct 2017 18:53:29 +0100 Subject: reinit the tree, so we can have metadata --- net-mail/qmailanalog/files/tai64nfrac.c | 66 +++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 net-mail/qmailanalog/files/tai64nfrac.c (limited to 'net-mail/qmailanalog/files/tai64nfrac.c') diff --git a/net-mail/qmailanalog/files/tai64nfrac.c b/net-mail/qmailanalog/files/tai64nfrac.c new file mode 100644 index 000000000000..28e6cdbb8754 --- /dev/null +++ b/net-mail/qmailanalog/files/tai64nfrac.c @@ -0,0 +1,66 @@ +/* + Convert external TAI64N timestamps to fractional seconds since epoch. + + Written by Russ Allbery + This work is in the public domain. + +Usage: + +tai64nfrac < input > output + +Expects the input stream to be a sequence of lines beginning with @, a +timestamp in external TAI64N format, and a space. Replaces the @ and the +timestamp with fractional seconds since epoch (1970-01-01 00:00:00 UTC). +The input time format is the format written by tai64n and multilog. The +output time format is expected by qmailanalog. */ + +#include + +/* Read a TAI64N external format timestamp from stdin and write fractional + seconds since epoch (TAI, not UTC) to stdout. Return the character after + the timestamp. */ +int decode(void) +{ + int c; + unsigned long u; + unsigned long seconds = 0; + unsigned long nanoseconds = 0; + + while ((c = getchar()) != EOF) + { + u = c - '0'; + if (u >= 10) + { + u = c - 'a'; + if (u >= 6) break; + u += 10; + } + seconds <<= 4; + seconds += nanoseconds >> 28; + nanoseconds &= 0xfffffff; + nanoseconds <<= 4; + nanoseconds += u; + } + seconds -= 4611686018427387914ULL; + printf("%lu.%lu ", seconds, nanoseconds); + return c; +} + + +int main(void) +{ + int c; + unsigned long seconds; + unsigned long nanoseconds; + + while ((c = getchar()) != EOF) + { + if (c == '@') c = decode(); + while (c != EOF) + { + putchar(c); + if (c == '\n') break; + c = getchar(); + } + } +} -- cgit v1.2.3