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

Reply via email to