diff options
author | Steve Bennett <steveb@workware.net.au> | 2010-11-05 13:38:55 +1000 |
---|---|---|
committer | Steve Bennett <steveb@workware.net.au> | 2010-11-17 07:57:39 +1000 |
commit | b3e2277915dab92e040975b23fe2c80eee11c69b (patch) | |
tree | 136798c3154301c474bf2f3594e235ad9c4bc211 /jim-format.c | |
parent | 8703da4f1ab22762b824ecd0822cbddc9b340770 (diff) | |
download | jimtcl-b3e2277915dab92e040975b23fe2c80eee11c69b.zip jimtcl-b3e2277915dab92e040975b23fe2c80eee11c69b.tar.gz jimtcl-b3e2277915dab92e040975b23fe2c80eee11c69b.tar.bz2 |
Fix a bug in [format]
The buffer length could be wrong when printing numeric values
Signed-off-by: Steve Bennett <steveb@workware.net.au>
Diffstat (limited to 'jim-format.c')
-rw-r--r-- | jim-format.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/jim-format.c b/jim-format.c index 72206d8..775b8f4 100644 --- a/jim-format.c +++ b/jim-format.c @@ -327,14 +327,9 @@ Jim_Obj *Jim_FormatString(Jim_Interp *interp, Jim_Obj *fmtObjPtr, int objc, Jim_ /* Fill in the width and precision */ if (width) { p += sprintf(p, "%ld", width); - if (width > length) { - length = width; - } } if (gotPrecision) { - *p++ = '.'; - p += sprintf(p, "%ld", precision); - length += precision; + p += sprintf(p, ".%ld", precision); } /* Now the modifier, and get the actual value here */ @@ -371,6 +366,14 @@ Jim_Obj *Jim_FormatString(Jim_Interp *interp, Jim_Obj *fmtObjPtr, int objc, Jim_ *p++ = (char) ch; *p = '\0'; + /* Adjust length for width and precision */ + if (width > length) { + length = width; + } + if (gotPrecision) { + length += precision; + } + /* Increase the size of the buffer if needed */ if (num_buffer_size < length + 1) { num_buffer_size = length + 1; |