From 172d7abfea003d84d0e697a510a222f32b40f4c0 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Thu, 24 Sep 2015 12:30:05 +0200 Subject: 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. --- src/systemctl/systemctl.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'src/systemctl') diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c index ecd4c01858..804f485403 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; -- cgit v1.2.3-54-g00ecf