From 55d1ff8e1bf3e60f9925b446f4b2d55e8d9c5b6d Mon Sep 17 00:00:00 2001 From: oharboe Date: Sun, 16 Aug 2009 11:31:42 +0000 Subject: 2009-08-16 Steve Bennett * jim.c: Make [format %c 0] work (embedded nulls) --- jim.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'jim.c') diff --git a/jim.c b/jim.c index 06db29f..4708054 100644 --- a/jim.c +++ b/jim.c @@ -2261,6 +2261,7 @@ static Jim_Obj *Jim_FormatString_Inner(Jim_Interp *interp, Jim_Obj *fmtObjPtr, int inprec; int haveprec; int accum; + int buflen = 0; while (*fmt != '%' && fmtLen) { fmt++; fmtLen--; @@ -2437,7 +2438,7 @@ static Jim_Obj *Jim_FormatString_Inner(Jim_Interp *interp, Jim_Obj *fmtObjPtr, *cp++ = 's'; *cp = 0; /* BUG: we do not handled embeded NULLs */ - snprintf( sprintf_buf, JIM_MAX_FMT, fmt_str, Jim_GetString( objv[0], NULL )); + buflen = snprintf( sprintf_buf, JIM_MAX_FMT, fmt_str, Jim_GetString( objv[0], NULL )); break; case 'c': *cp++ = 'c'; @@ -2447,7 +2448,7 @@ static Jim_Obj *Jim_FormatString_Inner(Jim_Interp *interp, Jim_Obj *fmtObjPtr, return NULL; } c = (char) wideValue; - snprintf( sprintf_buf, JIM_MAX_FMT, fmt_str, c ); + buflen = snprintf( sprintf_buf, JIM_MAX_FMT, fmt_str, c ); break; case 'f': case 'F': @@ -2461,7 +2462,7 @@ static Jim_Obj *Jim_FormatString_Inner(Jim_Interp *interp, Jim_Obj *fmtObjPtr, Jim_FreeNewObj( interp, resObjPtr ); return NULL; } - snprintf( sprintf_buf, JIM_MAX_FMT, fmt_str, doubleValue ); + buflen = snprintf( sprintf_buf, JIM_MAX_FMT, fmt_str, doubleValue ); break; case 'b': case 'd': @@ -2483,7 +2484,7 @@ static Jim_Obj *Jim_FormatString_Inner(Jim_Interp *interp, Jim_Obj *fmtObjPtr, Jim_FreeNewObj(interp, resObjPtr); return NULL; } - snprintf(sprintf_buf, JIM_MAX_FMT, fmt_str, wideValue ); + buflen = snprintf(sprintf_buf, JIM_MAX_FMT, fmt_str, wideValue ); break; case '%': sprintf_buf[0] = '%'; @@ -2504,8 +2505,7 @@ static Jim_Obj *Jim_FormatString_Inner(Jim_Interp *interp, Jim_Obj *fmtObjPtr, printf("RES was: |%s|\n", sprintf_buf ); #endif - sprintf_buf[ JIM_MAX_FMT - 1] = 0; - Jim_AppendString( interp, resObjPtr, sprintf_buf, strlen(sprintf_buf) ); + Jim_AppendString( interp, resObjPtr, sprintf_buf, buflen <= JIM_MAX_FMT ? buflen : JIM_MAX_FMT); /* next obj */ objv++; fmt++; -- cgit v1.1