static struct tag_mime_data * tag_mime_get_data(struct sieve_command *cmd, struct sieve_ast_argument *tag) { struct tag_mime_data *data; if (tag->argument->data == NULL) { data = p_new(sieve_command_pool(cmd), struct tag_mime_data, 1); tag->argument->data = (void *)data; } else {
static struct sieve_comparator *sieve_comparator_create (struct sieve_validator *valdtr, struct sieve_command *cmd, const char *identifier) { struct sieve_validator_object_registry *regs = _get_object_registry(valdtr); struct sieve_object object; struct sieve_comparator *cmp; if ( !sieve_validator_object_registry_find(regs, identifier, &object) ) return NULL; cmp = p_new(sieve_command_pool(cmd), struct sieve_comparator, 1); cmp->object = object; cmp->def = (const struct sieve_comparator_def *) object.def; return cmp; }
static const struct sieve_address_part *sieve_address_part_create_instance (struct sieve_validator *valdtr, struct sieve_command *cmd, const char *identifier) { struct sieve_validator_object_registry *regs = _get_object_registry(valdtr); struct sieve_object object; struct sieve_address_part *addrp; if ( !sieve_validator_object_registry_find(regs, identifier, &object) ) return NULL; addrp = p_new(sieve_command_pool(cmd), struct sieve_address_part, 1); addrp->object = object; addrp->def = (const struct sieve_address_part_def *) object.def; return addrp; }
const struct sieve_variables_namespace *ext_variables_namespace_create_instance (const struct sieve_extension *var_ext, struct sieve_validator *valdtr, struct sieve_command *cmd, const char *identifier) { struct ext_variables_validator_context *ctx = ext_variables_validator_context_get(var_ext, valdtr); struct sieve_object object; struct sieve_variables_namespace *nspc; pool_t pool; if ( !sieve_validator_object_registry_find (ctx->namespaces, identifier, &object) ) return NULL; pool = sieve_command_pool(cmd); nspc = p_new(pool, struct sieve_variables_namespace, 1); nspc->object = object; nspc->def = (const struct sieve_variables_namespace_def *) object.def; return nspc; }
const struct sieve_variables_modifier *ext_variables_modifier_create_instance (const struct sieve_extension *var_ext, struct sieve_validator *valdtr, struct sieve_command *cmd, const char *identifier) { struct ext_variables_validator_context *ctx = ext_variables_validator_context_get(var_ext, valdtr); struct sieve_object object; struct sieve_variables_modifier *modf; pool_t pool; if ( !sieve_validator_object_registry_find (ctx->modifiers, identifier, &object) ) return NULL; pool = sieve_command_pool(cmd); modf = p_new(pool, struct sieve_variables_modifier, 1); modf->object = object; modf->def = (const struct sieve_variables_modifier_def *) object.def; return modf; }
static bool arg_namespace_generate (const struct sieve_codegen_env *cgenv, struct sieve_ast_argument *arg, struct sieve_command *context ATTR_UNUSED); const struct sieve_argument_def namespace_argument = { .identifier = "@namespace", .generate = arg_namespace_generate }; bool ext_variables_namespace_argument_activate (const struct sieve_extension *this_ext, struct sieve_validator *valdtr, struct sieve_ast_argument *arg, struct sieve_command *cmd, ARRAY_TYPE(sieve_variable_name) *var_name, bool assignment) { pool_t pool = sieve_command_pool(cmd); struct sieve_ast *ast = arg->ast; const struct sieve_variables_namespace *nspc; struct arg_namespace_variable *var; const struct sieve_variable_name *name_element = array_idx(var_name, 0); void *var_data = NULL; nspc = ext_variables_namespace_create_instance (this_ext, valdtr, cmd, str_c(name_element->identifier)); if ( nspc == NULL ) { sieve_argument_validate_error(valdtr, arg, "referring to variable in unknown namespace '%s'", str_c(name_element->identifier)); return FALSE; }