diff options
author | Elliott Hughes <enh@google.com> | 2015-03-20 11:14:50 -0700 |
---|---|---|
committer | Elliott Hughes <enh@google.com> | 2015-03-20 11:14:50 -0700 |
commit | 12235947ebc36206f43e52debc42de9b86d86866 (patch) | |
tree | 07aa06cae12db6f335bffb602308ce4d16bf91aa /toolbox | |
parent | b721e8f4d2f62ffaadef7ec0ff15dada778e286d (diff) | |
download | core-12235947ebc36206f43e52debc42de9b86d86866.tar.gz core-12235947ebc36206f43e52debc42de9b86d86866.tar.bz2 core-12235947ebc36206f43e52debc42de9b86d86866.zip |
Remove /dev/alarm cruft from uptime.
Our uptime is very different from the regular one, and usefully so, so
this code will live on. Remove dead bits.
Also fix the annoying "1 days" bug while I'm here.
Change-Id: Ied5403ba96dcc5eddd4d386b59c6fcdea3209881
Diffstat (limited to 'toolbox')
-rw-r--r-- | toolbox/uptime.c | 77 |
1 files changed, 21 insertions, 56 deletions
diff --git a/toolbox/uptime.c b/toolbox/uptime.c index 2dd808443..ebfb15e5a 100644 --- a/toolbox/uptime.c +++ b/toolbox/uptime.c @@ -29,71 +29,33 @@ * SUCH DAMAGE. */ -#include <sys/time.h> -#include <linux/ioctl.h> -#include <linux/rtc.h> -#include <linux/android_alarm.h> -#include <fcntl.h> +#include <errno.h> #include <stdio.h> +#include <string.h> #include <time.h> -#include <unistd.h> static void format_time(int time, char* buffer) { - int seconds, minutes, hours, days; - - seconds = time % 60; + int seconds = time % 60; time /= 60; - minutes = time % 60; + int minutes = time % 60; time /= 60; - hours = time % 24; - days = time / 24; + int hours = time % 24; + int days = time / 24; - if (days > 0) - sprintf(buffer, "%d days, %02d:%02d:%02d", days, hours, minutes, seconds); - else + if (days > 0) { + sprintf(buffer, "%d day%s, %02d:%02d:%02d", days, (days == 1) ? "" : "s", hours, minutes, seconds); + } else { sprintf(buffer, "%02d:%02d:%02d", hours, minutes, seconds); + } } -static int elapsedRealtimeAlarm(struct timespec *ts) -{ - int fd, result; - - fd = open("/dev/alarm", O_RDONLY); - if (fd < 0) - return fd; - - result = ioctl(fd, ANDROID_ALARM_GET_TIME(ANDROID_ALARM_ELAPSED_REALTIME), ts); - close(fd); - - return result; -} - -int64_t elapsedRealtime() -{ - struct timespec ts; - - int result = elapsedRealtimeAlarm(&ts); - if (result < 0) - result = clock_gettime(CLOCK_BOOTTIME, &ts); - - if (result == 0) - return ts.tv_sec; - return -1; -} - -int uptime_main(int argc __attribute__((unused)), - char *argv[] __attribute__((unused))) -{ - float up_time, idle_time; - char up_string[100], idle_string[100], sleep_string[100]; - int elapsed; - struct timespec up_timespec; - +int uptime_main(int argc __attribute__((unused)), char *argv[] __attribute__((unused))) { FILE* file = fopen("/proc/uptime", "r"); if (!file) { fprintf(stderr, "Could not open /proc/uptime\n"); return -1; } + float idle_time; if (fscanf(file, "%*f %f", &idle_time) != 1) { fprintf(stderr, "Could not parse /proc/uptime\n"); fclose(file); @@ -101,18 +63,21 @@ int uptime_main(int argc __attribute__((unused)), } fclose(file); - if (clock_gettime(CLOCK_MONOTONIC, &up_timespec) < 0) { - fprintf(stderr, "Could not get monotonic time\n"); + struct timespec up_timespec; + if (clock_gettime(CLOCK_MONOTONIC, &up_timespec) == -1) { + fprintf(stderr, "Could not get monotonic time: %s\n", strerror(errno)); return -1; } - up_time = up_timespec.tv_sec + up_timespec.tv_nsec / 1e9; + float up_time = up_timespec.tv_sec + up_timespec.tv_nsec / 1e9; - elapsed = elapsedRealtime(); - if (elapsed < 0) { - fprintf(stderr, "elapsedRealtime failed\n"); + struct timespec elapsed_timespec; + if (clock_gettime(CLOCK_BOOTTIME, &elapsed_timespec) == -1) { + fprintf(stderr, "Could not get boot time: %s\n", strerror(errno)); return -1; } + int elapsed = elapsed_timespec.tv_sec; + char up_string[100], idle_string[100], sleep_string[100]; format_time(elapsed, up_string); format_time((int)idle_time, idle_string); format_time((int)(elapsed - up_time), sleep_string); |