diff options
author | Lennart Poettering <lennart@poettering.net> | 2015-09-24 12:30:05 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2015-09-29 21:55:52 +0200 |
commit | 172d7abfea003d84d0e697a510a222f32b40f4c0 (patch) | |
tree | 6dbc20b80d7656618e4aeffb9860f91b7adf8b01 /src/systemctl/systemctl.c | |
parent | fc2ffaf17d69fbe58183b2bdd61a655d575d8b0f (diff) |
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.
Diffstat (limited to 'src/systemctl/systemctl.c')
-rw-r--r-- | src/systemctl/systemctl.c | 13 |
1 files changed, 11 insertions, 2 deletions
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; |