commit:     a6165168953b9c7a62c089ce946476b23b73fb12
Author:     William Hubbs <w.d.hubbs <AT> gmail <DOT> com>
AuthorDate: Tue Jun 19 21:15:22 2018 +0000
Commit:     William Hubbs <williamh <AT> gentoo <DOT> org>
CommitDate: Tue Jun 19 21:18:48 2018 +0000
URL:        https://gitweb.gentoo.org/proj/openrc.git/commit/?id=a6165168

rc-status: fix gcc 7 warnings

 src/rc/rc-status.c | 19 ++++++++++++-------
 1 file changed, 12 insertions(+), 7 deletions(-)

diff --git a/src/rc/rc-status.c b/src/rc/rc-status.c
index ab80d901..a6b8d299 100644
--- a/src/rc/rc-status.c
+++ b/src/rc/rc-status.c
@@ -75,7 +75,7 @@ print_level(const char *prefix, const char *level)
                printf("%s\n", level);
 }
 
-static void get_uptime(const char *service, char *uptime, int uptime_size)
+static char *get_uptime(const char *service)
 {
        RC_SERVICE state = rc_service_state(service);
        char *start_count;
@@ -87,8 +87,8 @@ static void get_uptime(const char *service, char *uptime, int 
uptime_size)
        time_t diff_hours = (time_t) 0;
        time_t diff_mins = (time_t) 0;
        time_t diff_secs = (time_t) 0;
+       char *uptime;
 
-       uptime[0] = '\0';
        if (state & RC_SERVICE_STARTED) {
                start_count = rc_service_value_get(service, "start_count");
                start_time_string = rc_service_value_get(service, "start_time");
@@ -110,23 +110,24 @@ static void get_uptime(const char *service, char *uptime, 
int uptime_size)
                                diff_secs %= diff_mins * (time_t) 60;
                        }
                        if (diff_days > 0)
-                               snprintf(uptime, uptime_size,
+                               xasprintf(&uptime,
                                                "%ld day(s) %02ld:%02ld:%02ld 
(%s)",
                                                diff_days, diff_hours, 
diff_mins, diff_secs,
                                                start_count);
                        else
-                               snprintf(uptime, uptime_size,
+                               xasprintf(&uptime,
                                                "%02ld:%02ld:%02ld (%s)",
                                                diff_hours, diff_mins, 
diff_secs, start_count);
                }
        }
+       return uptime;
 }
 
 static void
 print_service(const char *service)
 {
        char status[60];
-       char uptime [40];
+       char *uptime = NULL;
        char *child_pid = NULL;
        char *start_time = NULL;
        int cols =  printf(" %s", service);
@@ -155,8 +156,12 @@ print_service(const char *service)
                        free(child_pid);
                        free(start_time);
                } else {
-                       get_uptime(service, uptime, 40);
-                       snprintf(status, sizeof(status), " started %s", uptime);
+                       uptime = get_uptime(service);
+                       if (uptime) {
+                               snprintf(status, sizeof(status), " started %s", 
uptime);
+                               free(uptime);
+                       } else
+                               snprintf(status, sizeof(status), " started ");
                        color = ECOLOR_GOOD;
                }
        } else if (state & RC_SERVICE_SCHEDULED) {

Reply via email to