summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2014-04-07 22:42:28 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2014-04-07 22:42:28 +0000
commit241d5aa3d2891c7161ed0b685426046a8a695b83 (patch)
treeaf72b505704a809cfef9e6b91ef59cff0733f384
parent4854a36e2a26afb248304fde9738fa6009c14190 (diff)
parent8f2a205f34bfad9eddbd62a073d1ca492276d538 (diff)
downloadsystem_core-241d5aa3d2891c7161ed0b685426046a8a695b83.zip
system_core-241d5aa3d2891c7161ed0b685426046a8a695b83.tar.gz
system_core-241d5aa3d2891c7161ed0b685426046a8a695b83.tar.bz2
am 8f2a205f: am 1a09a804: am 47d374ec: Merge "Move date off the non-portable bionic32 \'strtotimeval\'."
* commit '8f2a205f34bfad9eddbd62a073d1ca492276d538': Move date off the non-portable bionic32 'strtotimeval'.
-rw-r--r--toolbox/date.c38
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)