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