/* * Copyright (c) 2007 William Pitcock * Rights to this code are as documented in doc/LICENSE. * * mlocktweaker.c: A module which tweaks mlock on registration. * */ #include "atheme-compat.h" /* * Set this to the string of mlock changes you want to make. * This is in addition to the default mlock, so -nt if you want to * remove those mlocks, etcetera. */ #define MLOCK_CHANGE "-t+c" DECLARE_MODULE_V1 ( "contrib/mlocktweaker", false, _modinit, _moddeinit, PACKAGE_STRING, "William Pitcock " ); static void handle_channel_register(hook_channel_req_t *hdata); void _modinit(module_t *m) { hook_add_event("channel_register"); hook_add_first_channel_register(handle_channel_register); } void _moddeinit(module_unload_intent_t intent) { hook_del_channel_register(handle_channel_register); } static void handle_channel_register(hook_channel_req_t *hdata) { mychan_t *mc = hdata->mc; unsigned int *target; char *it, *str = MLOCK_CHANGE; if (mc == NULL) return; target = &mc->mlock_on; it = str; while (*it != '\0') { switch (*it) { case '+': target = &mc->mlock_on; break; case '-': target = &mc->mlock_off; break; default: *target |= mode_to_flag(*it); break; } ++it; } mc->mlock_off &= ~mc->mlock_on; }