*
*/
-#include <stdbool.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <unistd.h>
-
-#include <lttng/constant.h>
-
-#include <common/compat/errno.hpp>
#include "error.hpp"
#include "macros.hpp"
#include "spawn-viewer.hpp"
+#include <common/compat/errno.hpp>
-static const char *babeltrace_bin = CONFIG_BABELTRACE_BIN;
-static const char *babeltrace2_bin = CONFIG_BABELTRACE2_BIN;
+#include <lttng/constant.h>
-/*
- * This is needed for each viewer since we are using execvp().
- */
-static const char *babeltrace_opts[] = { "babeltrace" };
-static const char *babeltrace2_opts[] = { "babeltrace2" };
+#include <stdbool.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <unistd.h>
/*
* Type is also use as the index in the viewers array. So please, make sure
* your enum value is in the right order in the array below.
*/
enum viewer_type {
- VIEWER_BABELTRACE = 0,
- VIEWER_BABELTRACE2 = 1,
- VIEWER_USER_DEFINED = 2,
+ VIEWER_BABELTRACE = 0,
+ VIEWER_BABELTRACE2 = 1,
+ VIEWER_USER_DEFINED = 2,
};
-static const struct viewer {
+namespace {
+const char *babeltrace_bin = CONFIG_BABELTRACE_BIN;
+const char *babeltrace2_bin = CONFIG_BABELTRACE2_BIN;
+
+/*
+ * This is needed for each viewer since we are using execvp().
+ */
+const char *babeltrace_opts[] = { "babeltrace" };
+const char *babeltrace2_opts[] = { "babeltrace2" };
+
+const struct viewer {
const char *exec_name;
enum viewer_type type;
} viewers[] = {
{ "babeltrace", VIEWER_BABELTRACE },
{ "babeltrace2", VIEWER_BABELTRACE2 },
- { NULL, VIEWER_USER_DEFINED },
+ { nullptr, VIEWER_USER_DEFINED },
};
+} /* namespace */
static const struct viewer *parse_viewer_option(const char *opt_viewer)
{
- if (opt_viewer == NULL) {
+ if (opt_viewer == nullptr) {
/* Default is babeltrace2 */
return &(viewers[VIEWER_BABELTRACE2]);
}
{
int i = 0, ignore_space = 0;
unsigned int num_opts = 1;
- char **argv, *token = opts, *saveptr = NULL;
+ char **argv, *token = opts, *saveptr = nullptr;
/* Count number of arguments. */
do {
/* Add two here for the NULL terminating element and trace path */
argv = calloc<char *>(num_opts + 2);
- if (argv == NULL) {
+ if (argv == nullptr) {
goto error;
}
token = strtok_r(opts, " ", &saveptr);
- while (token != NULL) {
+ while (token != nullptr) {
argv[i] = strdup(token);
- if (argv[i] == NULL) {
+ if (argv[i] == nullptr) {
goto error;
}
- token = strtok_r(NULL, " ", &saveptr);
+ token = strtok_r(nullptr, " ", &saveptr);
i++;
}
argv[num_opts] = (char *) trace_path;
- argv[num_opts + 1] = NULL;
+ argv[num_opts + 1] = nullptr;
return argv;
free(argv);
}
- return NULL;
+ return nullptr;
}
/*
*
* The returning pointer is ready to be passed to execvp().
*/
-static char **alloc_argv_from_local_opts(const char **opts, size_t opts_len,
- const char *trace_path, bool opt_live_mode)
+static char **alloc_argv_from_local_opts(const char **opts,
+ size_t opts_len,
+ const char *trace_path,
+ bool opt_live_mode)
{
char **argv;
size_t mem_len;
}
argv = calloc<char *>(mem_len);
- if (argv == NULL) {
+ if (argv == nullptr) {
goto error;
}
argv[opts_len] = (char *) "-i";
argv[opts_len + 1] = (char *) "lttng-live";
argv[opts_len + 2] = (char *) trace_path;
- argv[opts_len + 3] = NULL;
+ argv[opts_len + 3] = nullptr;
} else {
argv[opts_len] = (char *) trace_path;
- argv[opts_len + 1] = NULL;
+ argv[opts_len + 1] = nullptr;
}
error:
return argv;
}
-
/*
* Spawn viewer with the trace directory path.
*/
{
int ret = 0;
struct stat status;
- const char *viewer_bin = NULL;
+ const char *viewer_bin = nullptr;
const struct viewer *viewer;
- char **argv = NULL;
+ char **argv = nullptr;
/* Check for --viewer option. */
viewer = parse_viewer_option(opt_viewer);
- if (viewer == NULL) {
+ if (viewer == nullptr) {
ret = -1;
goto error;
}
} else {
viewer_bin = viewer->exec_name;
}
- argv = alloc_argv_from_local_opts(babeltrace2_opts,
- ARRAY_SIZE(babeltrace2_opts), trace_path,
- opt_live_mode);
+ argv = alloc_argv_from_local_opts(
+ babeltrace2_opts, ARRAY_SIZE(babeltrace2_opts), trace_path, opt_live_mode);
break;
case VIEWER_BABELTRACE:
if (stat(babeltrace_bin, &status) == 0) {
} else {
viewer_bin = viewer->exec_name;
}
- argv = alloc_argv_from_local_opts(babeltrace_opts,
- ARRAY_SIZE(babeltrace_opts), trace_path,
- opt_live_mode);
+ argv = alloc_argv_from_local_opts(
+ babeltrace_opts, ARRAY_SIZE(babeltrace_opts), trace_path, opt_live_mode);
break;
case VIEWER_USER_DEFINED:
argv = alloc_argv_from_user_opts(opt_viewer, trace_path);
abort();
}
- if (argv == NULL || !viewer_bin) {
+ if (argv == nullptr || !viewer_bin) {
ret = -1;
goto error;
}
if (viewer->type == VIEWER_BABELTRACE2) {
/* Fallback to legacy babeltrace. */
DBG("Default viewer \"%s\" not installed on the system, falling back to \"%s\"",
- viewers[VIEWER_BABELTRACE2].exec_name,
- viewers[VIEWER_BABELTRACE].exec_name);
+ viewers[VIEWER_BABELTRACE2].exec_name,
+ viewers[VIEWER_BABELTRACE].exec_name);
viewer = &viewers[VIEWER_BABELTRACE];
free(argv);
- argv = NULL;
+ argv = nullptr;
goto retry_viewer;
} else {
ERR("Default viewer \"%s\" (and fallback \"%s\") not found on the system",
- viewers[VIEWER_BABELTRACE2].exec_name,
- viewers[VIEWER_BABELTRACE].exec_name);
+ viewers[VIEWER_BABELTRACE2].exec_name,
+ viewers[VIEWER_BABELTRACE].exec_name);
}
} else {
PERROR("Failed to launch \"%s\" viewer", viewer_bin);