summaryrefslogtreecommitdiffstats
path: root/toolbox/uptime.c
diff options
context:
space:
mode:
Diffstat (limited to 'toolbox/uptime.c')
-rw-r--r--toolbox/uptime.c21
1 files changed, 16 insertions, 5 deletions
diff --git a/toolbox/uptime.c b/toolbox/uptime.c
index 1c312b0..3fb4606 100644
--- a/toolbox/uptime.c
+++ b/toolbox/uptime.c
@@ -54,24 +54,35 @@ static void format_time(int time, char* buffer) {
sprintf(buffer, "%02d:%02d:%02d", hours, minutes, seconds);
}
-int64_t elapsedRealtime()
+static int elapsedRealtimeAlarm(struct timespec *ts)
{
- 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);
+ 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, char *argv[])
+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];