+static char *create_channel_path(struct consumer_output *consumer,
+ uid_t uid, gid_t gid)
+{
+ int ret;
+ char tmp_path[PATH_MAX];
+ char *pathname = NULL;
+
+ assert(consumer);
+
+ /* Get the right path name destination */
+ if (consumer->type == CONSUMER_DST_LOCAL) {
+ /* Set application path to the destination path */
+ ret = snprintf(tmp_path, sizeof(tmp_path), "%s%s",
+ consumer->dst.trace_path, consumer->subdir);
+ if (ret < 0) {
+ PERROR("snprintf kernel channel path");
+ goto error;
+ }
+ pathname = strndup(tmp_path, sizeof(tmp_path));
+
+ /* Create directory */
+ ret = run_as_mkdir_recursive(pathname, S_IRWXU | S_IRWXG, uid, gid);
+ if (ret < 0) {
+ if (ret != -EEXIST) {
+ ERR("Trace directory creation error");
+ goto error;
+ }
+ }
+ DBG3("Kernel local consumer tracefile path: %s", pathname);
+ } else {
+ ret = snprintf(tmp_path, sizeof(tmp_path), "%s", consumer->subdir);
+ if (ret < 0) {
+ PERROR("snprintf kernel metadata path");
+ goto error;
+ }
+ pathname = strndup(tmp_path, sizeof(tmp_path));
+ DBG3("Kernel network consumer subdir path: %s", pathname);
+ }
+
+ return pathname;
+
+error:
+ free(pathname);
+ return NULL;
+}
+