diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2010-05-28 02:08:17 +0300 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2010-05-28 02:08:17 +0300 |
commit | e9f10a8f5e45c1274bce947967e91d2fa73f9eda (patch) | |
tree | 0a475b8eb2fa68f2decb1884cf1594d9f43fde4d /mfd/prog.c | |
parent | 7e3d6df9e6a8a7a4316f9d91b81cfe01f6e93dd2 (diff) | |
download | mailfromd-e9f10a8f5e45c1274bce947967e91d2fa73f9eda.tar.gz mailfromd-e9f10a8f5e45c1274bce947967e91d2fa73f9eda.tar.bz2 |
Change builtin trace control.
The method used so far limited number of built-in modules. This
limit was already reached with the addition of email.bi module, which
was the compelling reason to implement a better scalable solution.
* mfd/builtin/builtin.c: New file.
* mfd/builtin/.gitignore: Explicitly mention ignored files.
* mfd/builtin/Makefile.am (libbuiltin_a_SOURCES): Add builtin.c.
* mfd/builtin/builtin.def (builtin_module) <mask>: Remove.
<trace>: New member.
(builtin_setup, builtin_set_module_trace)
(builtin_set_all_module_trace,builtin_module_trace): New protos.
* mfd/builtin/init.m4 (MF_MODULE_MASK): Replace by MF_MODULE_IDX.
Change initializers of builtin_module.
Define BUILTIN_IDX_MAX.
* mfd/builtin/snarf.m4 (MF_MODULE_MASK): Replace by MF_MODULE_IDX.
(__mf_defun): Use builtin_module_trace.
* mfd/prog.c: Don't define DEFINE_BUILTIN_MODULE.
(prog_trace_option): Remove variable.
(PROG_TRACE_ENGINE): Rewrite macro.
(enable_module_trace, disable_module_trace): Remove in favor of
builtin_set_module_trace.
(toggle_prog_trace): Remove.
(set_prog_trace): New function.
(enable_prog_trace, disable_prog_trace): Use set_prog_trace.
(builtin_setup): Move to mfd/builtin/builtin.c.
* po/POTFILES.in: Add mfd/builtin/builtin.c.
Diffstat (limited to 'mfd/prog.c')
-rw-r--r-- | mfd/prog.c | 71 |
1 files changed, 10 insertions, 61 deletions
@@ -33,7 +33,6 @@ #include "prog.h" #include "msg.h" #include "optab.h" -#define DEFINE_BUILTIN_MODULE #include "builtin.h" @@ -172,57 +171,23 @@ finalize_regex() } -unsigned long prog_trace_option = 0; -#define PROG_TRACE_ENGINE (prog_trace_option & BUILTIN_MASK_prog) +#define PROG_TRACE_ENGINE (builtin_module_trace(BUILTIN_IDX_prog)) -void -enable_module_trace(const char *name, size_t len) -{ - struct builtin_module *mod; - - for (mod = builtin_module; mod->name; mod++) - if (strlen (mod->name) == len - && memcmp(mod->name, name, len) == 0) { - prog_trace_option |= mod->mask; - return; - } - - mu_error(_("no such module: %*.*s"), len, len, name); -} - -void -disable_module_trace(const char *name, size_t len) -{ - struct builtin_module *mod; - - for (mod = builtin_module; mod->name; mod++) - if (strlen (mod->name) == len - && memcmp(mod->name, name, len) == 0) { - prog_trace_option &= ~mod->mask; - return; - } - - mu_error(_("no such module: %*.*s"), len, len, name); -} - -void -toggle_prog_trace(const char *modlist, - unsigned long allmask, - unsigned long nonemask, - void (*yesfn)(const char *, size_t), - void (*nofn)(const char *, size_t)) +static void +set_prog_trace(const char *modlist, int val) { while (1) { size_t len = strcspn(modlist, ","); if (len == 3 && memcmp(modlist, "all", 3) == 0) - prog_trace_option = allmask; + builtin_set_all_module_trace(val); else if (len == 4 && memcmp(modlist, "none", 4) == 0) - prog_trace_option = nonemask; + builtin_set_all_module_trace(!val); else { if (len > 3 && memcmp (modlist, "no-", 3) == 0) - nofn(modlist+3, len-3); + builtin_set_module_trace(modlist+3, len-3, + !val); else - yesfn(modlist, len); + builtin_set_module_trace(modlist, len, val); } modlist += len; if (*modlist) @@ -235,15 +200,13 @@ toggle_prog_trace(const char *modlist, void enable_prog_trace(const char *modlist) { - toggle_prog_trace(modlist, ULONG_MAX, 0, - enable_module_trace, disable_module_trace); + set_prog_trace(modlist, 1); } void disable_prog_trace(const char *modlist) { - toggle_prog_trace(modlist, 0, ULONG_MAX, - disable_module_trace, enable_module_trace); + set_prog_trace(modlist, 0); } /* ======================================================================== @@ -2513,20 +2476,6 @@ destroy_environment(eval_environ_t env) } -/* Builtins */ - -void -builtin_setup () -{ - struct builtin_module *mod; - for (mod = builtin_module; mod->name; mod++) - if (mod->init) - mod->init(); -} - - - - struct entry_point { int ishandler; prog_counter_t pc; |