From: Lennart Poettering Date: Thu, 24 Sep 2015 10:30:05 +0000 (+0200) Subject: systemctl: allocate arg_wall only on the heap X-Git-Tag: v227~62^2~17 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=172d7abfea003d84d0e697a510a222f32b40f4c0;p=thirdparty%2Fsystemd.git systemctl: allocate arg_wall only on the heap Previously, we'd allocate it sometimes from the heap, but otherwise let it point directly int argv[]. Let's clean this up, so that we know exactly how to release its resources, and do so at the end. --- diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c index ecd4c01858f..804f485403f 100644 --- a/src/systemctl/systemctl.c +++ b/src/systemctl/systemctl.c @@ -6835,6 +6835,7 @@ static int shutdown_parse_argv(int argc, char *argv[]) { {} }; + char **wall = NULL; int c, r; assert(argc >= 0); @@ -6908,10 +6909,16 @@ static int shutdown_parse_argv(int argc, char *argv[]) { if (argc > optind && arg_action == ACTION_CANCEL_SHUTDOWN) /* No time argument for shutdown cancel */ - arg_wall = argv + optind; + wall = argv + optind; else if (argc > optind + 1) /* We skip the time argument */ - arg_wall = argv + optind + 1; + wall = argv + optind + 1; + + if (wall) { + arg_wall = strv_copy(wall); + if (!arg_wall) + return log_oom(); + } optind = argc; @@ -7639,6 +7646,8 @@ finish: strv_free(arg_states); strv_free(arg_properties); + strv_free(arg_wall); + sd_bus_default_flush_close(); return r < 0 ? EXIT_FAILURE : r;