From: Stephen D. <sd...@us...> - 2005-12-11 10:01:23
|
Update of /cvsroot/naviserver/naviserver/nsd In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19572/nsd Modified Files: tclvar.c Log Message: * nsd/tclvar.c: * tests/ns_nsv.test: Add -nocomplain switch to nsv_unset command to match Tcl unset command. Index: tclvar.c =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsd/tclvar.c,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** tclvar.c 11 Dec 2005 08:20:08 -0000 1.4 --- tclvar.c 11 Dec 2005 10:01:10 -0000 1.5 *************** *** 504,521 **** { Array *arrayPtr = NULL; Tcl_HashEntry *hPtr = NULL; ! if (objc != 2 && objc != 3) { ! Tcl_WrongNumArgs(interp, 1, objv, "array ?key?"); return TCL_ERROR; } ! arrayPtr = LockArray(arg, interp, objv[1], 0); if (arrayPtr == NULL) { return TCL_ERROR; } ! if (objc == 2) { Tcl_DeleteHashEntry(arrayPtr->entryPtr); } else { ! hPtr = Tcl_FindHashEntry(&arrayPtr->vars, Tcl_GetString(objv[2])); if (hPtr != NULL) { ns_free(Tcl_GetHashValue(hPtr)); --- 504,538 ---- { Array *arrayPtr = NULL; + Tcl_Obj *arrayObj; Tcl_HashEntry *hPtr = NULL; + char *key = NULL; + int nocomplain = 0; ! Ns_ObjvSpec opts[] = { ! {"-nocomplain", Ns_ObjvBool, &nocomplain, (void *) NS_TRUE}, ! {"--", Ns_ObjvBreak, NULL, NULL}, ! {NULL, NULL, NULL, NULL} ! }; ! Ns_ObjvSpec args[] = { ! {"array", Ns_ObjvObj, &arrayObj, NULL}, ! {"?key", Ns_ObjvString, &key, NULL}, ! {NULL, NULL, NULL, NULL} ! }; ! if (Ns_ParseObjv(opts, args, interp, 1, objc, objv) != NS_OK) { return TCL_ERROR; } ! ! arrayPtr = LockArray(arg, interp, arrayObj, 0); if (arrayPtr == NULL) { + if (nocomplain) { + Tcl_ResetResult(interp); + return TCL_OK; + } return TCL_ERROR; } ! if (key == NULL) { Tcl_DeleteHashEntry(arrayPtr->entryPtr); } else { ! hPtr = Tcl_FindHashEntry(&arrayPtr->vars, key); if (hPtr != NULL) { ns_free(Tcl_GetHashValue(hPtr)); *************** *** 524,532 **** } UnlockArray(arrayPtr); ! if (objc == 2) { FlushArray(arrayPtr); Tcl_DeleteHashTable(&arrayPtr->vars); ns_free(arrayPtr); ! } else if (hPtr == NULL) { Tcl_AppendResult(interp, "no such key: ", Tcl_GetString(objv[2]), NULL); return TCL_ERROR; --- 541,549 ---- } UnlockArray(arrayPtr); ! if (key == NULL) { FlushArray(arrayPtr); Tcl_DeleteHashTable(&arrayPtr->vars); ns_free(arrayPtr); ! } else if (hPtr == NULL && !nocomplain) { Tcl_AppendResult(interp, "no such key: ", Tcl_GetString(objv[2]), NULL); return TCL_ERROR; |