From 289716f9c31b64e60a490fbd06112ce1ee6749fb Mon Sep 17 00:00:00 2001 From: Stephan Bosch <stephan@rename-it.nl> Date: Thu, 6 Dec 2007 15:43:47 +0100 Subject: [PATCH] Adopted code to use Dovecot's new T_FRAME* macros. --- src/lib-sieve/ext-reject.c | 4 +++- src/lib-sieve/sieve-address-parts.c | 36 ++++++++++++++--------------- src/lib-sieve/sieve-ast.c | 14 +++++------ src/lib-sieve/sieve-commands.c | 28 +++++++++++----------- src/lib-sieve/sieve-error.c | 16 ++++++------- src/lib-sieve/sieve-error.h | 9 +++++--- src/lib-sieve/sieve-generator.c | 14 +++++------ src/lib-sieve/sieve-interpreter.c | 12 +++++++--- src/lib-sieve/sieve-lexer.c | 8 +++---- src/lib-sieve/sieve-parser.c | 8 +++---- src/lib-sieve/sieve-validator.c | 22 +++++++++--------- 11 files changed, 88 insertions(+), 83 deletions(-) diff --git a/src/lib-sieve/ext-reject.c b/src/lib-sieve/ext-reject.c index c1345683a..e4f9db3cd 100644 --- a/src/lib-sieve/ext-reject.c +++ b/src/lib-sieve/ext-reject.c @@ -193,8 +193,10 @@ static bool ext_reject_opcode_execute t_push(); - if ( !sieve_interpreter_handle_optional_operands(renv, address, &slist) ) + if ( !sieve_interpreter_handle_optional_operands(renv, address, &slist) ) { + t_pop(); return FALSE; + } if ( !sieve_opr_string_read(renv->sbin, address, &reason) ) { t_pop(); diff --git a/src/lib-sieve/sieve-address-parts.c b/src/lib-sieve/sieve-address-parts.c index 6e72de6bd..1bf2c80b5 100644 --- a/src/lib-sieve/sieve-address-parts.c +++ b/src/lib-sieve/sieve-address-parts.c @@ -345,30 +345,28 @@ bool sieve_address_match { bool matched = FALSE; const struct message_address *addr; + + T_FRAME( + addr = message_address_parse + (pool_datastack_create(), (const unsigned char *) data, + strlen(data), 256, FALSE); - t_push(); - - addr = message_address_parse - (pool_datastack_create(), (const unsigned char *) data, - strlen(data), 256, FALSE); - - while (!matched && addr != NULL) { - if (addr->domain != NULL) { - /* mailbox@domain */ - const char *part; + while (!matched && addr != NULL) { + if (addr->domain != NULL) { + /* mailbox@domain */ + const char *part; - i_assert(addr->mailbox != NULL); + i_assert(addr->mailbox != NULL); - part = addrp->extract_from(addr); + part = addrp->extract_from(addr); - if ( part != NULL && sieve_match_value(mctx, part) ) - matched = TRUE; - } + if ( part != NULL && sieve_match_value(mctx, part) ) + matched = TRUE; + } - addr = addr->next; - } - - t_pop(); + addr = addr->next; + } + ); return matched; } diff --git a/src/lib-sieve/sieve-ast.c b/src/lib-sieve/sieve-ast.c index 81609edb6..47af4aef0 100644 --- a/src/lib-sieve/sieve-ast.c +++ b/src/lib-sieve/sieve-ast.c @@ -583,13 +583,13 @@ void sieve_ast_unparse(struct sieve_ast *ast) { printf("Unparsing Abstract Syntax Tree:\n"); - t_push(); - command = sieve_ast_command_first(sieve_ast_root(ast)); - while ( command != NULL ) { - sieve_ast_unparse_command(command, 0); - command = sieve_ast_command_next(command); - } - t_pop(); + T_FRAME( + command = sieve_ast_command_first(sieve_ast_root(ast)); + while ( command != NULL ) { + sieve_ast_unparse_command(command, 0); + command = sieve_ast_command_next(command); + } + ); } diff --git a/src/lib-sieve/sieve-commands.c b/src/lib-sieve/sieve-commands.c index 37d508711..1a171b694 100644 --- a/src/lib-sieve/sieve-commands.c +++ b/src/lib-sieve/sieve-commands.c @@ -65,21 +65,19 @@ static void emit_string_list_operand void *list_context; const struct sieve_ast_argument *stritem; - t_push(); - - sieve_opr_stringlist_emit_start - (sbin, sieve_ast_strlist_count(strlist), &list_context); - - stritem = sieve_ast_strlist_first(strlist); - while ( stritem != NULL ) { - sieve_opr_stringlist_emit_item - (sbin, list_context, sieve_ast_strlist_str(stritem)); - stritem = sieve_ast_strlist_next(stritem); - } - - sieve_opr_stringlist_emit_end(sbin, list_context); - - t_pop(); + T_FRAME( + sieve_opr_stringlist_emit_start + (sbin, sieve_ast_strlist_count(strlist), &list_context); + + stritem = sieve_ast_strlist_first(strlist); + while ( stritem != NULL ) { + sieve_opr_stringlist_emit_item + (sbin, list_context, sieve_ast_strlist_str(stritem)); + stritem = sieve_ast_strlist_next(stritem); + } + + sieve_opr_stringlist_emit_end(sbin, list_context); + ); } static bool arg_string_list_generate diff --git a/src/lib-sieve/sieve-error.c b/src/lib-sieve/sieve-error.c index db75f133b..4cfec4fef 100644 --- a/src/lib-sieve/sieve-error.c +++ b/src/lib-sieve/sieve-error.c @@ -175,16 +175,14 @@ static void sieve_logfile_vprintf if ( ehandler->stream == NULL ) return; - t_push(); + T_FRAME( + outbuf = t_str_new(256); + str_printfa(outbuf, "%s: %s: ", location, prefix); + str_vprintfa(outbuf, fmt, args); + str_append(outbuf, ".\n"); - outbuf = t_str_new(256); - str_printfa(outbuf, "%s: %s: ", location, prefix); - str_vprintfa(outbuf, fmt, args); - str_append(outbuf, ".\n"); - - o_stream_send(ehandler->stream, str_data(outbuf), str_len(outbuf)); - - t_pop(); + o_stream_send(ehandler->stream, str_data(outbuf), str_len(outbuf)); + ); } inline static void sieve_logfile_printf diff --git a/src/lib-sieve/sieve-error.h b/src/lib-sieve/sieve-error.h index dc2c9add3..2a095abcf 100644 --- a/src/lib-sieve/sieve-error.h +++ b/src/lib-sieve/sieve-error.h @@ -8,6 +8,9 @@ struct sieve_error_handler; +/* For these functions it is the responsibility of the caller to + * manage the datastack. + */ void sieve_verror (struct sieve_error_handler *ehandler, const char *location, const char *fmt, va_list args); @@ -35,7 +38,7 @@ inline static void sieve_error va_list args; va_start(args, fmt); - sieve_verror(ehandler, location, fmt, args); + T_FRAME(sieve_verror(ehandler, location, fmt, args)); va_end(args); } @@ -47,7 +50,7 @@ inline static void sieve_warning va_list args; va_start(args, fmt); - sieve_vwarning(ehandler, location, fmt, args); + T_FRAME(sieve_vwarning(ehandler, location, fmt, args)); va_end(args); } @@ -59,7 +62,7 @@ inline static void sieve_info va_list args; va_start(args, fmt); - sieve_vinfo(ehandler, location, fmt, args); + T_FRAME(sieve_vinfo(ehandler, location, fmt, args)); va_end(args); } diff --git a/src/lib-sieve/sieve-generator.c b/src/lib-sieve/sieve-generator.c index 24e79bd43..a4e1f08ec 100644 --- a/src/lib-sieve/sieve-generator.c +++ b/src/lib-sieve/sieve-generator.c @@ -203,13 +203,13 @@ bool sieve_generate_block { struct sieve_ast_node *command; - t_push(); - command = sieve_ast_command_first(block); - while ( command != NULL ) { - sieve_generate_command(generator, command); - command = sieve_ast_command_next(command); - } - t_pop(); + T_FRAME( + command = sieve_ast_command_first(block); + while ( command != NULL ) { + sieve_generate_command(generator, command); + command = sieve_ast_command_next(command); + } + ); return TRUE; } diff --git a/src/lib-sieve/sieve-interpreter.c b/src/lib-sieve/sieve-interpreter.c index 7978d8e5f..d75b7db05 100644 --- a/src/lib-sieve/sieve-interpreter.c +++ b/src/lib-sieve/sieve-interpreter.c @@ -109,7 +109,9 @@ void sieve_runtime_error va_list args; va_start(args, fmt); - sieve_verror(runenv->interp->ehandler, _get_location(runenv), fmt, args); + T_FRAME( + sieve_verror(runenv->interp->ehandler, _get_location(runenv), fmt, args); + ); va_end(args); } @@ -119,7 +121,9 @@ void sieve_runtime_warning va_list args; va_start(args, fmt); - sieve_vwarning(runenv->interp->ehandler, _get_location(runenv), fmt, args); + T_FRAME( + sieve_vwarning(runenv->interp->ehandler, _get_location(runenv), fmt, args); + ); va_end(args); } @@ -129,7 +133,9 @@ void sieve_runtime_log va_list args; va_start(args, fmt); - sieve_vinfo(runenv->interp->ehandler, _get_location(runenv), fmt, args); + T_FRAME( + sieve_vinfo(runenv->interp->ehandler, _get_location(runenv), fmt, args); + ); va_end(args); } diff --git a/src/lib-sieve/sieve-lexer.c b/src/lib-sieve/sieve-lexer.c index 9f15d64b8..c0e1e6614 100644 --- a/src/lib-sieve/sieve-lexer.c +++ b/src/lib-sieve/sieve-lexer.c @@ -49,9 +49,9 @@ inline static void sieve_lexer_error va_list args; va_start(args, fmt); - sieve_verror(lexer->ehandler, + T_FRAME(sieve_verror(lexer->ehandler, t_strdup_printf("%s:%d", lexer->scriptname, lexer->current_line), - fmt, args); + fmt, args)); va_end(args); } @@ -62,9 +62,9 @@ inline static void sieve_lexer_warning va_list args; va_start(args, fmt); - sieve_vwarning(lexer->ehandler, + T_FRAME(sieve_vwarning(lexer->ehandler, t_strdup_printf("%s:%d", lexer->scriptname, lexer->current_line), - fmt, args); + fmt, args)); va_end(args); } diff --git a/src/lib-sieve/sieve-parser.c b/src/lib-sieve/sieve-parser.c index 9eb436731..f7df7a480 100644 --- a/src/lib-sieve/sieve-parser.c +++ b/src/lib-sieve/sieve-parser.c @@ -41,10 +41,10 @@ inline static void sieve_parser_error /* Don't report a parse error if the lexer complained already */ if ( sieve_lexer_current_token(parser->lexer) != STT_ERROR ) { - sieve_verror(parser->ehandler, + T_FRAME(sieve_verror(parser->ehandler, t_strdup_printf("%s:%d", parser->scriptname, sieve_lexer_current_line(parser->lexer)), - fmt, args); + fmt, args)); } va_end(args); @@ -56,10 +56,10 @@ inline static void sieve_parser_warning va_list args; va_start(args, fmt); - sieve_vwarning(parser->ehandler, + T_FRAME(sieve_vwarning(parser->ehandler, t_strdup_printf("%s:%d", parser->scriptname, sieve_lexer_current_line(parser->lexer)), - fmt, args); + fmt, args)); va_end(args); } diff --git a/src/lib-sieve/sieve-validator.c b/src/lib-sieve/sieve-validator.c index aecb05bfe..370cdfb49 100644 --- a/src/lib-sieve/sieve-validator.c +++ b/src/lib-sieve/sieve-validator.c @@ -40,9 +40,9 @@ void sieve_validator_warning va_list args; va_start(args, fmt); - sieve_vwarning(validator->ehandler, + T_FRAME(sieve_vwarning(validator->ehandler, t_strdup_printf("%s:%d", sieve_ast_scriptname(validator->ast), - sieve_ast_node_line(node)), fmt, args); + sieve_ast_node_line(node)), fmt, args)); va_end(args); } @@ -54,9 +54,9 @@ void sieve_validator_error va_list args; va_start(args, fmt); - sieve_verror(validator->ehandler, + T_FRAME(sieve_verror(validator->ehandler, t_strdup_printf("%s:%d", sieve_ast_scriptname(validator->ast), - sieve_ast_node_line(node)), fmt, args); + sieve_ast_node_line(node)), fmt, args)); va_end(args); } @@ -751,13 +751,13 @@ static bool sieve_validate_block(struct sieve_validator *validator, struct sieve bool result = TRUE; struct sieve_ast_node *command; - t_push(); - command = sieve_ast_command_first(block); - while ( command != NULL ) { - result = sieve_validate_command(validator, command) && result; - command = sieve_ast_command_next(command); - } - t_pop(); + T_FRAME( + command = sieve_ast_command_first(block); + while ( command != NULL ) { + result = sieve_validate_command(validator, command) && result; + command = sieve_ast_command_next(command); + } + ); return result; } -- GitLab