diff options
author | Vito Caputo <vcaputo@pengaru.com> | 2023-06-02 19:09:25 -0700 |
---|---|---|
committer | Vito Caputo <vcaputo@pengaru.com> | 2023-06-03 07:42:02 -0700 |
commit | 6ef13be4e8d27f237406d6485d8dfe623db03a5f (patch) | |
tree | 87b7f6b19ad8c67d28b02e3ac9333318b87a857f | |
parent | 401cfce3ebb205e46b4582fc6be1a0d42e213d31 (diff) |
til: add exclusions to til_get_module_names()
There's often a need to exclude specific modules, though it's
often a hacky kludge. It's something relied upon currently for
preventing dangerous recursion scenarios, which will likely get
fixed up more robustly in the future.
-rw-r--r-- | src/til.c | 13 | ||||
-rw-r--r-- | src/til.h | 2 |
2 files changed, 13 insertions, 2 deletions
@@ -167,7 +167,7 @@ void til_get_modules(const til_module_t ***res_modules, size_t *res_n_modules) } -char * til_get_module_names(unsigned flags_excluded) +char * til_get_module_names(unsigned flags_excluded, const char **exclusions) { const til_module_t **modules; size_t n_modules; @@ -183,10 +183,21 @@ char * til_get_module_names(unsigned flags_excluded) til_get_modules(&modules, &n_modules); for (size_t i = 0, j = 0; i < n_modules; i++) { const til_module_t *mod = modules[i]; + const char **exclusion = exclusions; if ((mod->flags & flags_excluded)) continue; + while (*exclusion) { + if (!strcmp(*exclusion, mod->name)) + break; + + exclusion++; + } + + if (*exclusion) + continue; + fprintf(fp, "%s%s", j ? "," : "", mod->name); j++; } @@ -42,7 +42,7 @@ void til_quiesce(void); void til_shutdown(void); const til_module_t * til_lookup_module(const char *name); void til_get_modules(const til_module_t ***res_modules, size_t *res_n_modules); -char * til_get_module_names(unsigned flags_excluded); +char * til_get_module_names(unsigned flags_excluded, const char **exclusions); void til_module_render(til_module_context_t *context, til_stream_t *stream, unsigned ticks, til_fb_fragment_t **fragment_ptr); int til_module_create_context(const til_module_t *module, til_stream_t *stream, unsigned seed, unsigned ticks, unsigned n_cpus, til_setup_t *setup, til_module_context_t **res_context); til_module_context_t * til_module_destroy_context(til_module_context_t *context, til_stream_t *stream); |