destroy.c :
* Fix usage() output alignment
* Document and enforce return values of cmd_destroy() and destroy_session()
* Output --help to stdout
* Fix destroy_session() so it removes the config when the current session is 
explicitly specified
conf.c :
* Fix config_destroy() description to match behaviour
------------------------------
>From 41f3600d9f24fb082ab2e60e61f50960f0ef35eb Tue, 31 Jan 2012 10:12:32 -0500
From: Daniel U. Thibault <[email protected]>
Date: Tue, 31 Jan 2012 10:12:19 -0500
Subject: [PATCH] lttng-tools conf.c : Fix config_destroy description to match 
behaviour; destroy.c : Fix usage output alignment, document and enforce return 
values, output --help to stdout, fix destroy_session so it removes the config 
when the current session is explicitly specified

Signed-off-by: Daniel U. Thibault <[email protected]>

diff --git a/src/bin/lttng/commands/destroy.c b/src/bin/lttng/commands/destroy.c
index 39b4e9a..441b858 100644
--- a/src/bin/lttng/commands/destroy.c
+++ b/src/bin/lttng/commands/destroy.c
@@ -52,31 +52,43 @@
        fprintf(ofp, "get it from the configuration directory (.lttng).\n");
        fprintf(ofp, "\n");
        fprintf(ofp, "  -h, --help           Show this help\n");
-       fprintf(ofp, "      --list-options       Simple listing of options\n");
+       fprintf(ofp, "      --list-options   Simple listing of options\n");
        fprintf(ofp, "\n");
 }
 
 /*
- * Destroy a session removing the config directory and unregistering to the
- * session daemon.
+ * Destroys a session, unregistering it from the session daemon.
+ * If the session is unspecified, the current one is destroyed.
+ * If the current session is destroyed, so is its config file.
+ *
+ * Returns one of the CMD_* result values.
  */
 static int destroy_session()
 {
        int ret;
-       char *session_name, *path;
+       int destroying_current_session;
+       char *session_name, *cur_session_name, *path;
 
-       if (opt_session_name == NULL) {
-               session_name = get_session_name();
-               if (session_name == NULL) {
-                       ret = CMD_ERROR;
-                       goto error;
-               }
-       } else {
-               session_name = opt_session_name;
+       cur_session_name = get_session_name();
+       if ((cur_session_name == NULL) && (opt_session_name == NULL)) {
+               ret = CMD_ERROR;
+               goto error;
        }
+       /* At least one of cur_session_name and opt_session_name is not NULL */
+       session_name = (opt_session_name ? opt_session_name : cur_session_name);
+       /*
+        * We're destroying the current session in two cases:
+        * If no explicit session was supplied, or
+        * the explicit session name matches the current session name's (if it 
exists)
+        */
+       destroying_current_session =
+                       (opt_session_name == NULL) ||
+                       (cur_session_name ?
+                                       (strcmp(cur_session_name, 
opt_session_name)==0) : 0);
 
        ret = lttng_destroy_session(session_name);
        if (ret < 0) {
+               ret = CMD_ERROR;
                goto free_name;
        }
 
@@ -86,7 +98,7 @@
                goto free_name;
        }
 
-       if (opt_session_name == NULL) {
+       if (destroying_current_session) {
                config_destroy(path);
                MSG("Session %s destroyed at %s", session_name, path);
        } else {
@@ -96,8 +108,8 @@
        ret = CMD_SUCCESS;
 
 free_name:
-       if (opt_session_name == NULL) {
-               free(session_name);
+       if (cur_session_name != NULL) {
+               free(cur_session_name);
        }
 error:
        return ret;
@@ -105,6 +117,8 @@
 
 /*
  * The 'destroy <options>' first level command
+ *
+ * Returns one of the CMD_* result values.
  */
 int cmd_destroy(int argc, const char **argv)
 {
@@ -117,11 +131,10 @@
        while ((opt = poptGetNextOpt(pc)) != -1) {
                switch (opt) {
                case OPT_HELP:
-                       usage(stderr);
+                       usage(stdout);
                        goto end;
                case OPT_LIST_OPTIONS:
                        list_cmd_options(stdout, long_options);
-                       ret = CMD_SUCCESS;
                        goto end;
                default:
                        usage(stderr);
diff --git a/src/bin/lttng/conf.c b/src/bin/lttng/conf.c
index 00991b0..0ff5bf1 100644
--- a/src/bin/lttng/conf.c
+++ b/src/bin/lttng/conf.c
@@ -143,7 +143,7 @@
 /*
  *  config_destroy
  *
- *  Destroys directory config and file config.
+ *  Removes the config file from the config directory.
  */
 void config_destroy(char *path)
 {
------------------------------

Daniel U. Thibault
R & D pour la défense Canada - Valcartier (RDDC Valcartier) / Defence R&D 
Canada - Valcartier (DRDC Valcartier)
Système de systèmes (SdS) / System of Systems (SoS)
Solutions informatiques et expérimentations (SIE) / Computing Solutions and 
Experimentations (CSE)
2459 Boul. Pie XI Nord
Québec, QC  G3J 1X5
CANADA
Vox : (418) 844-4000 x4245
Fax : (418) 844-4538
NAC: 918V QSDJ
Gouvernement du Canada / Government of Canada
<http://www.valcartier.drdc-rddc.gc.ca/>

_______________________________________________
lttng-dev mailing list
[email protected]
http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev

Reply via email to