X-Git-Url: https://git.liburcu.org/?a=blobdiff_plain;f=src%2Flib%2Flttng-ctl%2Fsnapshot.c;h=dd36aacc44375c4f44b77d94feedb1e7ce9b98ed;hb=55fb8091d6b72decba72edf53034b05764cc8dac;hp=9dc2c679b885da9de502e71d8fba9268c0d0a6de;hpb=da3c9ec137aaec74635ca1f5584040c20b1d3d7b;p=lttng-tools.git diff --git a/src/lib/lttng-ctl/snapshot.c b/src/lib/lttng-ctl/snapshot.c index 9dc2c679b..dd36aacc4 100644 --- a/src/lib/lttng-ctl/snapshot.c +++ b/src/lib/lttng-ctl/snapshot.c @@ -15,7 +15,7 @@ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#define _GNU_SOURCE +#define _LGPL_SOURCE #include #include @@ -39,26 +39,33 @@ int lttng_snapshot_add_output(const char *session_name, struct lttcomm_lttng_output_id *reply; if (!session_name || !output) { - return -LTTNG_ERR_INVALID; + ret = -LTTNG_ERR_INVALID; + goto end; } memset(&lsm, 0, sizeof(lsm)); lsm.cmd_type = LTTNG_SNAPSHOT_ADD_OUTPUT; - lttng_ctl_copy_string(lsm.session.name, session_name, + ret = lttng_strncpy(lsm.session.name, session_name, sizeof(lsm.session.name)); + if (ret) { + ret = -LTTNG_ERR_INVALID; + goto end; + } + memcpy(&lsm.u.snapshot_output.output, output, sizeof(lsm.u.snapshot_output.output)); ret = lttng_ctl_ask_sessiond(&lsm, (void **) &reply); if (ret < 0) { - return ret; + goto end; } output->id = reply->id; free(reply); - - return 0; + ret = 0; +end: + return ret; } /* @@ -69,21 +76,30 @@ int lttng_snapshot_add_output(const char *session_name, int lttng_snapshot_del_output(const char *session_name, struct lttng_snapshot_output *output) { + int ret; struct lttcomm_session_msg lsm; if (!session_name || !output) { - return -LTTNG_ERR_INVALID; + ret = -LTTNG_ERR_INVALID; + goto end; } memset(&lsm, 0, sizeof(lsm)); lsm.cmd_type = LTTNG_SNAPSHOT_DEL_OUTPUT; - lttng_ctl_copy_string(lsm.session.name, session_name, - sizeof(lsm.session.name)); + ret = lttng_strncpy(lsm.session.name, session_name, + sizeof(lsm.session.name)); + if (ret) { + ret = -LTTNG_ERR_INVALID; + goto end; + } + memcpy(&lsm.u.snapshot_output.output, output, sizeof(lsm.u.snapshot_output.output)); - return lttng_ctl_ask_sessiond(&lsm, NULL); + ret = lttng_ctl_ask_sessiond(&lsm, NULL); +end: + return ret; } /* @@ -108,8 +124,12 @@ int lttng_snapshot_list_output(const char *session_name, memset(&lsm, 0, sizeof(lsm)); lsm.cmd_type = LTTNG_SNAPSHOT_LIST_OUTPUT; - lttng_ctl_copy_string(lsm.session.name, session_name, - sizeof(lsm.session.name)); + ret = lttng_strncpy(lsm.session.name, session_name, + sizeof(lsm.session.name)); + if (ret) { + ret = -LTTNG_ERR_INVALID; + goto error; + } new_list = zmalloc(sizeof(*new_list)); if (!new_list) { @@ -189,17 +209,23 @@ void lttng_snapshot_output_list_destroy(struct lttng_snapshot_output_list *list) int lttng_snapshot_record(const char *session_name, struct lttng_snapshot_output *output, int wait) { + int ret; struct lttcomm_session_msg lsm; if (!session_name) { - return -LTTNG_ERR_INVALID; + ret = -LTTNG_ERR_INVALID; + goto end; } memset(&lsm, 0, sizeof(lsm)); lsm.cmd_type = LTTNG_SNAPSHOT_RECORD; - lttng_ctl_copy_string(lsm.session.name, session_name, + ret = lttng_strncpy(lsm.session.name, session_name, sizeof(lsm.session.name)); + if (ret) { + ret = -LTTNG_ERR_INVALID; + goto end; + } /* * Not having an output object will use the default one of the session that @@ -212,8 +238,9 @@ int lttng_snapshot_record(const char *session_name, } /* The wait param is ignored. */ - - return lttng_ctl_ask_sessiond(&lsm, NULL); + ret = lttng_ctl_ask_sessiond(&lsm, NULL); +end: + return ret; } /* @@ -221,7 +248,17 @@ int lttng_snapshot_record(const char *session_name, */ struct lttng_snapshot_output *lttng_snapshot_output_create(void) { - return zmalloc(sizeof(struct lttng_snapshot_output)); + struct lttng_snapshot_output *output; + + output = zmalloc(sizeof(struct lttng_snapshot_output)); + if (!output) { + goto error; + } + + output->max_size = (uint64_t) -1ULL; + +error: + return output; } /* @@ -294,32 +331,59 @@ int lttng_snapshot_output_set_size(uint64_t size, int lttng_snapshot_output_set_name(const char *name, struct lttng_snapshot_output *output) { + int ret; + if (!output || !name) { - return -LTTNG_ERR_INVALID; + ret = -LTTNG_ERR_INVALID; + goto end; } - lttng_ctl_copy_string(output->name, name, sizeof(output->name)); - return 0; + ret = lttng_strncpy(output->name, name, sizeof(output->name)); + if (ret) { + ret = -LTTNG_ERR_INVALID; + goto end; + } + +end: + return ret; } int lttng_snapshot_output_set_ctrl_url(const char *url, struct lttng_snapshot_output *output) { + int ret; + if (!output || !url) { - return -LTTNG_ERR_INVALID; + ret = -LTTNG_ERR_INVALID; + goto end; } - lttng_ctl_copy_string(output->ctrl_url, url, sizeof(output->ctrl_url)); - return 0; + ret = lttng_strncpy(output->ctrl_url, url, sizeof(output->ctrl_url)); + if (ret) { + ret = -LTTNG_ERR_INVALID; + goto end; + } + +end: + return ret; } int lttng_snapshot_output_set_data_url(const char *url, struct lttng_snapshot_output *output) { + int ret; + if (!output || !url) { - return -LTTNG_ERR_INVALID; + ret = -LTTNG_ERR_INVALID; + goto end; } - lttng_ctl_copy_string(output->data_url, url, sizeof(output->data_url)); - return 0; + ret = lttng_strncpy(output->data_url, url, sizeof(output->data_url)); + if (ret) { + ret = -LTTNG_ERR_INVALID; + goto end; + } + +end: + return ret; }