diff options
author | Paul Ingram <pingram@nicira.com> | 2013-09-12 18:19:04 -0700 |
---|---|---|
committer | Ben Pfaff <blp@nicira.com> | 2013-09-13 09:11:46 -0700 |
commit | 2b31d8e713de705fdca1c412d4748077f85e4009 (patch) | |
tree | 7f0babf08dd16c1fbb411a1c16bf6e055aa88294 /lib/timeval.c | |
parent | 63a04c1b5fdbf5a0acfe7e39f27445dd5008c45f (diff) | |
download | openvswitch-2b31d8e713de705fdca1c412d4748077f85e4009.tar.gz |
vlog: Report timestamps in millisecond resolution in log messages.
To make debugging easier.
Signed-off-by: Ben Pfaff <blp@nicira.com>
Signed-off-by: Paul Ingram <pingram@nicira.com>
Diffstat (limited to 'lib/timeval.c')
-rw-r--r-- | lib/timeval.c | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/lib/timeval.c b/lib/timeval.c index 326239744..c24788ab3 100644 --- a/lib/timeval.c +++ b/lib/timeval.c @@ -494,3 +494,49 @@ timeval_dummy_register(void) unixctl_command_register("time/warp", "MSECS", 1, 1, timeval_warp_cb, NULL); } + + + +/* strftime() with an extension for high-resolution timestamps. Any '#'s in + * 'format' will be replaced by subseconds, e.g. use "%S.###" to obtain results + * like "01.123". */ +size_t +strftime_msec(char *s, size_t max, const char *format, + const struct tm_msec *tm) +{ + size_t n; + + n = strftime(s, max, format, &tm->tm); + if (n) { + char decimals[4]; + char *p; + + sprintf(decimals, "%03d", tm->msec); + for (p = strchr(s, '#'); p; p = strchr(p, '#')) { + char *d = decimals; + while (*p == '#') { + *p++ = *d ? *d++ : '0'; + } + } + } + + return n; +} + +struct tm_msec * +localtime_msec(long long int now, struct tm_msec *result) +{ + time_t now_sec = now / 1000; + localtime_r(&now_sec, &result->tm); + result->msec = now % 1000; + return result; +} + +struct tm_msec * +gmtime_msec(long long int now, struct tm_msec *result) +{ + time_t now_sec = now / 1000; + gmtime_r(&now_sec, &result->tm); + result->msec = now % 1000; + return result; +} |