* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#define _GNU_SOURCE
+#define _LGPL_SOURCE
#include <popt.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include "../command.h"
-#include <config.h>
static char *opt_session_name;
static char *opt_viewer;
/* Is the session we are trying to view is in live mode. */
static int session_live_mode;
-/*
- * usage
- */
-static void usage(FILE *ofp)
-{
- fprintf(ofp, "usage: lttng view [SESSION_NAME] [OPTIONS]\n");
- fprintf(ofp, "\n");
- fprintf(ofp, "By default, the babeltrace viewer will be used for text viewing\n");
- fprintf(ofp, "\n");
- fprintf(ofp, "Where SESSION_NAME is an optional session name. If not specified, lttng will\n");
- fprintf(ofp, "get it from the configuration file (.lttngrc).\n");
- fprintf(ofp, "\n");
- fprintf(ofp, "Options:\n");
- fprintf(ofp, " -h, --help Show this help\n");
- fprintf(ofp, " --list-options Simple listing of options\n");
- fprintf(ofp, " -t, --trace-path PATH Trace directory path for the viewer\n");
- fprintf(ofp, " -e, --viewer CMD Specify viewer and/or options to use\n");
- fprintf(ofp, " This will completely override the default viewers so\n");
- fprintf(ofp, " please make sure to specify the full command. The trace\n");
- fprintf(ofp, " directory path of the session will be appended at the end\n");
- fprintf(ofp, " to the arguments\n");
- fprintf(ofp, "\n");
-}
-
static struct viewers *parse_options(void)
{
if (opt_viewer == NULL) {
return &(viewers[VIEWER_BABELTRACE]);
}
-#if 0
- if (strstr(opt_viewer, viewers[VIEWER_LTTV_GUI].exec_name) == 0) {
- return &(viewers[VIEWER_LTTV_GUI]);
- }
-#endif
-
/*
* This means that if -e, --viewers is used, we just override everything
* with it. For supported viewers like lttv, we could simply detect if "-t"
} while (*token != '\0');
/* Add two here for the NULL terminating element and trace path */
- argv = malloc(sizeof(char *) * (num_opts + 2));
+ argv = zmalloc(sizeof(char *) * (num_opts + 2));
if (argv == NULL) {
goto error;
}
token = strtok(opts, " ");
while (token != NULL) {
argv[i] = strdup(token);
+ if (argv[i] == NULL) {
+ goto error;
+ }
token = strtok(NULL, " ");
i++;
}
return argv;
error:
+ if (argv) {
+ for (i = 0; i < num_opts + 2; i++) {
+ free(argv[i]);
+ }
+ free(argv);
+ }
+
return NULL;
}
size = sizeof(char *) * mem_len;
/* Add two here for the trace_path and the NULL terminating element. */
- argv = malloc(size);
+ argv = zmalloc(size);
if (argv == NULL) {
goto error;
}
argv = alloc_argv_from_local_opts(babeltrace_opts,
ARRAY_SIZE(babeltrace_opts), trace_path);
break;
-#if 0
- case VIEWER_LTTV_GUI:
- if (stat(lttv_gui_bin, &status) == 0) {
- viewer_bin = lttv_gui_bin;
- } else {
- viewer_bin = viewer->exec_name;
- }
- argv = alloc_argv_from_local_opts(lttv_gui_opts,
- ARRAY_SIZE(lttv_gui_opts), trace_path);
- break;
-#endif
case VIEWER_USER_DEFINED:
argv = alloc_argv_from_user_opts(opt_viewer, trace_path);
if (argv) {
break;
}
- if (argv == NULL) {
+ if (argv == NULL || !viewer_bin) {
ret = CMD_FATAL;
goto error;
}
} else {
PERROR("exec: %s", viewer_bin);
}
- free(argv);
ret = CMD_FATAL;
goto error;
}
error:
+ free(argv);
return ret;
}
ret = gethostname(hostname, sizeof(hostname));
if (ret < 0) {
- perror("gethostname");
+ PERROR("gethostname");
goto error;
}
ret = asprintf(&path, "net://localhost/host/%s/%s", hostname,
session_name);
if (ret < 0) {
- perror("asprintf live path");
+ PERROR("asprintf live path");
goto error;
}
while ((opt = poptGetNextOpt(pc)) != -1) {
switch (opt) {
case OPT_HELP:
- usage(stdout);
+ SHOW_HELP();
goto end;
case OPT_LIST_OPTIONS:
list_cmd_options(stdout, long_options);
goto end;
default:
- usage(stderr);
ret = CMD_UNDEFINED;
goto end;
}