Mi: mi backend + mi for command version
[lttng-tools.git] / src / bin / lttng / commands / destroy.c
index 5b69cb5d9b45e54f7f7877f859bde66eb5febd54..26548b9e153521f1b74b2d5c10d44968e7179744 100644 (file)
@@ -28,6 +28,7 @@
 
 #include <common/sessiond-comm/sessiond-comm.h>
 
+static char *opt_session_name;
 static int opt_destroy_all;
 
 enum {
@@ -48,11 +49,12 @@ static struct poptOption long_options[] = {
  */
 static void usage(FILE *ofp)
 {
-       fprintf(ofp, "usage: lttng destroy [options] [NAME]\n");
+       fprintf(ofp, "usage: lttng destroy [NAME] [OPTIONS]\n");
        fprintf(ofp, "\n");
        fprintf(ofp, "Where NAME is an optional session name. If not specified, lttng will\n");
        fprintf(ofp, "get it from the configuration directory (.lttng).\n");
        fprintf(ofp, "\n");
+       fprintf(ofp, "Options:\n");
        fprintf(ofp, "  -h, --help           Show this help\n");
        fprintf(ofp, "  -a, --all            Destroy all sessions\n");
        fprintf(ofp, "      --list-options   Simple listing of options\n");
@@ -72,10 +74,11 @@ static int destroy_session(const char *session_name)
        ret = lttng_destroy_session(session_name);
        if (ret < 0) {
                switch (-ret) {
-               case LTTCOMM_SESS_NOT_FOUND:
+               case LTTNG_ERR_SESS_NOT_FOUND:
                        WARN("Session name %s not found", session_name);
                        break;
                default:
+                       ERR("%s", lttng_strerror(ret));
                        break;
                }
                goto error;
@@ -101,7 +104,11 @@ static int destroy_all_sessions()
        count = lttng_list_sessions(&sessions);
        if (count == 0) {
                MSG("No session found, nothing to do.");
+       } else if (count < 0) {
+               ERR("%s", lttng_strerror(ret));
+               goto error;
        }
+
        for (i = 0; i < count; i++) {
                ret = destroy_session(sessions[i].name);
                if (ret < 0) {
@@ -112,21 +119,6 @@ error:
        return ret;
 }
 
-/*
- * get_default_session_name
- *
- * Returns the default sessions name, if any
- */
-static int get_default_session_name(char **name)
-{
-       char *session_name = get_session_name();
-       if (session_name == NULL) {
-               return CMD_ERROR;
-       }
-       *name = session_name;
-       return CMD_SUCCESS;
-}
-
 /*
  * The 'destroy <options>' first level command
  */
@@ -156,28 +148,39 @@ int cmd_destroy(int argc, const char **argv)
                goto end;
        }
 
-       session_name = (char *) poptGetArg(pc);
+       /* TODO: mi support */
+       if (lttng_opt_mi) {
+               ret = -LTTNG_ERR_MI_NOT_IMPLEMENTED;
+               ERR("mi option not supported");
+               goto end;
+       }
 
-       /*
-        * ignore session name in case all
-        * sessions are to be destroyed
-        */
+       /* Ignore session name in case all sessions are to be destroyed */
        if (opt_destroy_all) {
                ret = destroy_all_sessions();
                goto end;
        }
-       if (session_name == NULL) {
-               ret = get_default_session_name(&session_name);
-               if (ret < 0 || session_name == NULL) {
+
+       opt_session_name = (char *) poptGetArg(pc);
+
+       if (opt_session_name == NULL) {
+               /* No session name specified, lookup default */
+               session_name = get_session_name();
+               if (session_name == NULL) {
+                       ret = CMD_ERROR;
                        goto end;
                }
+       } else {
+               session_name = opt_session_name;
        }
+
        ret = destroy_session(session_name);
 
 end:
-       poptFreeContext(pc);
-       if (session_name != NULL) {
+       if (opt_session_name == NULL) {
                free(session_name);
        }
+
+       poptFreeContext(pc);
        return ret;
 }
This page took 0.028046 seconds and 5 git commands to generate.