Tests: possible NULL dereference in rotation notification test
[lttng-tools.git] / src / lib / lttng-ctl / lttng-ctl.c
index 3db9b89b440d12796ce7565423cac04d2f7db2ad..f0f2e801c0128065e1d143b27bc6d929b69c0249 100644 (file)
@@ -887,12 +887,6 @@ static int generate_filter(char *filter_expression,
                ret = -LTTNG_ERR_FILTER_INVAL;
                goto parse_error;
        }
-       ret = filter_visitor_set_parent(ctx);
-       if (ret) {
-               fprintf(stderr, "Set parent error\n");
-               ret = -LTTNG_ERR_FILTER_INVAL;
-               goto parse_error;
-       }
        if (print_xml) {
                ret = filter_visitor_print_xml(ctx, stdout, 0);
                if (ret) {
@@ -2672,9 +2666,9 @@ int lttng_register_trigger(struct lttng_trigger *trigger)
 {
        int ret;
        struct lttcomm_session_msg lsm;
-       char *trigger_buf = NULL;
-       ssize_t trigger_size;
+       struct lttng_dynamic_buffer buffer;
 
+       lttng_dynamic_buffer_init(&buffer);
        if (!trigger) {
                ret = -LTTNG_ERR_INVALID;
                goto end;
@@ -2685,30 +2679,19 @@ int lttng_register_trigger(struct lttng_trigger *trigger)
                goto end;
        }
 
-       trigger_size = lttng_trigger_serialize(trigger, NULL);
-       if (trigger_size < 0) {
+       ret = lttng_trigger_serialize(trigger, &buffer);
+       if (ret < 0) {
                ret = -LTTNG_ERR_UNK;
                goto end;
        }
 
-       trigger_buf = zmalloc(trigger_size);
-       if (!trigger_buf) {
-               ret = -LTTNG_ERR_NOMEM;
-               goto end;
-       }
-
        memset(&lsm, 0, sizeof(lsm));
        lsm.cmd_type = LTTNG_REGISTER_TRIGGER;
-       if (lttng_trigger_serialize(trigger, trigger_buf) < 0) {
-               ret = -LTTNG_ERR_UNK;
-               goto end;
-       }
-
-       lsm.u.trigger.length = (uint32_t) trigger_size;
-       ret = lttng_ctl_ask_sessiond_varlen_no_cmd_header(&lsm, trigger_buf,
-                       trigger_size, NULL);
+       lsm.u.trigger.length = (uint32_t) buffer.size;
+       ret = lttng_ctl_ask_sessiond_varlen_no_cmd_header(&lsm, buffer.data,
+                       buffer.size, NULL);
 end:
-       free(trigger_buf);
+       lttng_dynamic_buffer_reset(&buffer);
        return ret;
 }
 
@@ -2716,43 +2699,76 @@ int lttng_unregister_trigger(struct lttng_trigger *trigger)
 {
        int ret;
        struct lttcomm_session_msg lsm;
-       char *trigger_buf = NULL;
-       ssize_t trigger_size;
+       struct lttng_dynamic_buffer buffer;
 
+       lttng_dynamic_buffer_init(&buffer);
        if (!trigger) {
                ret = -LTTNG_ERR_INVALID;
                goto end;
        }
 
        if (!lttng_trigger_validate(trigger)) {
-               ret = -LTTNG_ERR_INVALID;
+               ret = -LTTNG_ERR_INVALID_TRIGGER;
                goto end;
        }
 
-       trigger_size = lttng_trigger_serialize(trigger, NULL);
-       if (trigger_size < 0) {
+       ret = lttng_trigger_serialize(trigger, &buffer);
+       if (ret < 0) {
                ret = -LTTNG_ERR_UNK;
                goto end;
        }
 
-       trigger_buf = zmalloc(trigger_size);
-       if (!trigger_buf) {
-               ret = -LTTNG_ERR_NOMEM;
+       memset(&lsm, 0, sizeof(lsm));
+       lsm.cmd_type = LTTNG_UNREGISTER_TRIGGER;
+       lsm.u.trigger.length = (uint32_t) buffer.size;
+       ret = lttng_ctl_ask_sessiond_varlen_no_cmd_header(&lsm, buffer.data,
+                       buffer.size, NULL);
+end:
+       lttng_dynamic_buffer_reset(&buffer);
+       return ret;
+}
+
+int lttng_session_get_current_archive_location(const char *session_name,
+               char **chunk_path)
+{
+       struct lttcomm_session_msg lsm;
+       struct lttng_session_get_current_output_return *output_return = NULL;
+       int ret;
+       size_t path_len;
+
+       memset(&lsm, 0, sizeof(lsm));
+       lsm.cmd_type = LTTNG_SESSION_GET_CURRENT_OUTPUT;
+       ret = lttng_strncpy(lsm.session.name, session_name,
+                       sizeof(lsm.session.name));
+       if (ret) {
+               ret = -LTTNG_ERR_INVALID;
                goto end;
        }
 
-       memset(&lsm, 0, sizeof(lsm));
-       lsm.cmd_type = LTTNG_UNREGISTER_TRIGGER;
-       if (lttng_trigger_serialize(trigger, trigger_buf) < 0) {
-               ret = -LTTNG_ERR_UNK;
+       ret = lttng_ctl_ask_sessiond(&lsm, (void **) &output_return);
+       if (ret < 0) {
+               ret = -1;
+               goto end;
+       }
+
+       path_len = lttng_strnlen(output_return->path,
+                       sizeof(output_return->path));
+       if (path_len == 0 || path_len == sizeof(output_return->path)) {
+               ret = -LTTNG_ERR_NO_SESSION_OUTPUT;
                goto end;
        }
 
-       lsm.u.trigger.length = (uint32_t) trigger_size;
-       ret = lttng_ctl_ask_sessiond_varlen_no_cmd_header(&lsm, trigger_buf,
-                       trigger_size, NULL);
+       *chunk_path = zmalloc(path_len + 1);
+       if (!*chunk_path) {
+               ret = -1;
+               goto end;
+       }
+       memcpy(*chunk_path, output_return->path, path_len);
+
+       ret = 0;
+
 end:
-       free(trigger_buf);
+       free(output_return);
        return ret;
 }
 
This page took 0.027504 seconds and 5 git commands to generate.