diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-15 17:36:47 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-15 17:36:47 +0000 |
commit | 0441d265f2bb9da249c7abf333f0f771fadb4ab5 (patch) | |
tree | 3f3789daa2f6db22da6e55e92bee0062a7d613fe /src/lib/var-expand-private.h | |
parent | Initial commit. (diff) | |
download | dovecot-0441d265f2bb9da249c7abf333f0f771fadb4ab5.tar.xz dovecot-0441d265f2bb9da249c7abf333f0f771fadb4ab5.zip |
Adding upstream version 1:2.3.21+dfsg1.upstream/1%2.3.21+dfsg1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/lib/var-expand-private.h')
-rw-r--r-- | src/lib/var-expand-private.h | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/src/lib/var-expand-private.h b/src/lib/var-expand-private.h new file mode 100644 index 0000000..f02356a --- /dev/null +++ b/src/lib/var-expand-private.h @@ -0,0 +1,56 @@ +#ifndef VAR_EXPAND_PRIVATE_H +#define VAR_EXPAND_PRIVATE_H 1 + +struct var_expand_context { + /* current variables */ + const struct var_expand_table *table; + /* caller provided function table */ + const struct var_expand_func_table *func_table; + /* caller provided context */ + void *context; + /* last offset, negative counts from end*/ + int offset; + /* last width, negative counts from end */ + int width; + /* last zero padding */ + bool zero_padding:1; +}; + +/* this can be used to register a *global* function that is + prepended to function table. These can be used to register some + special handling for keys. + + you can call var_expand_with_funcs if you need to + expand something inside here. + + return -1 on error, 0 on unknown variable, 1 on success +*/ +typedef int +var_expand_extension_func_t(struct var_expand_context *ctx, + const char *key, const char *field, + const char **result_r, const char **error_r); + +struct var_expand_extension_func_table { + const char *key; + var_expand_extension_func_t *func; +}; + +int var_expand_long(struct var_expand_context *ctx, + const void *key_start, size_t key_len, + const char **var_r, const char **error_r); + +void var_expand_extensions_init(void); +void var_expand_extensions_deinit(void); + +/* Functions registered here are placed before in-built functions, + so you can include your own implementation of something. + Be careful. Use NULL terminated list. +*/ +void var_expand_register_func_array(const struct var_expand_extension_func_table *funcs); +void var_expand_unregister_func_array(const struct var_expand_extension_func_table *funcs); + +int var_expand_if(struct var_expand_context *ctx, + const char *key, const char *field, + const char **result_r, const char **error_r); + +#endif |