aboutsummaryrefslogtreecommitdiff
path: root/mfd/prog.c
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2010-05-28 02:08:17 +0300
committerSergey Poznyakoff <gray@gnu.org.ua>2010-05-28 02:08:17 +0300
commite9f10a8f5e45c1274bce947967e91d2fa73f9eda (patch)
tree0a475b8eb2fa68f2decb1884cf1594d9f43fde4d /mfd/prog.c
parent7e3d6df9e6a8a7a4316f9d91b81cfe01f6e93dd2 (diff)
downloadmailfromd-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.c71
1 files changed, 10 insertions, 61 deletions
diff --git a/mfd/prog.c b/mfd/prog.c
index e26ef011..963eabfb 100644
--- a/mfd/prog.c
+++ b/mfd/prog.c
@@ -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;

Return to:

Send suggestions and report system problems to the System administrator.