diff options
author | Andrew J. Schorr <ajschorr@alumni.princeton.edu> | 2007-04-29 15:48:22 +0000 |
---|---|---|
committer | Andrew J. Schorr <ajschorr@alumni.princeton.edu> | 2007-04-29 15:48:22 +0000 |
commit | bcdda30bae1fef67d998211c54c06270ba42864c (patch) | |
tree | e4daad51d00adb3188154d9961f908aa7f204b90 /lib | |
parent | d3d7e237fdc661d1d1d00a8b43657d1d719410e6 (diff) |
[logging] Minor performance tweak
2007-04-29 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
* log.c: (quagga_timestamp) Optimize the subsecond timestamp generation.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/ChangeLog | 4 | ||||
-rw-r--r-- | lib/log.c | 25 |
2 files changed, 20 insertions, 9 deletions
diff --git a/lib/ChangeLog b/lib/ChangeLog index 3e515f87..f8fdd11e 100644 --- a/lib/ChangeLog +++ b/lib/ChangeLog @@ -1,3 +1,7 @@ +2007-04-29 Andrew J. Schorr <ajschorr@alumni.princeton.edu> + + * log.c: (quagga_timestamp) Optimize the subsecond timestamp generation. + 2007-04-28 Andrew J. Schorr <ajschorr@alumni.princeton.edu> * command.c: (config_write_host) Save "log timestamp precision" @@ -100,18 +100,25 @@ quagga_timestamp(int timestamp_precision, char *buf, size_t buflen) (buflen > cache.len+1+timestamp_precision)) { /* should we worry about locale issues? */ - long divisor = 100000; - char *p = buf+cache.len; - *p++ = '.'; + static const int divisor[] = {0, 100000, 10000, 1000, 100, 10, 1}; + int prec; + char *p = buf+cache.len+1+(prec = timestamp_precision); + *p-- = '\0'; + while (prec > 6) + /* this is unlikely to happen, but protect anyway */ + { + *p-- = '0'; + prec--; + } + clock.tv_usec /= divisor[prec]; do { - *p++ = '0'+(clock.tv_usec/divisor); - clock.tv_usec %= divisor; - divisor /= 10; + *p-- = '0'+(clock.tv_usec % 10); + clock.tv_usec /= 10; } - while (--timestamp_precision > 0); - *p = '\0'; - return p-buf; + while (--prec > 0); + *p = '.'; + return cache.len+1+timestamp_precision; } buf[cache.len] = '\0'; return cache.len; |