X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Flib%2Flttng-ctl%2Flttng-ctl.c;h=775d1c324f4ee098a016cd40e556565fd186ce6a;hb=4d86847e8786d4902dceeb1dff91791112d2c396;hp=c9fb293be1ed74411d20238ec7f94663a613041e;hpb=178191b3899f114001f000c2e7f46909969f9c6f;p=lttng-tools.git diff --git a/src/lib/lttng-ctl/lttng-ctl.c b/src/lib/lttng-ctl/lttng-ctl.c index c9fb293be..775d1c324 100644 --- a/src/lib/lttng-ctl/lttng-ctl.c +++ b/src/lib/lttng-ctl/lttng-ctl.c @@ -90,7 +90,6 @@ static void set_default_url_attr(struct lttng_uri *uri, static ssize_t parse_str_urls_to_uri(const char *ctrl_url, const char *data_url, struct lttng_uri **uris) { - int ret; unsigned int equal = 1, idx = 0; /* Add the "file://" size to the URL maximum size */ char url[PATH_MAX + 7]; @@ -115,6 +114,8 @@ static ssize_t parse_str_urls_to_uri(const char *ctrl_url, const char *data_url, * Check if first character is a '/' or else reject the URL. */ if (ctrl_url && ctrl_url[0] == '/') { + int ret; + ret = snprintf(url, sizeof(url), "file://%s", ctrl_url); if (ret < 0) { PERROR("snprintf file url"); @@ -414,7 +415,6 @@ error: */ static int set_session_daemon_path(void) { - int ret; int in_tgroup = 0; /* In tracing group */ uid_t uid; @@ -431,6 +431,8 @@ static int set_session_daemon_path(void) } if (uid != 0) { + int ret; + if (in_tgroup) { /* Tracing group */ ret = try_connect_sessiond(sessiond_sock_path); @@ -827,12 +829,12 @@ int lttng_enable_event(struct lttng_handle *handle, } /* - * Set filter for an event + * Create or enable an event with a filter expression. * * Return negative error value on error. * Return size of returned session payload data if OK. */ -int lttng_set_event_filter(struct lttng_handle *handle, +int lttng_enable_event_with_filter(struct lttng_handle *handle, struct lttng_event *event, const char *channel_name, const char *filter_expression) { @@ -841,13 +843,21 @@ int lttng_set_event_filter(struct lttng_handle *handle, FILE *fmem; int ret = 0; - /* Safety check. */ - if (handle == NULL) { - return -LTTNG_ERR_INVALID; + if (!filter_expression) { + /* + * Fall back to normal event enabling if no filter + * specified. + */ + return lttng_enable_event(handle, event, channel_name); } - if (!filter_expression) { - return 0; + /* + * Empty filter string will always be rejected by the parser + * anyway, so treat this corner-case early to eliminate + * lttng_fmemopen error for 0-byte allocation. + */ + if (handle == NULL || filter_expression[0] == '\0') { + return -LTTNG_ERR_INVALID; } /* @@ -921,17 +931,17 @@ int lttng_set_event_filter(struct lttng_handle *handle, memset(&lsm, 0, sizeof(lsm)); - lsm.cmd_type = LTTNG_SET_FILTER; + lsm.cmd_type = LTTNG_ENABLE_EVENT_WITH_FILTER; /* Copy channel name */ - copy_string(lsm.u.filter.channel_name, channel_name, - sizeof(lsm.u.filter.channel_name)); + copy_string(lsm.u.enable.channel_name, channel_name, + sizeof(lsm.u.enable.channel_name)); /* Copy event name */ if (event) { memcpy(&lsm.u.enable.event, event, sizeof(lsm.u.enable.event)); } - lsm.u.filter.bytecode_len = sizeof(ctx->bytecode->b) + lsm.u.enable.bytecode_len = sizeof(ctx->bytecode->b) + bytecode_get_len(&ctx->bytecode->b); copy_lttng_domain(&lsm.domain, &handle->domain); @@ -940,7 +950,7 @@ int lttng_set_event_filter(struct lttng_handle *handle, sizeof(lsm.session.name)); ret = ask_sessiond_varlen(&lsm, &ctx->bytecode->b, - lsm.u.filter.bytecode_len, NULL); + lsm.u.enable.bytecode_len, NULL); filter_bytecode_free(ctx); filter_ir_free(ctx); @@ -1488,7 +1498,6 @@ int lttng_disable_consumer(struct lttng_handle *handle) */ static int set_health_socket_path(void) { - int ret; int in_tgroup = 0; /* In tracing group */ uid_t uid; const char *home; @@ -1506,6 +1515,8 @@ static int set_health_socket_path(void) } if (uid != 0) { + int ret; + /* * With GNU C < 2.1, snprintf returns -1 if the target buffer is too small; * With GNU C >= 2.1, snprintf returns the required size (excluding closing null) @@ -1593,7 +1604,6 @@ error: int _lttng_create_session_ext(const char *name, const char *url, const char *datetime) { - int ret; ssize_t size; struct lttcomm_session_msg lsm; struct lttng_uri *uris = NULL; @@ -1616,6 +1626,8 @@ int _lttng_create_session_ext(const char *name, const char *url, lsm.u.uri.size = size; if (size > 0 && uris[0].dtype != LTTNG_DST_PATH && strlen(uris[0].subdir) == 0) { + int ret; + ret = snprintf(uris[0].subdir, sizeof(uris[0].subdir), "%s-%s", name, datetime); if (ret < 0) {