rem: char   *file, *module, *init, *s, *e;
add: char   *file, *module, *init = NULL, *s, *e = NULL;
context: NsLoadModules(char *server){    Ns_Set *modules;    int     i;    char   *file, *module, *init, *s, *e;    Module *modPtr, *nextPtr;    modules = Ns_ConfigGetSection(Ns_ConfigGetPath(server, NULL, "modules", NULL));    for (i = 0; modules != NULL && i < Ns_SetSize(modules); ++i) {	module = Ns_SetKey(modules, i);        file = Ns_SetValue(modules, i);	/*	 * Check for specific module init after filename.	 */        s = strchr(file, '(');        if (s == NULL) {	    init = "Ns_ModuleInit";	} else {            *s = '\0';            e = strchr(init, ')');            if (e != NULL) {                *e = '\0';            }            init = s + 1;	}	/*	 * Load the module if it's not the reserved "tcl" name.	 */	           if (!STRIEQ(file, "tcl") && Ns_ModuleLoad(server, module, file, init) != NS_OK) {	    Ns_Fatal("modload: failed to load module '%s'", file);        }	/*	 * Add this module to the server Tcl init list.	 */        Ns_TclInitModule(server, module);        if (s != NULL) {            *s = '(';            if (e != NULL) {                *e = ')';            }        }    }    /*     * Initialize the static modules (if any).  Note that a static     * module could add a new static module and so the loop is     * repeated until they're all gone.     */    while (firstPtr != NULL) {    	modPtr = firstPtr;	firstPtr = NULL;    	while (modPtr != NULL) {	    nextPtr = modPtr->nextPtr;	    Ns_Log(Notice, "modload: initializing module '%s'", modPtr->name);	    if ((*modPtr->proc)(server, modPtr->name) != NS_OK) {	    	Ns_Fatal("modload: failed to initialize %s", modPtr->name);	    }	    ns_free(modPtr->name);	    ns_free(modPtr);	    modPtr = nextPtr;	}    }}