-/*
- * Return allocated full pathname of the session using the consumer trace path
- * and subdir if available. On a successful allocation, the directory of the
- * trace is created with the session credentials.
- *
- * The caller can safely free(3) the returned value. On error, NULL is
- * returned.
- */
-static char *setup_trace_path(struct consumer_output *consumer,
- struct ust_app_session *ua_sess)
-{
- int ret;
- char *pathname;
-
- assert(consumer);
- assert(ua_sess);
-
- health_code_update();
-
- /* Allocate our self the string to make sure we never exceed PATH_MAX. */
- pathname = zmalloc(PATH_MAX);
- if (!pathname) {
- goto error;
- }
-
- /* Get correct path name destination */
- if (consumer->type == CONSUMER_DST_LOCAL) {
- /* Set application path to the destination path */
- ret = snprintf(pathname, PATH_MAX, "%s%s%s",
- consumer->dst.trace_path, consumer->subdir, ua_sess->path);
- if (ret < 0) {
- PERROR("snprintf channel path");
- goto error;
- }
-
- /* Create directory. Ignore if exist. */
- ret = run_as_mkdir_recursive(pathname, S_IRWXU | S_IRWXG,
- ua_sess->euid, ua_sess->egid);
- if (ret < 0) {
- if (errno != EEXIST) {
- ERR("Trace directory creation error");
- goto error;
- }
- }
- } else {
- ret = snprintf(pathname, PATH_MAX, "%s%s", consumer->subdir,
- ua_sess->path);
- if (ret < 0) {
- PERROR("snprintf channel path");
- goto error;
- }
- }
-
- return pathname;
-
-error:
- free(pathname);
- return NULL;
-}
-