diff options
Diffstat (limited to 'net-mail/qmailanalog/files')
-rw-r--r-- | net-mail/qmailanalog/files/0.70-errno.patch | 11 | ||||
-rw-r--r-- | net-mail/qmailanalog/files/tai64nfrac.c | 66 |
2 files changed, 77 insertions, 0 deletions
diff --git a/net-mail/qmailanalog/files/0.70-errno.patch b/net-mail/qmailanalog/files/0.70-errno.patch new file mode 100644 index 000000000000..4aca1b2b4e58 --- /dev/null +++ b/net-mail/qmailanalog/files/0.70-errno.patch @@ -0,0 +1,11 @@ +--- error.h.orig 2003-03-05 15:42:51.000000000 -0500 ++++ error.h 2003-03-05 15:43:00.000000000 -0500 +@@ -1,7 +1,7 @@ + #ifndef ERROR_H + #define ERROR_H + +-extern int errno; ++#include <errno.h> + + extern int error_intr; + extern int error_nomem; 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 <rra@stanford.edu> + 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 <stdio.h> + +/* 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(); + } + } +} |