X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Flib%2Flttng-ctl%2Fload.c;h=e70a87d9228ae994a3da007b859a44ed11039be1;hb=75acbe19887436248352558828220eb88731d916;hp=0bebdc094514cdd48d651a6f666b006dfe1cc8d2;hpb=1b08cbce538eedab5682d174c012903d128c216f;p=lttng-tools.git diff --git a/src/lib/lttng-ctl/load.c b/src/lib/lttng-ctl/load.c index 0bebdc094..e70a87d92 100644 --- a/src/lib/lttng-ctl/load.c +++ b/src/lib/lttng-ctl/load.c @@ -47,6 +47,7 @@ void reset_load_session_attr_urls(struct lttng_load_session_attr *attr) free(attr->override_attr->path_url); free(attr->override_attr->ctrl_url); free(attr->override_attr->data_url); + free(attr->override_attr->session_name); } } @@ -59,6 +60,32 @@ void lttng_load_session_attr_destroy(struct lttng_load_session_attr *attr) } } +static int validate_attr(const struct lttng_load_session_attr *attr) +{ + int ret = 0; + + if (!attr) { + ret = -LTTNG_ERR_INVALID; + goto end; + } + + if (!attr->override_attr) { + goto end; + } + + /* + * Refuse override name if the objective is to load multiple session + * since this operation is ambiguous while loading multiple session. + */ + if (attr->override_attr->session_name + && attr->session_name[0] == '\0') { + ret = -LTTNG_ERR_INVALID; + goto end; + } +end: + return ret; +} + const char *lttng_load_session_attr_get_session_name( struct lttng_load_session_attr *attr) { @@ -89,53 +116,63 @@ int lttng_load_session_attr_get_overwrite( return attr ? attr->overwrite : -LTTNG_ERR_INVALID; } -const char *lttng_load_session_attr_get_override_path_url( +const char *lttng_load_session_attr_get_override_ctrl_url( struct lttng_load_session_attr *attr) { const char *ret = NULL; - if (attr && attr->override_attr->path_url) { - ret = attr->raw_override_path_url; + if (!attr || !attr->override_attr) { + goto end; } + ret = attr->raw_override_ctrl_url; +end: return ret; } -const char *lttng_load_session_attr_get_override_ctrl_url( +const char *lttng_load_session_attr_get_override_data_url( struct lttng_load_session_attr *attr) { const char *ret = NULL; - if (attr && attr->override_attr->ctrl_url) { - ret = attr->raw_override_ctrl_url; + if (!attr || !attr->override_attr) { + goto end; } + ret = attr->raw_override_data_url; +end: return ret; } -const char *lttng_load_session_attr_get_override_data_url( - struct lttng_load_session_attr *attr) +const char *lttng_load_session_attr_get_override_url( + struct lttng_load_session_attr *attr) { const char *ret = NULL; - if (attr && attr->override_attr->data_url) { - ret = attr->raw_override_data_url; + if (!attr || !attr->override_attr) { + goto end; } + if ((attr->override_attr->path_url || + (attr->override_attr->ctrl_url && + attr->override_attr->data_url))) { + ret = attr->raw_override_url; + } +end: return ret; } -const char *lttng_load_session_attr_get_override_url( +const char *lttng_load_session_attr_get_override_session_name( struct lttng_load_session_attr *attr) { const char *ret = NULL; - if (attr && (attr->override_attr->path_url || - (attr->override_attr->ctrl_url && - attr->override_attr->data_url))) { - ret = attr->raw_override_url; + if (!attr || !attr->override_attr) { + goto end; } + ret = attr->override_attr->session_name; +end: return ret; } @@ -536,6 +573,42 @@ end: return ret; } +int lttng_load_session_attr_set_override_session_name( + struct lttng_load_session_attr *attr, const char *session_name) +{ + int ret = 0; + size_t len; + + if (!attr ||!session_name) { + ret = -LTTNG_ERR_INVALID; + goto end; + } + + if (!attr->override_attr) { + attr->override_attr = zmalloc( + sizeof(struct config_load_session_override_attr)); + if (!attr->override_attr) { + ret = -LTTNG_ERR_NOMEM; + goto end; + } + } + + len = strlen(session_name); + if (len >= LTTNG_NAME_MAX) { + ret = -LTTNG_ERR_INVALID; + goto end; + } + + attr->override_attr->session_name = lttng_strndup(session_name, + len); + if (!attr->override_attr->session_name) { + ret = -LTTNG_ERR_NOMEM; + goto end; + } +end: + return ret; +} + int lttng_load_session(struct lttng_load_session_attr *attr) { int ret; @@ -546,6 +619,11 @@ int lttng_load_session(struct lttng_load_session_attr *attr) goto end; } + ret = validate_attr(attr); + if (ret) { + goto end; + } + url = attr->input_url[0] != '\0' ? attr->input_url : NULL; session_name = attr->session_name[0] != '\0' ? attr->session_name : NULL;