*/
#define _GNU_SOURCE
+#define _LGPL_SOURCE
#include <popt.h>
#include <stdio.h>
#include <stdlib.h>
} 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;
}
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;
}