From 67965a98160853496dff0a8114e791fcea0f54f9 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Wed, 30 Apr 2003 12:05:37 +0000 Subject: [PATCH] (Fformat): Set abort_on_gc during first scan of format. Reinit FORMAT_START and END before second scan. --- src/editfns.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/editfns.c b/src/editfns.c index a08864f867..5bf7e5dff4 100644 --- a/src/editfns.c +++ b/src/editfns.c @@ -3255,8 +3255,12 @@ usage: (format STRING &rest OBJECTS) */) /* We may have to change "%S" to "%s". */ args[0] = Fcopy_sequence (args[0]); + /* GC should never happen here, so abort if it does. */ + abort_on_gc++; + /* If we start out planning a unibyte result, - and later find it has to be multibyte, we jump back to retry. */ + then discover it has to be multibyte, we jump back to retry. + That can only happen from the first large while loop below. */ retry: format = SDATA (args[0]); @@ -3456,6 +3460,8 @@ usage: (format STRING &rest OBJECTS) */) total += thissize + 4; } + abort_on_gc--; + /* Now we can no longer jump to retry. TOTAL and LONGEST_FORMAT are known for certain. */ @@ -3474,6 +3480,8 @@ usage: (format STRING &rest OBJECTS) */) /* Scan the format and store result in BUF. */ format = SDATA (args[0]); + format_start = format; + end = format + SBYTES (args[0]); maybe_combine_byte = 0; while (format != end) { -- 2.20.1