summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVito Caputo <vcaputo@pengaru.com>2023-08-05 11:14:51 -0700
committerVito Caputo <vcaputo@pengaru.com>2023-08-05 11:17:51 -0700
commit287ddfc25ee60955e2bfc8ba8193309747639f4f (patch)
treea7e043ffa579d78c6152161da5826faf6bf79ea2
parent1a6210be32d6b96483f595e30ad3ae1ef5ebd58b (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.c2
-rw-r--r--src/til_builtins.c22
2 files changed, 24 insertions, 0 deletions
diff --git a/src/til.c b/src/til.c
index 100621d..ea1e5fb 100644
--- a/src/til.c
+++ b/src/til.c
@@ -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;
+}
© All Rights Reserved