From a34d251c9880c82cb96b97e6e5899d7174f9b067 Mon Sep 17 00:00:00 2001 From: Steve Bennett Date: Sun, 12 Jan 2014 20:20:44 +1000 Subject: file: update file stat to use Jim_DictMerge() Signed-off-by: Steve Bennett --- jim-file.c | 18 ++++++++++-------- jim.h | 1 + 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/jim-file.c b/jim-file.c index 065ff2c..07fe699 100644 --- a/jim-file.c +++ b/jim-file.c @@ -174,21 +174,23 @@ static int StoreStatData(Jim_Interp *interp, Jim_Obj *varName, const struct stat /* Was a variable specified? */ if (varName) { - Jim_Obj *objPtr = Jim_GetVariable(interp, varName, JIM_NONE); + Jim_Obj *objPtr; + objPtr = Jim_GetVariable(interp, varName, JIM_NONE); + if (objPtr) { - if (Jim_DictSize(interp, objPtr) < 0) { + Jim_Obj *objv[2]; + + objv[0] = objPtr; + objv[1] = listObj; + + objPtr = Jim_DictMerge(interp, 2, objv); + if (objPtr == NULL) { /* This message matches the one from Tcl */ Jim_SetResultFormatted(interp, "can't set \"%#s(dev)\": variable isn't array", varName); Jim_FreeNewObj(interp, listObj); return JIM_ERR; } - if (Jim_IsShared(objPtr)) - objPtr = Jim_DuplicateObj(interp, objPtr); - - /* Just cheat here and append as a list and convert to a dict */ - Jim_ListAppendList(interp, objPtr, listObj); - Jim_DictSize(interp, objPtr); Jim_InvalidateStringRep(objPtr); Jim_FreeNewObj(interp, listObj); diff --git a/jim.h b/jim.h index dd2b9ab..5c8de22 100644 --- a/jim.h +++ b/jim.h @@ -805,6 +805,7 @@ JIM_EXPORT int Jim_DictKeys(Jim_Interp *interp, Jim_Obj *objPtr, Jim_Obj *patter JIM_EXPORT int Jim_DictValues(Jim_Interp *interp, Jim_Obj *dictObjPtr, Jim_Obj *patternObjPtr); JIM_EXPORT int Jim_DictSize(Jim_Interp *interp, Jim_Obj *objPtr); JIM_EXPORT int Jim_DictInfo(Jim_Interp *interp, Jim_Obj *objPtr); +JIM_EXPORT Jim_Obj *Jim_DictMerge(Jim_Interp *interp, int objc, Jim_Obj *const *objv); /* return code object */ JIM_EXPORT int Jim_GetReturnCode (Jim_Interp *interp, Jim_Obj *objPtr, -- cgit v1.1