--- util.c 2011-03-25 14:25:48.628685721 -0700 +++ FIXEDutil.c 2011-03-25 13:59:31.473809423 -0700 @@ -1948,13 +1948,11 @@ { "d", USEC_PER_DAY }, { "h", USEC_PER_HOUR }, { "min", USEC_PER_MINUTE }, - { "s", USEC_PER_SEC }, - { "ms", USEC_PER_MSEC }, - { "us", 1 }, }; unsigned i; char *p = buf; + int k; assert(buf); assert(l > 0); @@ -1971,7 +1969,6 @@ /* The result of this function can be parsed with parse_usec */ for (i = 0; i < ELEMENTSOF(table); i++) { - int k; size_t n; if (t < table[i].usec) @@ -1989,6 +1986,10 @@ t %= table[i].usec; } + /* We have left a value between 0 and 59,999,999 (that is, 0s and 59.999999s) */ + k = snprintf(p, l, "%s%llu.%06llus", p > buf ? " " : "", (unsigned long long) (t / USEC_PER_SEC), (unsigned long long) (t % USEC_PER_SEC)); + p += MIN((size_t) k, l); + *p = 0; return buf;