diff options
author | Vito Caputo <vcaputo@pengaru.com> | 2023-08-05 11:14:51 -0700 |
---|---|---|
committer | Vito Caputo <vcaputo@pengaru.com> | 2023-08-05 11:17:51 -0700 |
commit | 287ddfc25ee60955e2bfc8ba8193309747639f4f (patch) | |
tree | a7e043ffa579d78c6152161da5826faf6bf79ea2 | |
parent | 1a6210be32d6b96483f595e30ad3ae1ef5ebd58b (diff) |
til_builtins: add "none" builtin
Sometimes nested modules are optional, in those cases I've
usually been using the "none" module name to indicate this and
the ad-hoc setup stuff can easily bypass module setup on that.
This commit is a step towards having a "none" builtin that
provides a til_module_t.setup() which succeeds but only produces
a NULL res_setup when asked to finalize.
So if callers just handle a successful finalize case that writes
NULL at res_setup equivalent to "disabled", this all Just Works.
Currently that's not an expected thing, but future commits will
bring everything else on the same page.
For callers who want to require the module and not offer "none",
they can just put "none" in the explicit exclusions list passed
to til_module_setup_full().
-rw-r--r-- | src/til.c | 2 | ||||
-rw-r--r-- | src/til_builtins.c | 22 |
2 files changed, 24 insertions, 0 deletions
@@ -59,6 +59,7 @@ extern til_module_t voronoi_module; /* built-ins (til_builtins.c) */ extern til_module_t _blank_module; +extern til_module_t _none_module; extern til_module_t _noop_module; extern til_module_t _ref_module; @@ -94,6 +95,7 @@ static const til_module_t *modules[] = { /* built-ins at the end */ &_blank_module, + &_none_module, &_noop_module, &_ref_module, }; diff --git a/src/til_builtins.c b/src/til_builtins.c index 7a36d23..a73cf30 100644 --- a/src/til_builtins.c +++ b/src/til_builtins.c @@ -165,3 +165,25 @@ static int _ref_setup(const til_settings_t *settings, til_setting_t **res_settin return 0; } + + +/* "none" built-in module */ +static int _none_setup(const til_settings_t *settings, til_setting_t **res_setting, const til_setting_desc_t **res_desc, til_setup_t **res_setup); + + +til_module_t _none_module = { + .setup = _none_setup, + .name = "none", + .description = "Disabled (built-in)", + .author = "built-in", + .flags = TIL_MODULE_BUILTIN, +}; + + +static int _none_setup(const til_settings_t *settings, til_setting_t **res_setting, const til_setting_desc_t **res_desc, til_setup_t **res_setup) +{ + if (res_setup) + *res_setup = NULL; + + return 0; +} |