X-Git-Url: https://git.liburcu.org/?a=blobdiff_plain;f=src%2Fcommon%2Flog-level-rule.c;h=a88a31687403abe8f3704042309e61fbd0bd77aa;hb=a0377dfefe40662ba7d68617bce6ff467114136c;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..a88a31687 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 @@ -229,7 +229,7 @@ struct lttng_log_level_rule *lttng_log_level_rule_copy( { struct lttng_log_level_rule *copy = NULL; - assert(source); + LTTNG_ASSERT(source); copy = zmalloc(sizeof(struct lttng_log_level_rule)); if (!copy) { @@ -248,7 +248,7 @@ void lttng_log_level_rule_to_loglevel( 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: @@ -273,7 +273,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 +291,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 +300,75 @@ unsigned long lttng_log_level_rule_hash( return hash; } + +LTTNG_HIDDEN +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; +}