X-Git-Url: http://git.efficios.com/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Flib%2Flttng-ctl%2Fload.c;h=28e1dbac6d2969eaa69b60e6c39260bb4f53d7f4;hp=f89effed04b8b69b23e186dfee6237e8b8cfe10d;hb=d3219302b0e0c9dda470d73a7b9ee48e759756b5;hpb=49c360e815ad63e137ba9664f786c91df76d27b3 diff --git a/src/lib/lttng-ctl/load.c b/src/lib/lttng-ctl/load.c index f89effed0..28e1dbac6 100644 --- a/src/lib/lttng-ctl/load.c +++ b/src/lib/lttng-ctl/load.c @@ -1,18 +1,8 @@ /* - * Copyright (C) 2014 - David Goulet + * Copyright (C) 2014 David Goulet * - * This library is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License, version 2.1 only, - * as published by the Free Software Foundation. + * SPDX-License-Identifier: LGPL-2.1-only * - * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #define _LGPL_SOURCE @@ -47,6 +37,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 +50,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) { @@ -135,6 +152,20 @@ end: return ret; } +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) { + goto end; + } + + ret = attr->override_attr->session_name; +end: + return ret; +} + int lttng_load_session_attr_set_session_name( struct lttng_load_session_attr *attr, const char *session_name) { @@ -154,7 +185,12 @@ int lttng_load_session_attr_set_session_name( 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'; } @@ -532,6 +568,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; @@ -542,6 +614,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;