X-Git-Url: http://git.efficios.com/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Flib%2Flttng-ctl%2Ffilter%2Ffilter-visitor-xml.c;h=9352742a51c50d8c81a0afce2fe60973912682c0;hp=1d14f2eab40fbbdb564a51bae821346bec065635;hb=116d3c01872d62ee86bdbd0aea575b12fbc9c272;hpb=d804b36b2b3e7f6d2bcb8f2ff1ace8b04e2a3cfc diff --git a/src/lib/lttng-ctl/filter/filter-visitor-xml.c b/src/lib/lttng-ctl/filter/filter-visitor-xml.c index 1d14f2eab..9352742a5 100644 --- a/src/lib/lttng-ctl/filter/filter-visitor-xml.c +++ b/src/lib/lttng-ctl/filter/filter-visitor-xml.c @@ -29,6 +29,8 @@ #include "filter-ast.h" #include "filter-parser.h" +#include + #define fprintf_dbg(fd, fmt, args...) fprintf(fd, "%s: " fmt, __func__, ## args) static @@ -47,6 +49,8 @@ static int recursive_visit_print_expression(struct filter_node *node, FILE *stream, int indent) { + struct filter_node *iter_node; + if (!node) { fprintf(stderr, "[error] %s: NULL child\n", __func__); return -EINVAL; @@ -71,37 +75,25 @@ int recursive_visit_print_expression(struct filter_node *node, fprintf(stream, "\n", node->u.expression.u.float_constant); break; - case AST_EXP_IDENTIFIER: + case AST_EXP_IDENTIFIER: /* fall-through */ + case AST_EXP_GLOBAL_IDENTIFIER: print_tabs(stream, indent); - fprintf(stream, "\n", + fprintf(stream, "<%s value=\"%s\"/>\n", + node->u.expression.type == AST_EXP_IDENTIFIER ? + "identifier" : "global_identifier", node->u.expression.u.identifier); - while (node->u.expression.next) { + iter_node = node->u.expression.next; + while (iter_node) { print_tabs(stream, indent); - fprintf(stream, "u.expression.pre_op) { - case AST_LINK_UNKNOWN: - default: - fprintf(stderr, "[error] %s: unknown link\n", __func__); + fprintf(stream, "\n"); + if (recursive_visit_print_expression(iter_node, + stream, indent + 1)) { return -EINVAL; - case AST_LINK_DOT: - fprintf(stream, "."); - break; - case AST_LINK_RARROW: - fprintf(stream, "->"); - break; } - fprintf(stream, "\"/>\n"); - - node = node->u.expression.next; - if (node->type != NODE_EXPRESSION || - node->u.expression.type != AST_EXP_IDENTIFIER) { - fprintf(stderr, "[error] %s: expecting identifier before link\n", __func__); - return -EINVAL; - } - print_tabs(stream, indent); - fprintf(stream, "\n", - node->u.expression.u.identifier); + fprintf(stream, "\n"); + iter_node = iter_node->u.expression.next; + } break; case AST_EXP_NESTED: @@ -165,10 +157,10 @@ int recursive_visit_print(struct filter_node *node, FILE *stream, int indent) case AST_OP_MINUS: fprintf(stream, "\"-\""); break; - case AST_OP_RSHIFT: + case AST_OP_BIT_RSHIFT: fprintf(stream, "\">>\""); break; - case AST_OP_LSHIFT: + case AST_OP_BIT_LSHIFT: fprintf(stream, "\"<<\""); break; case AST_OP_AND: @@ -177,13 +169,13 @@ int recursive_visit_print(struct filter_node *node, FILE *stream, int indent) case AST_OP_OR: fprintf(stream, "\"||\""); break; - case AST_OP_BIN_AND: + case AST_OP_BIT_AND: fprintf(stream, "\"&\""); break; - case AST_OP_BIN_OR: + case AST_OP_BIT_OR: fprintf(stream, "\"|\""); break; - case AST_OP_BIN_XOR: + case AST_OP_BIT_XOR: fprintf(stream, "\"^\""); break; @@ -235,7 +227,7 @@ int recursive_visit_print(struct filter_node *node, FILE *stream, int indent) case AST_UNARY_NOT: fprintf(stream, "\"!\""); break; - case AST_UNARY_BIN_NOT: + case AST_UNARY_BIT_NOT: fprintf(stream, "\"~\""); break; } @@ -249,7 +241,7 @@ int recursive_visit_print(struct filter_node *node, FILE *stream, int indent) return 0; } -__attribute__((visibility("hidden"))) +LTTNG_HIDDEN int filter_visitor_print_xml(struct filter_parser_ctx *ctx, FILE *stream, int indent) {