rem: if (Tcl_SplitList(interp, interp->result, &argc, &argv) == TCL_OK) {
add: if (Tcl_SplitList(interp, interp->result, &argc, (CONST char***)&argv) == TCL_OK) {
context: ShareVar(NsInterp *itPtr, Tcl_Interp *interp, char *varName){    NsServer *servPtr = itPtr->servPtr;    Tcl_HashEntry *hPtr;    Tcl_DString ds;    NsShareVar *valuePtr;    char *s;    char* globalizedVarName;    int new;    /*     * Ensure the variable to share is a scalar or whole array.     */    if ((s = strchr(varName, '(')) != NULL && (strchr(s, ')') != NULL)) {	Tcl_AppendResult(interp, "can't share ", varName,		": must share whole arrays", (char *) NULL);    	return TCL_ERROR;    }    /*     * Create the shared variable entry if it doesn't already exist.     */    globalizedVarName = GetGlobalizedName(&ds, varName);    Ns_CsEnter(&servPtr->share.cs);    hPtr = Tcl_CreateHashEntry(&servPtr->share.vars, globalizedVarName, &new);    if (!new) {    	valuePtr = Tcl_GetHashValue(hPtr);    } else {    	valuePtr = ns_calloc(1, sizeof(NsShareVar));	Ns_CsInit(&valuePtr->lock);        valuePtr->flags = SHARE_UNDEFINED;        /*         * See if the variable exists already as a global variable         * If it does get its current value.         */        if (Tcl_VarEval(interp, "info exists ", globalizedVarName, NULL) != TCL_OK) {            Tcl_AppendResult(interp, "error sharing ", globalizedVarName, " can't determine existence of variable", (char *) NULL);	    Tcl_DStringFree(&ds);            return TCL_ERROR;        }                if (strcmp(interp->result, "1") == 0) {            /*             * Get existing value in variable being shared.             */            valuePtr->objPtr = Tcl_GetVar2Ex(interp, globalizedVarName, NULL, TCL_LEAVE_ERR_MSG);            if (valuePtr->objPtr != NULL) {		char *string;		int length;		string = Tcl_GetStringFromObj(valuePtr->objPtr, &length);		valuePtr->objPtr = Tcl_NewStringObj(string, length);		Tcl_IncrRefCount(valuePtr->objPtr);                valuePtr->flags = SHARE_SCALAR;            } else {                if (Tcl_VarEval(interp, "array get ", globalizedVarName, NULL) == TCL_OK) {                    /*                      * Probably an array.                      */                    int argc = 0;                    char** argv = NULL;                    int x;                    Tcl_InitHashTable(&valuePtr->array, TCL_STRING_KEYS);                    if (Tcl_SplitList(interp, interp->result, &argc, &argv) == TCL_OK) {                        for (x = 0; x < argc; x += 2) {                            Tcl_HashEntry* newEntry;                            Tcl_Obj* newObj;                            int new;                            newEntry = Tcl_CreateHashEntry(&valuePtr->array, argv[x], &new);                            newObj = Tcl_NewStringObj(argv[x + 1], -1);			    Tcl_IncrRefCount(newObj);                            Tcl_SetHashValue(newEntry, (ClientData) newObj);                        }                        Tcl_Free((char*) argv);                    }                    valuePtr->flags = SHARE_ARRAY;                }            }            Tcl_VarEval(interp, "unset ", globalizedVarName, NULL);        }        Tcl_SetHashValue(hPtr, valuePtr);    }    valuePtr->shareCount++;    /*     * Register the variable in a per-thread table.     * Declare it as a global variable.     */    RegisterShare(itPtr, interp, globalizedVarName, valuePtr);    Tcl_VarEval(interp, "global ", varName, NULL);    Ns_CsLeave(&servPtr->share.cs);    /*     * The value in the shared table is independent of the values     * in each thread's shared variable.  If a thread deletes its     * global variable, the UNSET trace will hook up to the     * shared value again.  There is no need to put extra     * reference counts on the variable to preserver the shared value.     */    Tcl_DStringFree(&ds);    return TCL_OK;}