Skip to content

Commit c2f815f

Browse files
committed
Uptime (Android): fix implementation
Regression of 41fed1d
1 parent 4bd4ec2 commit c2f815f

File tree

1 file changed

+21
-9
lines changed

1 file changed

+21
-9
lines changed

src/detection/uptime/uptime_linux.c

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,32 @@
66

77
const char* ffDetectUptime(FFUptimeResult* result)
88
{
9+
#ifndef __ANDROID__ // cat: /proc/uptime: Permission denied
10+
911
// #620
1012
char buf[64];
1113
ssize_t nRead = ffReadFileData("/proc/uptime", sizeof(buf) - 1, buf);
12-
if(nRead < 0)
13-
return "ffReadFileData(\"/proc/uptime\", sizeof(buf) - 1, buf) failed";
14-
buf[nRead] = '\0';
14+
if(nRead > 0)
15+
{
16+
buf[nRead] = '\0';
1517

16-
char *err = NULL;
17-
double sec = strtod(buf, &err);
18-
if(err != buf)
19-
result->uptime = (uint64_t) (sec * 1000);
20-
else
21-
return "strtod(buf, &err) failed";
18+
char *err = NULL;
19+
double sec = strtod(buf, &err);
20+
if(err != buf)
21+
{
22+
result->uptime = (uint64_t) (sec * 1000);
23+
result->bootTime = ffTimeGetNow() + result->uptime;
24+
return NULL;
25+
}
26+
}
2227

28+
#endif
29+
30+
struct timespec uptime;
31+
if (clock_gettime(CLOCK_BOOTTIME, &uptime) != 0)
32+
return "clock_gettime(CLOCK_BOOTTIME) failed";
33+
34+
result->uptime = (uint64_t) uptime.tv_sec * 1000 + (uint64_t) uptime.tv_nsec / 1000000;
2335
result->bootTime = ffTimeGetNow() + result->uptime;
2436

2537
return NULL;

0 commit comments

Comments
 (0)