From 571fa65a6f3cf1c0a11d8c3b46440fe8457fa6fb Mon Sep 17 00:00:00 2001 From: Steve Bennett Date: Sun, 24 Jan 2010 11:12:50 +1000 Subject: Build improvements, bug fixes and compiler warnings Remove unimplemented 'after restart|expire' from eventloop Allow libjim to be build as a shared library On some platforms, regex.h needs stdlib.h first Use ualarm() only for times < 1 second Fix warnings found by clang static analyser *: printf/syslog %m isn't portable *: some variables set but never read *: some possible null pointer references (although mostly impossible) *: also minor fixes to jim unit tests Fix 'syslog -options ' Must null terminate readlink() result --- jim.c | 59 ++++++++++++++++++++++++++--------------------------------- 1 file changed, 26 insertions(+), 33 deletions(-) (limited to 'jim.c') diff --git a/jim.c b/jim.c index 8d6230d..4f8a500 100644 --- a/jim.c +++ b/jim.c @@ -1600,7 +1600,7 @@ static int JimEscape(char *dest, const char *s, int slen) } } len = p-dest; - *p++ = '\0'; + *p = '\0'; return len; } @@ -2245,7 +2245,6 @@ static void trim_right(char *str, const char *trimchars) while (p != end) { c = *p; if (strchr(trimchars, c) == 0) { - end = p; break; } p--; @@ -2313,12 +2312,12 @@ static Jim_Obj *JimStringTrimRight(Jim_Interp *interp, Jim_Obj *strObjPtr, Jim_O static Jim_Obj *Jim_FormatString_Inner(Jim_Interp *interp, Jim_Obj *fmtObjPtr, int objc, Jim_Obj *const *objv, char *sprintf_buf) { - const char *fmt, *_fmt; + const char *fmt; int fmtLen; Jim_Obj *resObjPtr; - _fmt = fmt = Jim_GetString(fmtObjPtr, &fmtLen); + fmt = Jim_GetString(fmtObjPtr, &fmtLen); resObjPtr = Jim_NewStringObj(interp, "", 0); while (fmtLen) { const char *p = fmt; @@ -2790,10 +2789,10 @@ typedef struct ScriptToken { * The precomputation of the command structure makes Jim_Eval() faster, * and simpler because there aren't dynamic lengths / allocations. * - * -- {expand} handling -- + * -- {expand}/{*} handling -- * * Expand is handled in a special way. When a command - * contains at least an argument with the {expand} prefix, + * contains at least an argument with the {expand} or {*} prefix, * the command structure presents a -1 before the integer * describing the number of arguments. This is used in order * to send the command exection to a different path in case @@ -3059,13 +3058,9 @@ int SetScriptFromAny(Jim_Interp *interp, struct Jim_Obj *objPtr) /* Compute the command structure array * (see the ScriptObj struct definition for more info) */ - start = 0; /* Current command start token index */ end = -1; /* Current command end token index */ while (1) { - int expand = 0; /* expand flag. set to 1 on {expand} form. */ - int interpolation = 0; /* set to 1 if there is at least one - argument of the command obtained via - interpolation of more tokens. */ + int expand = 0; /* expand flag. set to 1 on {expand} or {*} form. */ /* Search for the end of command, while * count the number of args. */ start = ++end; @@ -3086,7 +3081,6 @@ int SetScriptFromAny(Jim_Interp *interp, struct Jim_Obj *objPtr) args++; end++; } - interpolation = !((end-start+1) == args*2); /* Add the 'number of arguments' info into cmdstruct. * Negative value if there is list expansion involved. */ if (expand) @@ -3917,7 +3911,7 @@ void DupDictSubstInternalRep(Jim_Interp *interp, Jim_Obj *srcPtr, * the [dict]ionary contained in variable VARNAME. */ Jim_Obj *Jim_ExpandDictSugar(Jim_Interp *interp, Jim_Obj *objPtr) { - Jim_Obj *varObjPtr, *keyObjPtr, *dictObjPtr, *resObjPtr; + Jim_Obj *varObjPtr, *keyObjPtr, *dictObjPtr, *resObjPtr = NULL; Jim_Obj *substKeyObjPtr = NULL; if (objPtr->typePtr != &dictSubstObjType) { @@ -3937,12 +3931,10 @@ Jim_Obj *Jim_ExpandDictSugar(Jim_Interp *interp, Jim_Obj *objPtr) dictObjPtr = Jim_GetVariable(interp, objPtr->internalRep.dictSubstValue.varNameObjPtr, JIM_ERRMSG); if (!dictObjPtr) { - resObjPtr = NULL; goto err; } if (Jim_DictKey(interp, dictObjPtr, substKeyObjPtr, &resObjPtr, JIM_ERRMSG) != JIM_OK) { - resObjPtr = NULL; goto err; } err: @@ -4791,15 +4783,18 @@ void Jim_ReleaseSharedString(Jim_Interp *interp, const char *str) long refCount; Jim_HashEntry *he = Jim_FindHashEntry(&interp->sharedStrings, str); - if (he == NULL) + if (he == NULL) { Jim_Panic(interp,"Jim_ReleaseSharedString called with " "unknown shared string '%s'", str); - refCount = (long) he->val; - refCount--; - if (refCount == 0) { - Jim_DeleteHashEntry(&interp->sharedStrings, str); - } else { - he->val = (void*) refCount; + } + else { + refCount = (long) he->val; + refCount--; + if (refCount == 0) { + Jim_DeleteHashEntry(&interp->sharedStrings, str); + } else { + he->val = (void*) refCount; + } } } @@ -6018,7 +6013,6 @@ int Jim_DictPairs(Jim_Interp *interp, Jim_Obj *dictPtr, Jim_Obj ***objPtrPtr, in int Jim_DictKeysVector(Jim_Interp *interp, Jim_Obj *dictPtr, Jim_Obj *const *keyv, int keyc, Jim_Obj **objPtrPtr, int flags) { - Jim_Obj *objPtr; int i; if (keyc == 0) { @@ -6027,12 +6021,13 @@ int Jim_DictKeysVector(Jim_Interp *interp, Jim_Obj *dictPtr, } for (i = 0; i < keyc; i++) { + Jim_Obj *objPtr; if (Jim_DictKey(interp, dictPtr, keyv[i], &objPtr, flags) != JIM_OK) return JIM_ERR; dictPtr = objPtr; } - *objPtrPtr = objPtr; + *objPtrPtr = dictPtr; return JIM_OK; } @@ -6742,7 +6737,9 @@ static void ExprMakeLazy(Jim_Interp *interp, ExprByteCode *expr) if (op == NULL) { Jim_Panic(interp,"Default reached in ExprMakeLazy()"); } - arity += op->arity; + else { + arity += op->arity; + } break; } arity--; @@ -6896,7 +6893,7 @@ int SetExprFromAny(Jim_Interp *interp, struct Jim_Obj *objPtr) while (Jim_StackLen(&stack)) { char *opstr = Jim_StackPop(&stack); op = JimExprOperatorInfo(opstr); - if (op == NULL && !strcmp(opstr, "(")) { + if (op == NULL) { Jim_Free(opstr); Jim_SetResultString(interp, "Missing close parenthesis", -1); goto err; @@ -7573,8 +7570,7 @@ static int SetScanFmtFromAny(Jim_Interp *interp, Jim_Obj *objPtr) for (prev=0; prev < curr; ++prev) { if (fmtObj->descr[prev].pos == -1) continue; if (fmtObj->descr[prev].pos == descr->pos) { - fmtObj->error = "same \"%n$\" conversion specifier " - "used more than once"; + fmtObj->error = "variable is assigned by multiple \"%n$\" conversion specifiers"; return JIM_ERR; } } @@ -7642,7 +7638,7 @@ static int SetScanFmtFromAny(Jim_Interp *interp, Jim_Obj *objPtr) } done: if (fmtObj->convCount == 0) { - fmtObj->error = "no any conversion specifier given"; + fmtObj->error = "variable is not assigned by any conversion specifiers"; return JIM_ERR; } return JIM_OK; @@ -8263,7 +8259,6 @@ static int JimAddErrorToStack(Jim_Interp *interp, int retcode, const char *filen if (retcode == JIM_ERR_ADDSTACK) { /* Add the stack info for the current level */ JimAppendStackTrace(interp, Jim_GetString(interp->errorProc, NULL), filename, line); - retcode = JIM_ERR; } Jim_DecrRefCount(interp, interp->errorProc); @@ -8922,7 +8917,6 @@ int Jim_SubstObj(Jim_Interp *interp, Jim_Obj *substObjPtr, case JIM_TT_DICTSUGAR: objPtr = Jim_ExpandDictSugar(interp, token[i].objPtr); if (!objPtr) { - retcode = JIM_ERR; goto err; } break; @@ -10525,7 +10519,6 @@ static int Jim_UplevelCoreCommand(Jim_Interp *interp, int argc, return JIM_ERR; } if (argc < 2) { - argc++; argv--; Jim_WrongNumArgs(interp, 1, argv, "?level? command ?arg ...?"); @@ -11613,7 +11606,7 @@ static int Jim_ScanCoreCommand(Jim_Interp *interp, int argc, int outc, i, count = 0; if (argc < 3) { - Jim_WrongNumArgs(interp, 1, argv, "string formatString ?varName ...?"); + Jim_WrongNumArgs(interp, 1, argv, "string format ?varName varName ...?"); return JIM_ERR; } if (argv[2]->typePtr != &scanFmtStringObjType) -- cgit v1.1