X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fcommon%2Flog-level-rule.c;h=d2bbd4176d1aa27f1f2cbca7e3a55e13040f614c;hb=48a4000561343808724f7cb5fa8c131877489ccd;hp=ca8e439e70adade5fe78c32fb776445ceda33544;hpb=85b053182c4e300c717483ad231f5c04cbf5e4b7;p=lttng-tools.git diff --git a/src/common/log-level-rule.c b/src/common/log-level-rule.c index ca8e439e7..d2bbd4176 100644 --- a/src/common/log-level-rule.c +++ b/src/common/log-level-rule.c @@ -5,12 +5,12 @@ * */ -#include #include #include -#include #include #include +#include +#include #include #include #include @@ -111,7 +111,6 @@ void lttng_log_level_rule_destroy(struct lttng_log_level_rule *log_level_rule) free(log_level_rule); } -LTTNG_HIDDEN ssize_t lttng_log_level_rule_create_from_payload( struct lttng_payload_view *view, struct lttng_log_level_rule **_rule) @@ -159,7 +158,6 @@ end: return ret; } -LTTNG_HIDDEN int lttng_log_level_rule_serialize(const struct lttng_log_level_rule *rule, struct lttng_payload *payload) { @@ -186,7 +184,6 @@ end: return ret; } -LTTNG_HIDDEN bool lttng_log_level_rule_is_equal(const struct lttng_log_level_rule *a, const struct lttng_log_level_rule *b) { @@ -223,13 +220,12 @@ end: return is_equal; } -LTTNG_HIDDEN struct lttng_log_level_rule *lttng_log_level_rule_copy( const struct lttng_log_level_rule *source) { struct lttng_log_level_rule *copy = NULL; - assert(source); + LTTNG_ASSERT(source); copy = zmalloc(sizeof(struct lttng_log_level_rule)); if (!copy) { @@ -242,13 +238,12 @@ end: return copy; } -LTTNG_HIDDEN void lttng_log_level_rule_to_loglevel( const struct lttng_log_level_rule *log_level_rule, enum lttng_loglevel_type *loglevel_type, int *loglevel_value) { - assert(log_level_rule); + LTTNG_ASSERT(log_level_rule); switch (log_level_rule->type) { case LTTNG_LOG_LEVEL_RULE_TYPE_EXACTLY: @@ -264,7 +259,6 @@ void lttng_log_level_rule_to_loglevel( *loglevel_value = log_level_rule->level; } -LTTNG_HIDDEN unsigned long lttng_log_level_rule_hash( const struct lttng_log_level_rule *log_level_rule) { @@ -273,7 +267,7 @@ unsigned long lttng_log_level_rule_hash( int log_level_value; enum lttng_log_level_rule_type type; - assert(log_level_rule); + LTTNG_ASSERT(log_level_rule); type = lttng_log_level_rule_get_type(log_level_rule); @@ -291,7 +285,7 @@ unsigned long lttng_log_level_rule_hash( break; } - assert(llr_status == LTTNG_LOG_LEVEL_RULE_STATUS_OK); + LTTNG_ASSERT(llr_status == LTTNG_LOG_LEVEL_RULE_STATUS_OK); hash = hash_key_ulong((void *) (unsigned long) type, lttng_ht_seed); @@ -300,3 +294,74 @@ unsigned long lttng_log_level_rule_hash( return hash; } + +enum lttng_error_code lttng_log_level_rule_mi_serialize( + const struct lttng_log_level_rule *rule, + struct mi_writer *writer) +{ + int ret; + enum lttng_error_code ret_code; + enum lttng_log_level_rule_status status; + const char *element_str = NULL; + int level; + + LTTNG_ASSERT(rule); + LTTNG_ASSERT(writer); + + switch (lttng_log_level_rule_get_type(rule)) { + case LTTNG_LOG_LEVEL_RULE_TYPE_EXACTLY: + status = lttng_log_level_rule_exactly_get_level(rule, &level); + element_str = mi_lttng_element_log_level_rule_exactly; + break; + case LTTNG_LOG_LEVEL_RULE_TYPE_AT_LEAST_AS_SEVERE_AS: + element_str = mi_lttng_element_log_level_rule_at_least_as_severe_as; + status = lttng_log_level_rule_at_least_as_severe_as_get_level( + rule, &level); + break; + default: + abort(); + break; + } + + LTTNG_ASSERT(status == LTTNG_LOG_LEVEL_RULE_STATUS_OK); + + /* Open log level rule element. */ + ret = mi_lttng_writer_open_element( + writer, mi_lttng_element_log_level_rule); + if (ret) { + goto mi_error; + } + + /* Log level rule type element. */ + ret = mi_lttng_writer_open_element(writer, element_str); + if (ret) { + goto mi_error; + } + + /* Level. */ + ret = mi_lttng_writer_write_element_signed_int( + writer, mi_lttng_element_log_level_rule_level, level); + if (ret) { + goto mi_error; + } + + /* Close log level rule type element. */ + ret = mi_lttng_writer_close_element(writer); + if (ret) { + goto mi_error; + } + + /* Close log level rule element. */ + ret = mi_lttng_writer_close_element(writer); + if (ret) { + goto mi_error; + } + + ret_code = LTTNG_OK; + goto end; + +mi_error: + ret_code = LTTNG_ERR_MI_IO_FAIL; +end: + return ret_code; +}