diff options
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 |