aboutsummaryrefslogtreecommitdiff
path: root/jim-format.c
diff options
context:
space:
mode:
authorSteve Bennett <steveb@workware.net.au>2010-11-05 13:38:55 +1000
committerSteve Bennett <steveb@workware.net.au>2010-11-17 07:57:39 +1000
commitb3e2277915dab92e040975b23fe2c80eee11c69b (patch)
tree136798c3154301c474bf2f3594e235ad9c4bc211 /jim-format.c
parent8703da4f1ab22762b824ecd0822cbddc9b340770 (diff)
downloadjimtcl-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.c15
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;