From: Zoran V. <vas...@us...> - 2006-01-13 15:49:22
|
Update of /cvsroot/naviserver/naviserver/nsd In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26664/nsd Modified Files: conn.c pathname.c tclcallbacks.c tclinit.c tclrequest.c tclsched.c url2file.c Log Message: Implemented RFE #1404901 Index: tclinit.c =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsd/tclinit.c,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -d -r1.16 -r1.17 *** tclinit.c 24 Nov 2005 19:01:20 -0000 1.16 --- tclinit.c 13 Jan 2006 15:49:11 -0000 1.17 *************** *** 775,780 **** Defer *deferPtr; Ns_TclCallback *cbPtr; ! char *script, *scriptArg = NULL; ! int opt, length, when = 0, result = TCL_OK; static CONST char *opts[] = { --- 775,781 ---- Defer *deferPtr; Ns_TclCallback *cbPtr; ! Tcl_Obj *scriptObj; ! char *script; ! int remain = 0, opt, length, when = 0, result = TCL_OK; static CONST char *opts[] = { *************** *** 799,804 **** Ns_ObjvSpec traceArgs[] = { {"when", Ns_ObjvFlags, &when, traceWhen}, ! {"script", Ns_ObjvString, &script, NULL}, ! {"?scriptArg", Ns_ObjvString, &scriptArg, NULL}, {NULL, NULL, NULL, NULL} }; --- 800,805 ---- Ns_ObjvSpec traceArgs[] = { {"when", Ns_ObjvFlags, &when, traceWhen}, ! {"script", Ns_ObjvObj, &scriptObj, NULL}, ! {"?args", Ns_ObjvArgs, &remain, NULL}, {NULL, NULL, NULL, NULL} }; *************** *** 980,985 **** return TCL_ERROR; } ! cbPtr = Ns_TclNewCallback(itPtr->interp, NsTclTraceProc, ! script, scriptArg); (void) Ns_TclRegisterTrace(servPtr->server, NsTclTraceProc, cbPtr, when); break; --- 981,986 ---- return TCL_ERROR; } ! cbPtr = Ns_TclNewCallback(itPtr->interp, NsTclTraceProc, scriptObj, ! remain, objv + (objc - remain)); (void) Ns_TclRegisterTrace(servPtr->server, NsTclTraceProc, cbPtr, when); break; Index: tclcallbacks.c =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsd/tclcallbacks.c,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** tclcallbacks.c 9 Oct 2005 22:27:24 -0000 1.3 --- tclcallbacks.c 13 Jan 2006 15:49:11 -0000 1.4 *************** *** 56,60 **** *---------------------------------------------------------------------- * ! * Ns_TclNewCallback, Ns_TclNewCallbackObj -- * * Create a new script callback. --- 56,60 ---- *---------------------------------------------------------------------- * ! * Ns_TclNewCallback -- * * Create a new script callback. *************** *** 64,95 **** * * Side effects: ! * Copies are made of script and scriptarg. * *---------------------------------------------------------------------- */ ! Ns_TclCallback * ! Ns_TclNewCallback(Tcl_Interp *interp, void *cbProc, ! char *script, char *scriptarg) { Ns_TclCallback *cbPtr; ! cbPtr = ns_malloc(sizeof(Ns_TclCallback)); ! cbPtr->cbProc = cbProc; ! cbPtr->server = Ns_TclInterpServer(interp); ! cbPtr->script = ns_strdup(script); ! cbPtr->scriptarg = ns_strcopy(scriptarg); return cbPtr; } - Ns_TclCallback * - Ns_TclNewCallbackObj(Tcl_Interp *interp, void *cbProc, - Tcl_Obj *objPtr, Tcl_Obj *argObjPtr) - { - return Ns_TclNewCallback(interp, cbProc, Tcl_GetString(objPtr), - (argObjPtr ? Tcl_GetString(argObjPtr) : NULL)); - } - /* --- 64,95 ---- * * Side effects: ! * Copies are made of script and arguments * *---------------------------------------------------------------------- */ ! Ns_TclCallback* ! Ns_TclNewCallback(Tcl_Interp *interp, void *cbProc, Tcl_Obj *scriptObjPtr, ! int objc, Tcl_Obj *CONST objv[]) { + int ii; Ns_TclCallback *cbPtr; + + cbPtr = ns_malloc(sizeof(Ns_TclCallback) + objc * sizeof(char *)); + cbPtr->cbProc = cbProc; + cbPtr->server = Ns_TclInterpServer(interp); + cbPtr->script = ns_strdup(Tcl_GetString(scriptObjPtr)); + cbPtr->argc = objc; + cbPtr->argv = (char **)((char *)cbPtr + sizeof(Ns_TclCallback)); ! if (objc) { ! for (ii = 0; ii < objc; ii++) { ! cbPtr->argv[ii] = ns_strdup(Tcl_GetString(objv[ii])); ! } ! } return cbPtr; } /* *************** *** 112,119 **** Ns_TclFreeCallback(void *arg) { Ns_TclCallback *cbPtr = arg; ns_free(cbPtr->script); - ns_free(cbPtr->scriptarg); ns_free(cbPtr); } --- 112,123 ---- Ns_TclFreeCallback(void *arg) { + int ii; Ns_TclCallback *cbPtr = arg; + for (ii = 0; ii < cbPtr->argc; ii++) { + ns_free(cbPtr->argv[ii]); + } + ns_free(cbPtr->script); ns_free(cbPtr); } *************** *** 139,143 **** int ! Ns_TclEvalCallback(Tcl_Interp *interp, Ns_TclCallback *cbPtr, Ns_DString *result, ...) { va_list ap; --- 143,148 ---- int ! Ns_TclEvalCallback(Tcl_Interp *interp, Ns_TclCallback *cbPtr, ! Ns_DString *result, ...) { va_list ap; *************** *** 145,149 **** char *arg; int deallocInterp = 0; ! int status = TCL_ERROR; if (interp == NULL) { --- 150,154 ---- char *arg; int deallocInterp = 0; ! int ii, status = TCL_ERROR; if (interp == NULL) { *************** *** 159,164 **** } va_end(ap); ! if (cbPtr->scriptarg) { ! Ns_DStringAppendElement(&ds, cbPtr->scriptarg); } status = Tcl_EvalEx(interp, ds.string, ds.length, 0); --- 164,169 ---- } va_end(ap); ! for (ii = 0; ii < cbPtr->argc; ii++) { ! Ns_DStringAppendElement(&ds, cbPtr->argv[ii]); } status = Tcl_EvalEx(interp, ds.string, ds.length, 0); *************** *** 226,234 **** Ns_TclCallbackArgProc(Tcl_DString *dsPtr, void *arg) { Ns_TclCallback *cbPtr = arg; Tcl_DStringAppendElement(dsPtr, cbPtr->script); ! if (cbPtr->scriptarg != NULL) { ! Tcl_DStringAppendElement(dsPtr, cbPtr->scriptarg); } } --- 231,240 ---- Ns_TclCallbackArgProc(Tcl_DString *dsPtr, void *arg) { + int ii; Ns_TclCallback *cbPtr = arg; Tcl_DStringAppendElement(dsPtr, cbPtr->script); ! for (ii = 0; ii < cbPtr->argc; ii++) { ! Tcl_DStringAppendElement(dsPtr, cbPtr->argv[ii]); } } *************** *** 256,265 **** Ns_TclCallback *cbPtr; ! if (objc != 2 && objc != 3) { ! Tcl_WrongNumArgs(interp, 1, objv, "script ?arg?"); return TCL_ERROR; } ! cbPtr = Ns_TclNewCallbackObj(interp, Ns_TclCallbackProc, ! objv[1], (objc == 3) ? objv[2] : NULL); (*atProc)(Ns_TclCallbackProc, cbPtr); --- 262,271 ---- Ns_TclCallback *cbPtr; ! if (objc < 2) { ! Tcl_WrongNumArgs(interp, 1, objv, "script ?args?"); return TCL_ERROR; } ! cbPtr = Ns_TclNewCallback(interp, Ns_TclCallbackProc, objv[1], ! objc - 2, objv + 2); (*atProc)(Ns_TclCallbackProc, cbPtr); Index: conn.c =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsd/conn.c,v retrieving revision 1.24 retrieving revision 1.25 diff -C2 -d -r1.24 -r1.25 *** conn.c 4 Jan 2006 14:08:03 -0000 1.24 --- conn.c 13 Jan 2006 15:49:11 -0000 1.25 *************** *** 1436,1446 **** int NsTclLocationProcObjCmd(ClientData arg, Tcl_Interp *interp, int objc, ! Tcl_Obj **objv) { NsServer *servPtr = NsGetInitServer(); Ns_TclCallback *cbPtr; ! if (objc != 2 && objc != 3) { ! Tcl_WrongNumArgs(interp, 1, objv, "script ?arg?"); return TCL_ERROR; } --- 1436,1446 ---- int NsTclLocationProcObjCmd(ClientData arg, Tcl_Interp *interp, int objc, ! Tcl_Obj *CONST objv[]) { NsServer *servPtr = NsGetInitServer(); Ns_TclCallback *cbPtr; ! if (objc < 2) { ! Tcl_WrongNumArgs(interp, 1, objv, "script ?args?"); return TCL_ERROR; } *************** *** 1449,1454 **** return TCL_ERROR; } ! cbPtr = Ns_TclNewCallbackObj(interp, NsTclConnLocation, ! objv[1], (objc > 2) ? objv[2] : NULL); Ns_SetConnLocationProc(NsTclConnLocation, cbPtr); --- 1449,1454 ---- return TCL_ERROR; } ! cbPtr = Ns_TclNewCallback(interp, NsTclConnLocation, objv[1], ! objc - 2, objv + 2); Ns_SetConnLocationProc(NsTclConnLocation, cbPtr); Index: pathname.c =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsd/pathname.c,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** pathname.c 19 Aug 2005 08:20:27 -0000 1.6 --- pathname.c 13 Jan 2006 15:49:11 -0000 1.7 *************** *** 664,674 **** int ! NsTclServerRootProcObjCmd(ClientData arg, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { ! NsServer *servPtr = NsGetInitServer(); ! Ns_TclCallback *cbPtr; ! if (objc != 2 && objc != 3) { ! Tcl_WrongNumArgs(interp, 1, objv, "script ?arg?"); return TCL_ERROR; } --- 664,675 ---- int ! NsTclServerRootProcObjCmd(ClientData arg, Tcl_Interp *interp, int objc, ! Tcl_Obj *CONST objv[]) { ! NsServer *servPtr = NsGetInitServer(); ! Ns_TclCallback *cbPtr; ! if (objc < 2) { ! Tcl_WrongNumArgs(interp, 1, objv, "script ?args?"); return TCL_ERROR; } *************** *** 677,682 **** return TCL_ERROR; } ! cbPtr = Ns_TclNewCallbackObj(interp, NsTclServerRoot, ! objv[1], (objc > 2) ? objv[2] : NULL); Ns_SetServerRootProc(NsTclServerRoot, cbPtr); --- 678,683 ---- return TCL_ERROR; } ! cbPtr = Ns_TclNewCallback(interp, NsTclServerRoot, objv[1], ! objc - 2, objv + 2); Ns_SetServerRootProc(NsTclServerRoot, cbPtr); Index: tclsched.c =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsd/tclsched.c,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** tclsched.c 10 Jun 2005 17:58:40 -0000 1.4 --- tclsched.c 13 Jan 2006 15:49:11 -0000 1.5 *************** *** 67,77 **** int ! NsTclAfterObjCmd(ClientData arg, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { Ns_TclCallback *cbPtr; int id, seconds; ! if (objc != 3) { ! Tcl_WrongNumArgs(interp, 1, objv, "seconds script"); return TCL_ERROR; } --- 67,78 ---- int ! NsTclAfterObjCmd(ClientData arg, Tcl_Interp *interp, int objc, ! Tcl_Obj *CONST objv[]) { Ns_TclCallback *cbPtr; int id, seconds; ! if (objc < 3) { ! Tcl_WrongNumArgs(interp, 1, objv, "seconds script ?args?"); return TCL_ERROR; } *************** *** 79,84 **** return TCL_ERROR; } ! cbPtr = Ns_TclNewCallbackObj(interp, NsTclSchedProc, objv[2], NULL); ! id = Ns_After(seconds, (Ns_Callback *) NsTclSchedProc, cbPtr, Ns_TclFreeCallback); return ReturnValidId(interp, id, cbPtr); --- 80,87 ---- return TCL_ERROR; } ! cbPtr = Ns_TclNewCallback(interp, NsTclSchedProc, objv[2], ! objc - 3, objv + 3); ! id = Ns_After(seconds, (Ns_Callback *) NsTclSchedProc, cbPtr, ! Ns_TclFreeCallback); return ReturnValidId(interp, id, cbPtr); *************** *** 177,188 **** int ! NsTclSchedDailyObjCmd(ClientData arg, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { Ns_TclCallback *cbPtr; ! int id; ! int hour, minute; ! char *script; ! char *scriptarg = NULL; ! int flags = 0, once = 0, thread = 0; Ns_ObjvSpec opts[] = { --- 180,190 ---- int ! NsTclSchedDailyObjCmd(ClientData arg, Tcl_Interp *interp, int objc, ! Tcl_Obj *CONST objv[]) { Ns_TclCallback *cbPtr; ! Tcl_Obj *scriptObj; ! int id, hour, minute; ! int remain = 0, flags = 0, once = 0, thread = 0; Ns_ObjvSpec opts[] = { *************** *** 193,200 **** }; Ns_ObjvSpec args[] = { ! {"hour", Ns_ObjvInt, &hour, NULL}, ! {"minute", Ns_ObjvInt, &minute, NULL}, ! {"script", Ns_ObjvString, &script, NULL}, ! {"?arg", Ns_ObjvString, &scriptarg, NULL}, {NULL, NULL, NULL, NULL} }; --- 195,202 ---- }; Ns_ObjvSpec args[] = { ! {"hour", Ns_ObjvInt, &hour, NULL}, ! {"minute", Ns_ObjvInt, &minute, NULL}, ! {"script", Ns_ObjvObj, &scriptObj, NULL}, ! {"?args", Ns_ObjvArgs, &remain, NULL}, {NULL, NULL, NULL, NULL} }; *************** *** 218,222 **** } ! cbPtr = Ns_TclNewCallback(interp, NsTclSchedProc, script, scriptarg); id = Ns_ScheduleDaily(NsTclSchedProc, cbPtr, flags, hour, minute, FreeSched); --- 220,225 ---- } ! cbPtr = Ns_TclNewCallback(interp, NsTclSchedProc, scriptObj, ! remain, objv + (objc - remain)); id = Ns_ScheduleDaily(NsTclSchedProc, cbPtr, flags, hour, minute, FreeSched); *************** *** 243,254 **** int ! NsTclSchedWeeklyObjCmd(ClientData arg, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { Ns_TclCallback *cbPtr; ! int id; ! int day, hour, minute; ! char *script; ! char *scriptarg = NULL; ! int flags = 0, once = 0, thread = 0; Ns_ObjvSpec opts[] = { --- 246,256 ---- int ! NsTclSchedWeeklyObjCmd(ClientData arg, Tcl_Interp *interp, int objc, ! Tcl_Obj *CONST objv[]) { Ns_TclCallback *cbPtr; ! Tcl_Obj *scriptObj; ! int id, day, hour, minute; ! int remain = 0, flags = 0, once = 0, thread = 0; Ns_ObjvSpec opts[] = { *************** *** 262,267 **** {"hour", Ns_ObjvInt, &hour, NULL}, {"minute", Ns_ObjvInt, &minute, NULL}, ! {"script", Ns_ObjvString, &script, NULL}, ! {"?arg", Ns_ObjvString, &scriptarg, NULL}, {NULL, NULL, NULL, NULL} }; --- 264,269 ---- {"hour", Ns_ObjvInt, &hour, NULL}, {"minute", Ns_ObjvInt, &minute, NULL}, ! {"script", Ns_ObjvObj, &scriptObj, NULL}, ! {"?args", Ns_ObjvArgs, &remain, NULL}, {NULL, NULL, NULL, NULL} }; *************** *** 289,293 **** } ! cbPtr = Ns_TclNewCallback(interp, NsTclSchedProc, script, scriptarg); id = Ns_ScheduleWeekly(NsTclSchedProc, cbPtr, flags, day, hour, minute, FreeSched); --- 291,296 ---- } ! cbPtr = Ns_TclNewCallback(interp, NsTclSchedProc, scriptObj, ! remain, objv + (objc - remain)); id = Ns_ScheduleWeekly(NsTclSchedProc, cbPtr, flags, day, hour, minute, FreeSched); *************** *** 314,325 **** int ! NsTclSchedObjCmd(ClientData arg, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { Ns_TclCallback *cbPtr; ! int id; ! int interval; ! char *script; ! char *scriptarg = NULL; ! int flags = 0, once = 0, thread = 0; Ns_ObjvSpec opts[] = { --- 317,327 ---- int ! NsTclSchedObjCmd(ClientData arg, Tcl_Interp *interp, int objc, ! Tcl_Obj *CONST objv[]) { Ns_TclCallback *cbPtr; ! Tcl_Obj *scriptObj; ! int id, interval; ! int remain = 0, flags = 0, once = 0, thread = 0; Ns_ObjvSpec opts[] = { *************** *** 331,336 **** Ns_ObjvSpec args[] = { {"interval", Ns_ObjvInt, &interval, NULL}, ! {"script", Ns_ObjvString, &script, NULL}, ! {"?arg", Ns_ObjvString, &scriptarg, NULL}, {NULL, NULL, NULL, NULL} }; --- 333,338 ---- Ns_ObjvSpec args[] = { {"interval", Ns_ObjvInt, &interval, NULL}, ! {"script", Ns_ObjvObj, &scriptObj, NULL}, ! {"?args", Ns_ObjvArgs, &remain, NULL}, {NULL, NULL, NULL, NULL} }; *************** *** 350,354 **** } ! cbPtr = Ns_TclNewCallback(interp, NsTclSchedProc, script, scriptarg); id = Ns_ScheduleProcEx(NsTclSchedProc, cbPtr, flags, interval, FreeSched); --- 352,357 ---- } ! cbPtr = Ns_TclNewCallback(interp, NsTclSchedProc, scriptObj, ! remain, objv + (objc - remain)); id = Ns_ScheduleProcEx(NsTclSchedProc, cbPtr, flags, interval, FreeSched); Index: tclrequest.c =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsd/tclrequest.c,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** tclrequest.c 23 Dec 2005 04:27:22 -0000 1.11 --- tclrequest.c 13 Jan 2006 15:49:11 -0000 1.12 *************** *** 73,80 **** Ns_TclCallback cb; ! cb.cbProc = &NsTclRequestProc; ! cb.server = Ns_ConnServer(conn); ! cb.script = (char *) name; ! cb.scriptarg = NULL; return NsTclRequestProc(&cb, conn); --- 73,81 ---- Ns_TclCallback cb; ! cb.cbProc = &NsTclRequestProc; ! cb.server = Ns_ConnServer(conn); ! cb.script = (char *) name; ! cb.argc = 0; ! cb.argv = NULL; return NsTclRequestProc(&cb, conn); *************** *** 104,109 **** NsInterp *itPtr = arg; Ns_TclCallback *cbPtr; ! char *method, *url, *script, *scriptarg = NULL; ! int flags = 0; Ns_ObjvSpec opts[] = { --- 105,111 ---- NsInterp *itPtr = arg; Ns_TclCallback *cbPtr; ! Tcl_Obj *scriptObj; ! char *method, *url; ! int flags = 0, remain = 0; Ns_ObjvSpec opts[] = { *************** *** 115,120 **** {"method", Ns_ObjvString, &method, NULL}, {"url", Ns_ObjvString, &url, NULL}, ! {"script", Ns_ObjvString, &script, NULL}, ! {"?arg", Ns_ObjvString, &scriptarg, NULL}, {NULL, NULL, NULL, NULL} }; --- 117,122 ---- {"method", Ns_ObjvString, &method, NULL}, {"url", Ns_ObjvString, &url, NULL}, ! {"script", Ns_ObjvObj, &scriptObj, NULL}, ! {"?args", Ns_ObjvArgs, &remain, NULL}, {NULL, NULL, NULL, NULL} }; *************** *** 123,127 **** } ! cbPtr = Ns_TclNewCallback(interp, NsTclRequestProc, script, scriptarg); Ns_RegisterRequest(itPtr->servPtr->server, method, url, NsTclRequestProc, Ns_TclFreeCallback, cbPtr, flags); --- 125,130 ---- } ! cbPtr = Ns_TclNewCallback(interp, NsTclRequestProc, scriptObj, ! remain, objv + (objc - remain)); Ns_RegisterRequest(itPtr->servPtr->server, method, url, NsTclRequestProc, Ns_TclFreeCallback, cbPtr, flags); *************** *** 290,295 **** NsInterp *itPtr = arg; Ns_TclCallback *cbPtr; ! char *method, *urlPattern, *script, *scriptarg = NULL; ! int when = 0; Ns_ObjvSpec opts[] = { --- 293,299 ---- NsInterp *itPtr = arg; Ns_TclCallback *cbPtr; ! char *method, *urlPattern; ! Tcl_Obj *scriptObj; ! int remain = 0, when = 0; Ns_ObjvSpec opts[] = { *************** *** 302,307 **** {"method", Ns_ObjvString, &method, NULL}, {"urlPattern", Ns_ObjvString, &urlPattern, NULL}, ! {"script", Ns_ObjvString, &script, NULL}, ! {"?arg", Ns_ObjvString, &scriptarg, NULL}, {NULL, NULL, NULL, NULL} }; --- 306,311 ---- {"method", Ns_ObjvString, &method, NULL}, {"urlPattern", Ns_ObjvString, &urlPattern, NULL}, ! {"script", Ns_ObjvObj, &scriptObj, NULL}, ! {"?args", Ns_ObjvArgs, &remain, NULL}, {NULL, NULL, NULL, NULL} }; *************** *** 310,314 **** } ! cbPtr = Ns_TclNewCallback(interp, NsTclFilterProc, script, scriptarg); Ns_RegisterFilter(itPtr->servPtr->server, method, urlPattern, NsTclFilterProc, when, cbPtr); --- 314,319 ---- } ! cbPtr = Ns_TclNewCallback(interp, NsTclFilterProc, scriptObj, ! remain, objv + (objc - remain)); Ns_RegisterFilter(itPtr->servPtr->server, method, urlPattern, NsTclFilterProc, when, cbPtr); *************** *** 380,390 **** NsInterp *itPtr = arg; Ns_TclCallback *cbPtr; ! char *method, *urlPattern, *script, *scriptarg = NULL; Ns_ObjvSpec args[] = { {"method", Ns_ObjvString, &method, NULL}, {"urlPattern", Ns_ObjvString, &urlPattern, NULL}, ! {"script", Ns_ObjvString, &script, NULL}, ! {"?arg", Ns_ObjvString, &scriptarg, NULL}, {NULL, NULL, NULL, NULL} }; --- 385,397 ---- NsInterp *itPtr = arg; Ns_TclCallback *cbPtr; ! char *method, *urlPattern; ! Tcl_Obj *scriptObj; ! int remain = 0; Ns_ObjvSpec args[] = { {"method", Ns_ObjvString, &method, NULL}, {"urlPattern", Ns_ObjvString, &urlPattern, NULL}, ! {"script", Ns_ObjvObj, &scriptObj, NULL}, ! {"?args", Ns_ObjvArgs, &remain, NULL}, {NULL, NULL, NULL, NULL} }; *************** *** 393,397 **** } ! cbPtr = Ns_TclNewCallback(interp, NsTclFilterProc, script, scriptarg); Ns_RegisterFilter(itPtr->servPtr->server, method, urlPattern, NsTclFilterProc, NS_FILTER_VOID_TRACE, cbPtr); --- 400,405 ---- } ! cbPtr = Ns_TclNewCallback(interp, NsTclFilterProc, scriptObj, ! remain, objv + (objc - remain)); Ns_RegisterFilter(itPtr->servPtr->server, method, urlPattern, NsTclFilterProc, NS_FILTER_VOID_TRACE, cbPtr); *************** *** 479,500 **** Tcl_DString cmd; Tcl_Interp *interp; ! int status; CONST char *result; ! interp = Ns_GetConnInterp(conn); Tcl_DStringInit(&cmd); ! /* ! * This really should be: cmd why ?arg?, but why and arg ! * are reversed for backwards compatibility. */ ! Tcl_DStringAppend(&cmd, cbPtr->script, -1); ! if (cbPtr->scriptarg != NULL) { ! Tcl_DStringAppendElement(&cmd, cbPtr->scriptarg); ! } ! /* ! * Append the 'why' */ --- 487,504 ---- Tcl_DString cmd; Tcl_Interp *interp; ! int ii, status; CONST char *result; ! interp = Ns_GetConnInterp(conn); Tcl_DStringInit(&cmd); ! /* ! * Append the command */ ! Tcl_DStringAppend(&cmd, cbPtr->script, -1); ! /* ! * Append the 'why' argument */ *************** *** 515,518 **** --- 519,530 ---- /* + * Append optional arguments + */ + + for (ii = 0; ii < cbPtr->argc; ii++) { + Tcl_DStringAppendElement(&cmd, cbPtr->argv[ii]); + } + + /* * Run the script. */ Index: url2file.c =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsd/url2file.c,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** url2file.c 30 Dec 2005 11:26:42 -0000 1.2 --- url2file.c 13 Jan 2006 15:49:11 -0000 1.3 *************** *** 365,380 **** NsInterp *itPtr = arg; Ns_TclCallback *cbPtr; ! char *url, *script, *scriptarg = NULL; ! int flags = 0; ! Ns_ObjvSpec opts[] = { ! {"-noinherit", Ns_ObjvBool, &flags, (void *) NS_OP_NOINHERIT}, ! {"--", Ns_ObjvBreak, NULL, NULL}, {NULL, NULL, NULL, NULL} }; Ns_ObjvSpec args[] = { {"url", Ns_ObjvString, &url, NULL}, ! {"script", Ns_ObjvString, &script, NULL}, ! {"?arg", Ns_ObjvString, &scriptarg, NULL}, {NULL, NULL, NULL, NULL} }; --- 365,381 ---- NsInterp *itPtr = arg; Ns_TclCallback *cbPtr; ! char *url; ! Tcl_Obj *scriptObj; ! int remain = 0, flags = 0; ! Ns_ObjvSpec opts[] = { ! {"-noinherit", Ns_ObjvBool, &flags, (void *) NS_OP_NOINHERIT}, ! {"--", Ns_ObjvBreak, NULL, NULL}, {NULL, NULL, NULL, NULL} }; Ns_ObjvSpec args[] = { {"url", Ns_ObjvString, &url, NULL}, ! {"script", Ns_ObjvObj, &scriptObj, NULL}, ! {"?args", Ns_ObjvArgs, &remain, NULL}, {NULL, NULL, NULL, NULL} }; *************** *** 382,386 **** return TCL_ERROR; } ! cbPtr = Ns_TclNewCallback(interp, NsTclUrl2FileProc, script, scriptarg); Ns_RegisterUrl2FileProc(itPtr->servPtr->server, url, NsTclUrl2FileProc, Ns_TclFreeCallback, cbPtr, flags); --- 383,388 ---- return TCL_ERROR; } ! cbPtr = Ns_TclNewCallback(interp, NsTclUrl2FileProc, scriptObj, ! remain, objv + (objc - remain)); Ns_RegisterUrl2FileProc(itPtr->servPtr->server, url, NsTclUrl2FileProc, Ns_TclFreeCallback, cbPtr, flags); |