Update of /cvsroot/aolserver/aolserver/nscgi
In directory sc8-pr-cvs11.sourceforge.net:/tmp/cvs-serv6747
Modified Files:
nscgi.c
Log Message:
Added Tcl command "ns_register_cgi" which effectively does the same as
"ns_param map" at startup, as it takes the same argument, the map string.
Also, REQUEST_URI is now properly set in the env. for CGI executables.
Index: nscgi.c
===================================================================
RCS file: /cvsroot/aolserver/aolserver/nscgi/nscgi.c,v
retrieving revision 1.32
retrieving revision 1.33
diff -C2 -d -r1.32 -r1.33
*** nscgi.c 24 Jan 2008 03:49:37 -0000 1.32
--- nscgi.c 24 Jan 2008 13:21:12 -0000 1.33
***************
*** 110,113 ****
--- 110,119 ----
} Map;
+ /*
+ * Local functions defined in this file
+ */
+
+ static Tcl_ObjCmdProc CgiTclRegisterCgiObjCmd;
+ static int AddCmds(Tcl_Interp *interp, void *arg);
static Ns_OpProc CgiRequest;
static int CgiRegister(Mod *modPtr, char *map);
***************
*** 224,227 ****
--- 230,240 ----
Ns_MutexSetName2(&modPtr->lock, "nscgi", server);
}
+
+ /*
+ * N.B. What happens next when this module gets loaded more than once?
+ */
+
+ Ns_TclInitInterps(server, AddCmds, modPtr);
+
return NS_OK;
}
***************
*** 231,234 ****
--- 244,300 ----
*----------------------------------------------------------------------
*
+ * AddCmds --
+ *
+ * Add Tcl commands for nscgi
+ *
+ * Results:
+ * NS_OK
+ *
+ * Side effects:
+ * Adds Tcl commands
+ *
+ *----------------------------------------------------------------------
+ */
+
+ static int
+ AddCmds(Tcl_Interp *interp, void *arg)
+ {
+ Tcl_CreateObjCommand(interp, "ns_register_cgi", CgiTclRegisterCgiObjCmd, arg, NULL);
+ return NS_OK;
+ }
+
+ /*
+ *----------------------------------------------------------------------
+ *
+ * CgiTclRegisterCgiObjCmd --
+ *
+ * Implements ns_register_cgi as obj command.
+ *
+ * Results:
+ * Tcl result.
+ *
+ * Side effects:
+ * See docs.
+ *
+ *----------------------------------------------------------------------
+ */
+
+ int
+ CgiTclRegisterCgiObjCmd(ClientData arg, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
+ {
+ Mod *modPtr = (Mod *) arg;
+
+ if (objc != 2) {
+ Tcl_WrongNumArgs(interp, 1, objv, "map");
+ return TCL_ERROR;
+ }
+ CgiRegister(modPtr, Tcl_GetString(objv[1]));
+ return TCL_OK;
+ }
+
+
+ /*
+ *----------------------------------------------------------------------
+ *
* CgiRequest -
*
***************
*** 683,686 ****
--- 749,759 ----
*/
+ Ns_DStringAppend(dsPtr, conn->request->url);
+ if (conn->request->query != NULL) {
+ Ns_DStringVarAppend(dsPtr, "?", conn->request->query, NULL);
+ }
+ SetUpdate(cgiPtr->env, "REQUEST_URI", dsPtr->string);
+ Ns_DStringTrunc(dsPtr, 0);
+
SetUpdate(cgiPtr->env, "SCRIPT_NAME", cgiPtr->name);
SetUpdate(cgiPtr->env, "SCRIPT_FILENAME", cgiPtr->path);
|