From be78a55b61f3ed57b70d393ab6bb9cd0cb309b44 Mon Sep 17 00:00:00 2001 From: Stephan Bosch <stephan@rename-it.nl> Date: Wed, 23 Jul 2008 11:38:15 +0200 Subject: [PATCH] Made initially assigned extension id available directly from the const extension object itself. --- src/lib-sieve/ext-encoded-character.c | 1 + src/lib-sieve/ext-envelope.c | 1 + src/lib-sieve/ext-fileinto.c | 1 + src/lib-sieve/ext-reject.c | 1 + src/lib-sieve/plugins/body/ext-body.c | 1 + .../ext-cmp-i-ascii-numeric.c | 1 + src/lib-sieve/plugins/copy/ext-copy.c | 1 + .../plugins/imapflags/ext-imapflags.c | 1 + src/lib-sieve/plugins/include/ext-include.c | 1 + src/lib-sieve/plugins/regex/ext-regex.c | 1 + .../plugins/relational/ext-relational.c | 1 + .../plugins/subaddress/ext-subaddress.c | 1 + src/lib-sieve/plugins/vacation/ext-vacation.c | 3 ++- .../plugins/variables/ext-variables.c | 1 + src/lib-sieve/sieve-actions.c | 22 ----------------- src/lib-sieve/sieve-address-parts.c | 1 + src/lib-sieve/sieve-comparators.c | 1 + src/lib-sieve/sieve-extensions.c | 24 +++++-------------- src/lib-sieve/sieve-extensions.h | 1 + src/lib-sieve/sieve-match-types.c | 1 + src/lib-sieve/sieve-validator.c | 2 +- src/testsuite/ext-testsuite.c | 1 + 22 files changed, 27 insertions(+), 42 deletions(-) diff --git a/src/lib-sieve/ext-encoded-character.c b/src/lib-sieve/ext-encoded-character.c index 5105e40f3..c58c189a2 100644 --- a/src/lib-sieve/ext-encoded-character.c +++ b/src/lib-sieve/ext-encoded-character.c @@ -31,6 +31,7 @@ static int ext_my_id; struct sieve_extension encoded_character_extension = { "encoded-character", + &ext_my_id, ext_encoded_character_load, ext_encoded_character_validator_load, NULL, NULL, NULL, NULL, NULL, diff --git a/src/lib-sieve/ext-envelope.c b/src/lib-sieve/ext-envelope.c index 1ccb0c759..98c14f77b 100644 --- a/src/lib-sieve/ext-envelope.c +++ b/src/lib-sieve/ext-envelope.c @@ -45,6 +45,7 @@ static bool ext_envelope_validator_load(struct sieve_validator *validator); const struct sieve_extension envelope_extension = { "envelope", + &ext_my_id, ext_envelope_load, ext_envelope_validator_load, NULL, NULL, NULL, NULL, NULL, diff --git a/src/lib-sieve/ext-fileinto.c b/src/lib-sieve/ext-fileinto.c index 07d0ab088..68a1ba06d 100644 --- a/src/lib-sieve/ext-fileinto.c +++ b/src/lib-sieve/ext-fileinto.c @@ -41,6 +41,7 @@ static bool ext_fileinto_validator_load(struct sieve_validator *validator); const struct sieve_extension fileinto_extension = { "fileinto", + &ext_my_id, ext_fileinto_load, ext_fileinto_validator_load, NULL, NULL, NULL, NULL, NULL, diff --git a/src/lib-sieve/ext-reject.c b/src/lib-sieve/ext-reject.c index faecfc279..2435305f3 100644 --- a/src/lib-sieve/ext-reject.c +++ b/src/lib-sieve/ext-reject.c @@ -49,6 +49,7 @@ static bool ext_reject_validator_load(struct sieve_validator *validator); struct sieve_extension reject_extension = { "reject", + &ext_my_id, ext_reject_load, ext_reject_validator_load, NULL, NULL, NULL, NULL, NULL, diff --git a/src/lib-sieve/plugins/body/ext-body.c b/src/lib-sieve/plugins/body/ext-body.c index 1b6d218ac..0fa141e68 100644 --- a/src/lib-sieve/plugins/body/ext-body.c +++ b/src/lib-sieve/plugins/body/ext-body.c @@ -64,6 +64,7 @@ static bool ext_body_validator_load(struct sieve_validator *validator); const struct sieve_extension body_extension = { "body", + &ext_body_my_id, ext_body_load, ext_body_validator_load, NULL, NULL, NULL, NULL, NULL, diff --git a/src/lib-sieve/plugins/comparator-i-ascii-numeric/ext-cmp-i-ascii-numeric.c b/src/lib-sieve/plugins/comparator-i-ascii-numeric/ext-cmp-i-ascii-numeric.c index 35de40f83..f2e069d32 100644 --- a/src/lib-sieve/plugins/comparator-i-ascii-numeric/ext-cmp-i-ascii-numeric.c +++ b/src/lib-sieve/plugins/comparator-i-ascii-numeric/ext-cmp-i-ascii-numeric.c @@ -37,6 +37,7 @@ static int ext_my_id; const struct sieve_extension comparator_i_ascii_numeric_extension = { "comparator-i;ascii-numeric", + &ext_my_id, ext_cmp_i_ascii_numeric_load, ext_cmp_i_ascii_numeric_validator_load, NULL, NULL, NULL, NULL, NULL, diff --git a/src/lib-sieve/plugins/copy/ext-copy.c b/src/lib-sieve/plugins/copy/ext-copy.c index f1810f2b0..9153ce980 100644 --- a/src/lib-sieve/plugins/copy/ext-copy.c +++ b/src/lib-sieve/plugins/copy/ext-copy.c @@ -34,6 +34,7 @@ static int ext_my_id; const struct sieve_extension copy_extension = { "copy", + &ext_my_id, ext_copy_load, ext_copy_validator_load, NULL, NULL, NULL, NULL, NULL, diff --git a/src/lib-sieve/plugins/imapflags/ext-imapflags.c b/src/lib-sieve/plugins/imapflags/ext-imapflags.c index e14c6cab5..3a785f428 100644 --- a/src/lib-sieve/plugins/imapflags/ext-imapflags.c +++ b/src/lib-sieve/plugins/imapflags/ext-imapflags.c @@ -60,6 +60,7 @@ int ext_imapflags_my_id; const struct sieve_extension imapflags_extension = { "imap4flags", + &ext_imapflags_my_id, ext_imapflags_load, ext_imapflags_validator_load, NULL, NULL, diff --git a/src/lib-sieve/plugins/include/ext-include.c b/src/lib-sieve/plugins/include/ext-include.c index 4592de588..47e9bb778 100644 --- a/src/lib-sieve/plugins/include/ext-include.c +++ b/src/lib-sieve/plugins/include/ext-include.c @@ -51,6 +51,7 @@ int ext_include_my_id; const struct sieve_extension include_extension = { "include", + &ext_include_my_id, ext_include_load, ext_include_validator_load, ext_include_generator_load, diff --git a/src/lib-sieve/plugins/regex/ext-regex.c b/src/lib-sieve/plugins/regex/ext-regex.c index 0117b15c9..c62cb95da 100644 --- a/src/lib-sieve/plugins/regex/ext-regex.c +++ b/src/lib-sieve/plugins/regex/ext-regex.c @@ -47,6 +47,7 @@ static int ext_my_id; const struct sieve_extension regex_extension = { "regex", + &ext_my_id, ext_regex_load, ext_regex_validator_load, NULL, NULL, NULL, NULL, NULL, diff --git a/src/lib-sieve/plugins/relational/ext-relational.c b/src/lib-sieve/plugins/relational/ext-relational.c index 8f93092c4..6555777b8 100644 --- a/src/lib-sieve/plugins/relational/ext-relational.c +++ b/src/lib-sieve/plugins/relational/ext-relational.c @@ -38,6 +38,7 @@ int ext_relational_my_id; const struct sieve_extension relational_extension = { "relational", + &ext_relational_my_id, ext_relational_load, ext_relational_validator_load, NULL, NULL, NULL, NULL, NULL, diff --git a/src/lib-sieve/plugins/subaddress/ext-subaddress.c b/src/lib-sieve/plugins/subaddress/ext-subaddress.c index 5538979ec..d7489640d 100644 --- a/src/lib-sieve/plugins/subaddress/ext-subaddress.c +++ b/src/lib-sieve/plugins/subaddress/ext-subaddress.c @@ -40,6 +40,7 @@ static int ext_my_id; const struct sieve_extension subaddress_extension = { "subaddress", + &ext_my_id, ext_subaddress_load, ext_subaddress_validator_load, NULL, NULL, NULL, NULL, NULL, diff --git a/src/lib-sieve/plugins/vacation/ext-vacation.c b/src/lib-sieve/plugins/vacation/ext-vacation.c index dad01342c..582da44c6 100644 --- a/src/lib-sieve/plugins/vacation/ext-vacation.c +++ b/src/lib-sieve/plugins/vacation/ext-vacation.c @@ -36,7 +36,8 @@ static bool ext_vacation_validator_load(struct sieve_validator *validator); int ext_vacation_my_id; const struct sieve_extension vacation_extension = { - "vacation", + "vacation", + &ext_vacation_my_id, ext_vacation_load, ext_vacation_validator_load, NULL, NULL, NULL, NULL, NULL, diff --git a/src/lib-sieve/plugins/variables/ext-variables.c b/src/lib-sieve/plugins/variables/ext-variables.c index b831c7936..b7b66a99b 100644 --- a/src/lib-sieve/plugins/variables/ext-variables.c +++ b/src/lib-sieve/plugins/variables/ext-variables.c @@ -66,6 +66,7 @@ int ext_variables_my_id; struct sieve_extension variables_extension = { "variables", + &ext_variables_my_id, ext_variables_load, ext_variables_validator_load, NULL, diff --git a/src/lib-sieve/sieve-actions.c b/src/lib-sieve/sieve-actions.c index 594278fc1..e5801fe7d 100644 --- a/src/lib-sieve/sieve-actions.c +++ b/src/lib-sieve/sieve-actions.c @@ -26,28 +26,6 @@ const char *sieve_get_new_message_id count++, senv->hostname); } -/* - * Side-effects 'extension' - */ - -static int ext_my_id = -1; - -static bool seffect_extension_load(int ext_id); - -const struct sieve_extension side_effects_extension = { - "@side-effects", - seffect_extension_load, - NULL, NULL, NULL, NULL, NULL, NULL, - SIEVE_EXT_DEFINE_NO_OPERATIONS, /* Opcode is hardcoded */ - SIEVE_EXT_DEFINE_NO_OPERANDS -}; - -static bool seffect_extension_load(int ext_id) -{ - ext_my_id = ext_id; - return TRUE; -} - /* * Side-effect operand */ diff --git a/src/lib-sieve/sieve-address-parts.c b/src/lib-sieve/sieve-address-parts.c index 9a5faec29..d9bccee5d 100644 --- a/src/lib-sieve/sieve-address-parts.c +++ b/src/lib-sieve/sieve-address-parts.c @@ -44,6 +44,7 @@ static bool addrp_validator_load(struct sieve_validator *validator); const struct sieve_extension address_part_extension = { "@address-parts", + &ext_my_id, addrp_extension_load, addrp_validator_load, NULL, NULL, NULL, NULL, NULL, diff --git a/src/lib-sieve/sieve-comparators.c b/src/lib-sieve/sieve-comparators.c index 479d0466b..1affea88a 100644 --- a/src/lib-sieve/sieve-comparators.c +++ b/src/lib-sieve/sieve-comparators.c @@ -49,6 +49,7 @@ static bool cmp_validator_load(struct sieve_validator *validator); const struct sieve_extension comparator_extension = { "@comparators", + &ext_my_id, cmp_extension_load, cmp_validator_load, NULL, NULL, NULL, NULL, NULL, diff --git a/src/lib-sieve/sieve-extensions.c b/src/lib-sieve/sieve-extensions.c index bbb694481..543f382b2 100644 --- a/src/lib-sieve/sieve-extensions.c +++ b/src/lib-sieve/sieve-extensions.c @@ -17,11 +17,9 @@ static void sieve_extensions_deinit_registry(void); extern const struct sieve_extension comparator_extension; extern const struct sieve_extension match_type_extension; extern const struct sieve_extension address_part_extension; -extern const struct sieve_extension side_effects_extension; const struct sieve_extension *sieve_preloaded_extensions[] = { - &comparator_extension, &match_type_extension, &address_part_extension, - &side_effects_extension + &comparator_extension, &match_type_extension, &address_part_extension }; const unsigned int sieve_preloaded_extensions_count = @@ -30,15 +28,15 @@ const unsigned int sieve_preloaded_extensions_count = /* Dummy extensions */ static const struct sieve_extension comparator_i_octet_extension = { - "comparator-i;octet", - NULL, NULL, NULL, NULL, NULL, NULL, NULL, + "comparator-i;octet", + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, SIEVE_EXT_DEFINE_NO_OPERATIONS, SIEVE_EXT_DEFINE_NO_OPERANDS }; static const struct sieve_extension comparator_i_ascii_casemap_extension = { - "comparator-i;ascii-casemap", - NULL, NULL, NULL, NULL, NULL, NULL, NULL, + "comparator-i;ascii-casemap", + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, SIEVE_EXT_DEFINE_NO_OPERATIONS, SIEVE_EXT_DEFINE_NO_OPERANDS }; @@ -66,7 +64,6 @@ extern const struct sieve_extension variables_extension; const struct sieve_extension *sieve_core_extensions[] = { /* Preloaded 'extensions' */ &comparator_extension, &match_type_extension, &address_part_extension, - &side_effects_extension, /* Dummy extensions */ &comparator_i_octet_extension, &comparator_i_ascii_casemap_extension, @@ -200,16 +197,7 @@ int sieve_extension_get_id(const struct sieve_extension *extension) static bool _list_extension(const struct sieve_extension *ext) { - if ( *ext->name == '@' ) return FALSE; - - if ( ext->validator_load == NULL && ext->generator_load == NULL && - ext->binary_load == NULL && ext->interpreter_load == NULL && - ext->runtime_load == NULL && ext->load == NULL && - ext->operations.count == 0 && ext->operands.count == 0 ) { - return FALSE; - } - - return TRUE; + return ( ext->id != NULL && *ext->name != '@' ); } const char *sieve_extensions_get_string(void) diff --git a/src/lib-sieve/sieve-extensions.h b/src/lib-sieve/sieve-extensions.h index d60dc9067..20d065845 100644 --- a/src/lib-sieve/sieve-extensions.h +++ b/src/lib-sieve/sieve-extensions.h @@ -15,6 +15,7 @@ struct sieve_extension_obj_registry { struct sieve_extension { const char *name; + const int *id; bool (*load)(int ext_id); diff --git a/src/lib-sieve/sieve-match-types.c b/src/lib-sieve/sieve-match-types.c index d860e94a5..4e6ad7fdc 100644 --- a/src/lib-sieve/sieve-match-types.c +++ b/src/lib-sieve/sieve-match-types.c @@ -49,6 +49,7 @@ static bool mtch_validator_load(struct sieve_validator *validator); const struct sieve_extension match_type_extension = { "@match-types", + &ext_my_id, mtch_extension_load, mtch_validator_load, NULL, NULL, NULL, NULL, NULL, diff --git a/src/lib-sieve/sieve-validator.c b/src/lib-sieve/sieve-validator.c index b7be9fd2f..dc7eb66d2 100644 --- a/src/lib-sieve/sieve-validator.c +++ b/src/lib-sieve/sieve-validator.c @@ -126,7 +126,7 @@ struct sieve_validator *sieve_validator_create const struct sieve_extension *ext = sieve_preloaded_extensions[i]; if ( ext->validator_load != NULL ) - (void)ext->validator_load(validator); + (void)ext->validator_load(validator); } return validator; diff --git a/src/testsuite/ext-testsuite.c b/src/testsuite/ext-testsuite.c index bc2ccaec4..2d493b3de 100644 --- a/src/testsuite/ext-testsuite.c +++ b/src/testsuite/ext-testsuite.c @@ -59,6 +59,7 @@ int ext_testsuite_my_id; const struct sieve_extension testsuite_extension = { "vnd.dovecot.testsuite", + &ext_testsuite_my_id, ext_testsuite_load, ext_testsuite_validator_load, ext_testsuite_generator_load, -- GitLab