1 |
commit: 1967cd402caf6e229263f15aef40c6c4d8f60ce3 |
2 |
Author: William Hubbs <w.d.hubbs <AT> gmail <DOT> com> |
3 |
AuthorDate: Mon May 15 23:55:35 2017 +0000 |
4 |
Commit: William Hubbs <williamh <AT> gentoo <DOT> org> |
5 |
CommitDate: Tue May 16 00:04:58 2017 +0000 |
6 |
URL: https://gitweb.gentoo.org/proj/openrc.git/commit/?id=1967cd40 |
7 |
|
8 |
rc_status: calculate time differences in time_t and display seconds in uptime |
9 |
|
10 |
src/rc/rc-status.c | 45 ++++++++++++++++++++++++--------------------- |
11 |
1 file changed, 24 insertions(+), 21 deletions(-) |
12 |
|
13 |
diff --git a/src/rc/rc-status.c b/src/rc/rc-status.c |
14 |
index a314bb1d..9a094d47 100644 |
15 |
--- a/src/rc/rc-status.c |
16 |
+++ b/src/rc/rc-status.c |
17 |
@@ -83,11 +83,11 @@ static void get_uptime(const char *service, char *uptime, int uptime_size) |
18 |
time_t now; |
19 |
char *start_time_string; |
20 |
time_t start_time; |
21 |
- double time_diff; |
22 |
- double diff_tmp; |
23 |
- double diff_days; |
24 |
- double diff_hours; |
25 |
- double diff_mins; |
26 |
+ time_t time_diff; |
27 |
+ time_t diff_days = (time_t) 0; |
28 |
+ time_t diff_hours = (time_t) 0; |
29 |
+ time_t diff_mins = (time_t) 0; |
30 |
+ time_t diff_secs = (time_t) 0; |
31 |
|
32 |
uptime[0] = '\0'; |
33 |
if (state & RC_SERVICE_STARTED) { |
34 |
@@ -96,26 +96,29 @@ static void get_uptime(const char *service, char *uptime, int uptime_size) |
35 |
if (start_count && start_time_string) { |
36 |
start_time = to_time_t(start_time_string); |
37 |
now = time(NULL); |
38 |
- time_diff = difftime(now, start_time); |
39 |
- diff_tmp = time_diff; |
40 |
- if (diff_tmp > 86400.0) { |
41 |
- diff_days = diff_tmp / 86400.0; |
42 |
- diff_tmp -= diff_days * 86400.0; |
43 |
+ time_diff = (time_t) difftime(now, start_time); |
44 |
+ diff_secs = time_diff; |
45 |
+ if (diff_secs > (time_t) 86400) { |
46 |
+ diff_days = diff_secs / (time_t) 86400; |
47 |
+ diff_secs %= diff_days * (time_t) 86400; |
48 |
} |
49 |
- if (diff_tmp > 3600.0) { |
50 |
- diff_hours = diff_tmp / 3600.0; |
51 |
- diff_tmp -= diff_hours * 3600.0; |
52 |
+ if (diff_secs > (time_t) 3600) { |
53 |
+ diff_hours = diff_secs / (time_t) 3600; |
54 |
+ diff_secs %= diff_hours * (time_t) 3600; |
55 |
} |
56 |
- if (diff_tmp > 60.0) { |
57 |
- diff_mins = diff_tmp / 60.0; |
58 |
- diff_tmp -= diff_mins * 60.0; |
59 |
+ if (diff_secs > (time_t) 60) { |
60 |
+ diff_mins = diff_secs / (time_t) 60; |
61 |
+ diff_secs %= diff_mins * (time_t) 60; |
62 |
} |
63 |
- if ((int) diff_days > 0) |
64 |
- snprintf(uptime, uptime_size, "%.0f days %02.0f:%02.0f (%s)", |
65 |
- diff_days, diff_hours, diff_mins, start_count); |
66 |
+ if (diff_days > 0) |
67 |
+ snprintf(uptime, uptime_size, |
68 |
+ "%ld day(s) %02ld:%02ld:%02ld (%s)", |
69 |
+ diff_days, diff_hours, diff_mins, diff_secs, |
70 |
+ start_count); |
71 |
else |
72 |
- snprintf(uptime, uptime_size, "%02.0f:%02.0f (%s)", |
73 |
- diff_hours, diff_mins, start_count); |
74 |
+ snprintf(uptime, uptime_size, |
75 |
+ "%02ld:%02ld:%02ld (%s)", |
76 |
+ diff_hours, diff_mins, diff_secs, start_count); |
77 |
} |
78 |
} |
79 |
} |