X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Flib%2Flttng-ctl%2Fsave.c;h=8f8cbb639ae7c7874857d2fb977d69c12af6a03b;hp=f215468a295ab647227cc4f679d3bb6c97f93ff9;hb=6c1c0768320135c6936c371b09731851b508c023;hpb=00c76ceaeb0074e47167be56c0920284e6a0360e diff --git a/src/lib/lttng-ctl/save.c b/src/lib/lttng-ctl/save.c index f215468a2..8f8cbb639 100644 --- a/src/lib/lttng-ctl/save.c +++ b/src/lib/lttng-ctl/save.c @@ -16,6 +16,7 @@ */ #define _GNU_SOURCE +#define _LGPL_SOURCE #include #include @@ -99,26 +100,40 @@ int lttng_save_session_attr_set_output_url( struct lttng_save_session_attr *attr, const char *url) { int ret = 0; + size_t len; + ssize_t size; + struct lttng_uri *uris = NULL; if (!attr) { ret = -LTTNG_ERR_INVALID; goto error; } - if (url) { - size_t len; + if (!url) { + attr->configuration_url[0] = '\0'; + ret = 0; + goto end; + } - len = strlen(url); - if (len >= PATH_MAX) { - ret = -LTTNG_ERR_INVALID; - goto error; - } + len = strlen(url); + if (len >= PATH_MAX) { + ret = -LTTNG_ERR_INVALID; + goto error; + } - strncpy(attr->configuration_url, url, len); - } else { - attr->configuration_url[0] = '\0'; + size = uri_parse_str_urls(url, NULL, &uris); + if (size <= 0 || uris[0].dtype != LTTNG_DST_PATH) { + ret = -LTTNG_ERR_INVALID; + goto error; } + + /* Copy string plus the NULL terminated byte. */ + lttng_ctl_copy_string(attr->configuration_url, uris[0].dst.path, + sizeof(attr->configuration_url)); + +end: error: + free(uris); return ret; }