In 3.x, it seems the ClientData parameter is either 's' or 'g' to
indicate setter or getter. Evil hackery. :-)
I'm not sure what 4.x does with the ClientData parameter.
-- Dossy
On 2003.02.15, Andrew Piskorski <[EMAIL PROTECTED]> wrote:
> Could someone please explain the different uses of the "ClientData
> arg" parameter to the Nsv C functions in AOLserver 3.x vs. 4.0? For
> example, let's look at the 3.x NsTclVSetCmd and the (equivalent but
> object-ified) 4.x NsTclNsvSetObjCmd functions (see below).
>
> I believe the ClientData typdef is a void * in both 3.x and 4.x. For
> these two NsTclNsv*Set*Cmd functions, in 3.x, "arg" is clearly just
> the single character 'g', while in 4.x, well basically I have no idea
> what arg is. Using the character 'g' like in 3.x definitely isn't
> right, as that makes my AOLserver segfault with a Bus Error. :)
>
> Could someone explain what's really going on with "arg", please?
> Thanks!
>
>
> # aol3-src/aolserver/nsd/tclcmds.c :
>
> { "nsv_set", NsTclVSetCmd, (ClientData) 's' },
>
> # aol4-src/aolserver/nsd/tclcmds.c :
>
> {"nsv_set", NULL, NsTclNsvSetObjCmd},
>
>
> # aol3-src/aolserver/nsd/tclvar.c :
>
> int
> NsTclVSetCmd(ClientData dummy, Tcl_Interp *interp, int argc, char **argv)
> {
> Array *arrayPtr;
>
> if (argc != 3 && argc != 4) {
> Tcl_AppendResult(interp, "wrong # args: should be: \"",
> argv[0], " array key ?value?\"", NULL);
> return TCL_ERROR;
> }
> if (argc == 3) {
> return NsTclVGetCmd((ClientData) 'g', interp, argc, argv);
> }
> arrayPtr = LockArray(interp, argv[1], FLAGS_CREATE);
> SetVar(arrayPtr, argv[2], argv[3]);
> UnlockArray(arrayPtr);
> Tcl_SetResult(interp, argv[3], TCL_VOLATILE);
> return TCL_OK;
> }
>
>
> # aol4-src/aolserver/nsd/tclvar.c :
>
> int
> NsTclNsvSetObjCmd(ClientData arg, Tcl_Interp *interp, int objc, Tcl_Obj **objv)
> {
> Array *arrayPtr;
>
> if (objc == 3) {
> return NsTclNsvGetObjCmd(arg, interp, objc, objv);
> } else if (objc != 4) {
> Tcl_WrongNumArgs(interp, 1, objv, "array key ?value?");
> return TCL_ERROR;
> }
> arrayPtr = LockArray(arg, interp, objv[1], 1);
> SetVar(arrayPtr, objv[2], objv[3]);
> UnlockArray(arrayPtr);
> Tcl_SetObjResult(interp, objv[3]);
> return TCL_OK;
> }
>
> --
> Andrew Piskorski <[EMAIL PROTECTED]>
> http://www.piskorski.com
--
Dossy Shiobara mail: [EMAIL PROTECTED]
Panoptic Computer Network web: http://www.panoptic.com/
"He realized the fastest way to change is to laugh at your own
folly -- then you can let go and quickly move on." (p. 70)