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)

Reply via email to