Fix and clean up strtotimeval

- parsing of fractional part was wrong (always parsed as 0)
- return value was also wrong in the presence of fractional parts
- general style clean up

Change-Id: I1935a63db938dbed7cacb4b5646e993a52c27f1a
Signed-off-by: Weichuan Yan <wchyan@marvell.com>
This commit is contained in:
Weichuan Yan 2014-03-26 03:41:15 +00:00 committed by Calin Juravle
parent 4bfaf462f0
commit f1d7536dcf
1 changed files with 20 additions and 25 deletions

View File

@ -30,34 +30,29 @@
#include <stdlib.h>
#include <sys/time.h>
char * strtotimeval (const char *str, struct timeval *ts)
{
int n;
char *s, *s0;
long fs; /* Fractional seconds */
char * strtotimeval(const char *str, struct timeval *ts) {
char *s;
long fs = 0; /* fractional seconds */
ts->tv_sec = strtoumax(str, &s, 10);
fs = 0;
ts->tv_sec = strtoumax(str, &s, 10);
if ( *s == '.' ) {
int count;
if (*s == '.') {
s++;
int count = 0;
s0 = s+1;
/* read up to 6 digits */
fs = 0;
count = 0;
while ( *s && isdigit(*s) )
{
if ( ++count < 7 )
fs = fs*10 + (*s - '0');
s++;
}
for ( ; count < 6; count++ )
fs *= 10;
/* read up to 6 digits (microseconds) */
while (*s && isdigit(*s)) {
if (++count < 7) {
fs = fs*10 + (*s - '0');
}
s++;
}
ts->tv_usec = fs;
return s;
for (; count < 6; count++) {
fs *= 10;
}
}
ts->tv_usec = fs;
return s;
}