From 6ac258d381b5300e3ec935404a111e8dff4617d4 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Wed, 12 May 1993 08:24:20 +0000 Subject: * pythonrun.c: Print exception type+arg *after* stack trace instead of before it. * ceval.c, object.c: moved testbool() to object.c (now extern visible) * stringobject.c: fix bugs in and rationalize string resize in formatstring() * tokenizer.[ch]: fix non-working code for lines longer than BUFSIZ --- Objects/stringobject.c | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) (limited to 'Objects/stringobject.c') diff --git a/Objects/stringobject.c b/Objects/stringobject.c index 5c7345d40f..33fe48502f 100644 --- a/Objects/stringobject.c +++ b/Objects/stringobject.c @@ -491,13 +491,13 @@ formatstring(format, args) err_badcall(); return NULL; } - reslen = rescnt = 100; + fmt = getstringvalue(format); + fmtcnt = getstringsize(format); + reslen = rescnt = fmtcnt + 100; result = newsizedstringobject((char *)NULL, reslen); if (result == NULL) return NULL; res = getstringvalue(result); - fmt = getstringvalue(format); - fmtcnt = getstringsize(format); if (is_tupleobject(args)) { arglen = gettuplesize(args); argidx = 0; @@ -509,12 +509,11 @@ formatstring(format, args) while (--fmtcnt >= 0) { if (*fmt != '%') { if (--rescnt < 0) { - rescnt = reslen; - reslen = reslen * 2; /* Maybe less when big? */ + rescnt = fmtcnt + 100; + reslen += rescnt; if (resizestring(&result, reslen) < 0) return NULL; - res = getstringvalue(result) + rescnt; - rescnt = reslen - rescnt; + res = getstringvalue(result) + reslen - rescnt; } *res++ = *fmt++; } @@ -692,12 +691,12 @@ formatstring(format, args) if (width < len) width = len; if (rescnt < width + (sign != '\0')) { - rescnt = reslen; - reslen = reslen + width + 100; + reslen -= rescnt; + rescnt = width + fmtcnt + 100; + reslen += rescnt; if (resizestring(&result, reslen) < 0) return NULL; - res = getstringvalue(result) + rescnt; - rescnt = reslen - rescnt; + res = getstringvalue(result) + reslen - rescnt; } if (sign) { *res++ = sign; -- cgit v1.2.1