X-Git-Url: http://git.openwrt.org/?a=blobdiff_plain;f=procd.c;h=1223283c3e96eecb6e77b5c1dc8fbf9a10812c04;hb=7e6c6efd6fbcc7955801c5e2ac915a90697e1fd9;hp=a7ac6c18af999520370a19b54c7e1680e305b7b2;hpb=6c651500cfb2e71860c81644aa7bb9720a37e218;p=project%2Fprocd.git diff --git a/procd.c b/procd.c index a7ac6c1..1223283 100644 --- a/procd.c +++ b/procd.c @@ -27,6 +27,55 @@ unsigned int debug; +static struct udebug ud; +static struct udebug_buf udb; +static bool udebug_enabled; + +static void procd_udebug_vprintf(const char *format, va_list ap) +{ + if (!udebug_enabled) + return; + + udebug_entry_init(&udb); + udebug_entry_vprintf(&udb, format, ap); + udebug_entry_add(&udb); +} + +void procd_udebug_printf(const char *format, ...) +{ + va_list ap; + + va_start(ap, format); + procd_udebug_vprintf(format, ap); + va_end(ap); +} + +void procd_udebug_set_enabled(bool val) +{ + static const struct udebug_buf_meta meta = { + .name = "procd_log", + .format = UDEBUG_FORMAT_STRING, + }; + + if (udebug_enabled == val) + return; + + udebug_enabled = val; + if (!val) { + ulog_udebug(NULL); + udebug_buf_free(&udb); + udebug_free(&ud); + return; + } + + udebug_init(&ud); + udebug_auto_connect(&ud, NULL); + udebug_buf_init(&udb, 1024, 64 * 1024); + udebug_buf_add(&ud, &udb, &meta); + ulog_udebug(&udb); +} + + static int usage(const char *prog) { fprintf(stderr, "Usage: %s [options]\n" @@ -69,11 +118,12 @@ int main(int argc, char **argv) } ulog_open(ulog_channels, LOG_DAEMON, "procd"); + ulog_threshold(LOG_DEBUG + 1); setsid(); uloop_init(); procd_signal(); - trigger_init(); + procd_udebug_set_enabled(true); if (getpid() != 1) procd_connect_ubus(); else