diff options
author | Patrick McHardy <kaber@trash.net> | 2010-07-06 05:57:20 +0200 |
---|---|---|
committer | Patrick McHardy <kaber@trash.net> | 2010-07-06 05:57:20 +0200 |
commit | 653e35bca873414964c9cde0bd98bca3e0bf6692 (patch) | |
tree | ff6e17befb8f45d817a67329742339301c1ce65a /src | |
parent | 3a3cd6215d49cb02841b2b20cf8fa9b91de3a831 (diff) |
debug: properly parse debug levels
Signed-off-by: Patrick McHardy <kaber@trash.net>
Diffstat (limited to 'src')
-rw-r--r-- | src/evaluate.c | 32 | ||||
-rw-r--r-- | src/main.c | 56 | ||||
-rw-r--r-- | src/parser.y | 8 |
3 files changed, 77 insertions, 19 deletions
diff --git a/src/evaluate.c b/src/evaluate.c index f3723779..6330a806 100644 --- a/src/evaluate.c +++ b/src/evaluate.c @@ -23,8 +23,6 @@ #include <gmputil.h> #include <utils.h> -#define TRACE 0 - static int expr_evaluate(struct eval_ctx *ctx, struct expr **expr); static int stmt_evaluate(struct eval_ctx *ctx, struct stmt *stmt); @@ -963,10 +961,12 @@ range: static int expr_evaluate(struct eval_ctx *ctx, struct expr **expr) { -#if TRACE - struct error_record *erec; - erec = erec_create(EREC_INFORMATIONAL, &(*expr)->location, "Evaluate"); - erec_print(stdout, erec); expr_print(*expr); printf("\n\n"); +#ifdef DEBUG + if (debug_level & DEBUG_EVALUATION) { + struct error_record *erec; + erec = erec_create(EREC_INFORMATIONAL, &(*expr)->location, "Evaluate"); + erec_print(stdout, erec); expr_print(*expr); printf("\n\n"); + } #endif switch ((*expr)->ops->type) { @@ -1074,10 +1074,12 @@ static int stmt_evaluate_nat(struct eval_ctx *ctx, struct stmt *stmt) static int stmt_evaluate(struct eval_ctx *ctx, struct stmt *stmt) { -#if TRACE - struct error_record *erec; - erec = erec_create(EREC_INFORMATIONAL, &stmt->location, "Evaluate"); - erec_print(stdout, erec); stmt_print(stmt); printf("\n\n"); +#ifdef DEBUG + if (debug_level & DEBUG_EVALUATION) { + struct error_record *erec; + erec = erec_create(EREC_INFORMATIONAL, &stmt->location, "Evaluate"); + erec_print(stdout, erec); stmt_print(stmt); printf("\n\n"); + } #endif switch (stmt->ops->type) { @@ -1241,10 +1243,12 @@ static int cmd_evaluate_delete(struct eval_ctx *ctx, struct cmd *cmd) static int cmd_evaluate(struct eval_ctx *ctx, struct cmd *cmd) { -#if TRACE - struct error_record *erec; - erec = erec_create(EREC_INFORMATIONAL, &cmd->location, "Evaluate"); - erec_print(stdout, erec); printf("\n\n"); +#ifdef DEBUG + if (debug_level & DEBUG_EVALUATION) { + struct error_record *erec; + erec = erec_create(EREC_INFORMATIONAL, &cmd->location, "Evaluate"); + erec_print(stdout, erec); printf("\n\n"); + } #endif ctx->cmd = cmd; @@ -102,12 +102,40 @@ static void show_help(const char *name) " Internet services, user IDs and group IDs numerically.\n" " -i/--includepath <directory> Add <directory> to the paths searched for include files.\n" #ifdef DEBUG -" --debug <level> Specify debugging level\n" +" --debug <level [,level...]> Specify debugging level (scanner, parser, eval, netlink, all)\n" #endif "\n", name); } +#ifdef DEBUG +static const struct { + const char *name; + enum debug_level level; +} debug_param[] = { + { + .name = "scanner", + .level = DEBUG_SCANNER, + }, + { + .name = "parser", + .level = DEBUG_PARSER, + }, + { + .name = "eval", + .level = DEBUG_EVALUATION, + }, + { + .name = "netlink", + .level = DEBUG_NETLINK, + }, + { + .name = "all", + .level = ~0, + }, +}; +#endif + static const struct input_descriptor indesc_cmdline = { .type = INDESC_BUFFER, .name = "<cmdline>", @@ -158,7 +186,31 @@ int main(int argc, char * const *argv) break; #ifdef DEBUG case OPT_DEBUG: - debug_level |= DEBUG_NETLINK; + for (;;) { + unsigned int i; + char *end; + + end = strchr(optarg, ','); + if (end) + *end = '\0'; + + for (i = 0; i < array_size(debug_param); i++) { + if (strcmp(debug_param[i].name, optarg)) + continue; + debug_level |= debug_param[i].level; + break; + } + + if (i == array_size(debug_param)) { + fprintf(stderr, "invalid debug parameter `%s'\n", + optarg); + exit(NFT_EXIT_FAILURE); + } + + if (end == NULL) + break; + optarg = end + 1; + } break; #endif case OPT_INVALID: diff --git a/src/parser.y b/src/parser.y index 7668cbf2..f70b505d 100644 --- a/src/parser.y +++ b/src/parser.y @@ -101,9 +101,11 @@ static void location_update(struct location *loc, struct location *rhs, int n) %initial-action { location_init(scanner, state, &yylloc); -#if 0 - nft_set_debug(1, scanner); - yydebug = 1; +#ifdef DEBUG + if (debug_level & DEBUG_SCANNER) + nft_set_debug(1, scanner); + if (debug_level & DEBUG_PARSER) + yydebug = 1; #endif } |