* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#define _GNU_SOURCE
+#define _LGPL_SOURCE
#include <assert.h>
#include <string.h>
return attr ? attr->overwrite : -LTTNG_ERR_INVALID;
}
+int lttng_save_session_attr_get_omit_name(
+ struct lttng_save_session_attr *attr)
+{
+ return attr ? attr->omit_name : -LTTNG_ERR_INVALID;
+}
+
+int lttng_save_session_attr_get_omit_output(
+ struct lttng_save_session_attr *attr)
+{
+ return attr ? attr->omit_output : -LTTNG_ERR_INVALID;
+}
+
int lttng_save_session_attr_set_session_name(
struct lttng_save_session_attr *attr, const char *session_name)
{
size_t len;
len = strlen(session_name);
- if (len >= NAME_MAX) {
+ if (len >= LTTNG_NAME_MAX) {
ret = -LTTNG_ERR_INVALID;
goto error;
}
- strncpy(attr->session_name, session_name, len);
+ ret = lttng_strncpy(attr->session_name, session_name,
+ sizeof(attr->session_name));
+ if (ret) {
+ ret = -LTTNG_ERR_INVALID;
+ goto error;
+ }
} else {
attr->session_name[0] = '\0';
}
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;
}
return ret;
}
+int lttng_save_session_attr_set_omit_name(
+ struct lttng_save_session_attr *attr, int omit_name)
+{
+ int ret = 0;
+
+ if (!attr) {
+ ret = -LTTNG_ERR_INVALID;
+ goto end;
+ }
+
+ attr->omit_name = !!omit_name;
+end:
+ return ret;
+}
+
+int lttng_save_session_attr_set_omit_output(
+ struct lttng_save_session_attr *attr, int omit_output)
+{
+ int ret = 0;
+
+ if (!attr) {
+ ret = -LTTNG_ERR_INVALID;
+ goto end;
+ }
+
+ attr->omit_output = !!omit_output;
+end:
+ return ret;
+}
+
/*
* The lttng-ctl API does not expose all the information needed to save the
* session configurations. Thus, we must send a save command to the session