diff options
| author | Elliott Hughes <enh@google.com> | 2014-04-07 22:31:18 +0000 |
|---|---|---|
| committer | Android Git Automerger <android-git-automerger@android.com> | 2014-04-07 22:31:18 +0000 |
| commit | 1a09a804ba0c96182e8193cb5e96090893ad9a7c (patch) | |
| tree | d5c44b01548dd29472c309916a9511ab1308621e | |
| parent | 83fd6375f6d9016afe9bb03453d39b8c41cda548 (diff) | |
| parent | 47d374ec27af7bc431a86a592822fbb15ff6ba3c (diff) | |
| download | system_core-1a09a804ba0c96182e8193cb5e96090893ad9a7c.zip system_core-1a09a804ba0c96182e8193cb5e96090893ad9a7c.tar.gz system_core-1a09a804ba0c96182e8193cb5e96090893ad9a7c.tar.bz2 | |
am 47d374ec: Merge "Move date off the non-portable bionic32 \'strtotimeval\'."
* commit '47d374ec27af7bc431a86a592822fbb15ff6ba3c':
Move date off the non-portable bionic32 'strtotimeval'.
| -rw-r--r-- | toolbox/date.c | 38 |
1 files changed, 34 insertions, 4 deletions
diff --git a/toolbox/date.c b/toolbox/date.c index d6c9052..aa3b72e 100644 --- a/toolbox/date.c +++ b/toolbox/date.c @@ -1,10 +1,13 @@ +#include <ctype.h> +#include <errno.h> +#include <fcntl.h> +#include <inttypes.h> #include <stdio.h> #include <stdlib.h> -#include <unistd.h> -#include <fcntl.h> #include <string.h> -#include <errno.h> #include <time.h> +#include <unistd.h> + #include <linux/android_alarm.h> #include <linux/rtc.h> #include <sys/ioctl.h> @@ -108,6 +111,33 @@ static void settime(char *s) { settime_rtc_tm(&tm); } +static char *parse_time(const char *str, struct timeval *ts) { + char *s; + long fs = 0; /* fractional seconds */ + + ts->tv_sec = strtoumax(str, &s, 10); + + if (*s == '.') { + s++; + int count = 0; + + /* read up to 6 digits (microseconds) */ + while (*s && isdigit(*s)) { + if (++count < 7) { + fs = fs*10 + (*s - '0'); + } + s++; + } + + for (; count < 6; count++) { + fs *= 10; + } + } + + ts->tv_usec = fs; + return s; +} + int date_main(int argc, char *argv[]) { int c; @@ -181,7 +211,7 @@ int date_main(int argc, char *argv[]) //strptime(argv[optind], NULL, &tm); //tv.tv_sec = mktime(&tm); //tv.tv_usec = 0; - strtotimeval(argv[optind], &tv); + parse_time(argv[optind], &tv); printf("time %s -> %lu.%lu\n", argv[optind], tv.tv_sec, tv.tv_usec); res = settime_alarm_timeval(&tv); if (res < 0) |
