From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:52144) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZWqTy-0000Kk-Jg for qemu-devel@nongnu.org; Tue, 01 Sep 2015 14:40:38 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZWqTu-0007jc-Ed for qemu-devel@nongnu.org; Tue, 01 Sep 2015 14:40:34 -0400 Received: from e32.co.us.ibm.com ([32.97.110.150]:47539) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZWqTt-0007i6-RU for qemu-devel@nongnu.org; Tue, 01 Sep 2015 14:40:30 -0400 Received: from /spool/local by e32.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 1 Sep 2015 12:40:29 -0600 Received: from b03cxnp08028.gho.boulder.ibm.com (b03cxnp08028.gho.boulder.ibm.com [9.17.130.20]) by d03dlp01.boulder.ibm.com (Postfix) with ESMTP id 72A431FF0049 for ; Tue, 1 Sep 2015 12:31:36 -0600 (MDT) Received: from d03av02.boulder.ibm.com (d03av02.boulder.ibm.com [9.17.195.168]) by b03cxnp08028.gho.boulder.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id t81IdH9k42205254 for ; Tue, 1 Sep 2015 11:39:25 -0700 Received: from d03av02.boulder.ibm.com (localhost [127.0.0.1]) by d03av02.boulder.ibm.com (8.14.4/8.14.4/NCO v10.0 AVout) with ESMTP id t81Ids6U002786 for ; Tue, 1 Sep 2015 12:39:54 -0600 From: Michael Roth Date: Tue, 1 Sep 2015 13:38:51 -0500 Message-Id: <1441132743-26228-15-git-send-email-mdroth@linux.vnet.ibm.com> In-Reply-To: <1441132743-26228-1-git-send-email-mdroth@linux.vnet.ibm.com> References: <1441132743-26228-1-git-send-email-mdroth@linux.vnet.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Subject: [Qemu-devel] [PATCH 14/26] qga: copy argument strings List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: peter.maydell@linaro.org, Michael Roth , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= From: Marc-André Lureau Following patch will return allocated strings, so we must correctly initialize alloc & free them. The nice side effect is that we no longer have to check for "fixed_state_dir" to call ga_install_service() with a NULL state dir. The default values are set after parsing the command line options. Signed-off-by: Marc-André Lureau Reviewed-by: Michael Roth Reviewed-by: Denis V. Lunev Signed-off-by: Michael Roth --- qga/main.c | 57 +++++++++++++++++++++++++++++++-------------------------- 1 file changed, 31 insertions(+), 26 deletions(-) diff --git a/qga/main.c b/qga/main.c index 7fa6dcc..766cb93 100644 --- a/qga/main.c +++ b/qga/main.c @@ -939,13 +939,13 @@ static GList *split_list(const gchar *str, const gchar *delim) int main(int argc, char **argv) { const char *sopt = "hVvdm:p:l:f:F::b:s:t:"; - const char *method = NULL, *channel_path = NULL; - const char *log_filepath = NULL; - const char *pid_filepath; + char *method = NULL, *channel_path = NULL; + char *log_filepath = NULL; + char *pid_filepath = NULL; #ifdef CONFIG_FSFREEZE - const char *fsfreeze_hook = NULL; + char *fsfreeze_hook = NULL; #endif - const char *state_dir; + char *state_dir = NULL; #ifdef _WIN32 const char *service = NULL; #endif @@ -976,31 +976,28 @@ int main(int argc, char **argv) module_call_init(MODULE_INIT_QAPI); init_dfl_pathnames(); - pid_filepath = dfl_pathnames.pidfile; - state_dir = dfl_pathnames.state_dir; - while ((ch = getopt_long(argc, argv, sopt, lopt, &opt_ind)) != -1) { switch (ch) { case 'm': - method = optarg; + method = g_strdup(optarg); break; case 'p': - channel_path = optarg; + channel_path = g_strdup(optarg); break; case 'l': - log_filepath = optarg; + log_filepath = g_strdup(optarg); break; case 'f': - pid_filepath = optarg; + pid_filepath = g_strdup(optarg); break; #ifdef CONFIG_FSFREEZE case 'F': - fsfreeze_hook = optarg ? optarg : QGA_FSFREEZE_HOOK_DEFAULT; + fsfreeze_hook = g_strdup(optarg ?: QGA_FSFREEZE_HOOK_DEFAULT); break; #endif case 't': - state_dir = optarg; - break; + state_dir = g_strdup(optarg); + break; case 'v': /* enable all log levels */ log_level = G_LOG_LEVEL_MASK; @@ -1023,20 +1020,10 @@ int main(int argc, char **argv) case 's': service = optarg; if (strcmp(service, "install") == 0) { - const char *fixed_state_dir; - - /* If the user passed the "-t" option, we save that state dir - * in the service. Otherwise we let the service fetch the state - * dir from the environment when it starts. - */ - fixed_state_dir = (state_dir == dfl_pathnames.state_dir) ? - NULL : - state_dir; if (ga_install_vss_provider()) { exit(EXIT_FAILURE); } - if (ga_install_service(channel_path, log_filepath, - fixed_state_dir)) { + if (ga_install_service(channel_path, log_filepath, state_dir)) { exit(EXIT_FAILURE); } exit(EXIT_SUCCESS); @@ -1067,6 +1054,14 @@ int main(int argc, char **argv) } } + if (pid_filepath == NULL) { + pid_filepath = g_strdup(dfl_pathnames.pidfile); + } + + if (state_dir == NULL) { + state_dir = g_strdup(dfl_pathnames.state_dir); + } + #ifdef _WIN32 /* On win32 the state directory is application specific (be it the default * or a user override). We got past the command line parsing; let's create @@ -1210,5 +1205,15 @@ out_bad: if (daemonize) { unlink(pid_filepath); } + + g_free(method); + g_free(log_filepath); + g_free(pid_filepath); + g_free(state_dir); + g_free(channel_path); +#ifdef CONFIG_FSFREEZE + g_free(fsfreeze_hook); +#endif + return EXIT_FAILURE; } -- 1.9.1