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;
|