summaryrefslogtreecommitdiff
path: root/src/search.c
diff options
context:
space:
mode:
authorRichard M. Stallman <rms@gnu.org>1998-01-01 06:35:47 +0000
committerRichard M. Stallman <rms@gnu.org>1998-01-01 06:35:47 +0000
commitd5d57b92e26ba3d1e188e0692ad6710af067e04e (patch)
tree22181a16016c34501ae605090673d50b258fa7b8 /src/search.c
parent6a140a74abd15b8f4a78bdc10e4095b6a41b91b1 (diff)
downloademacs-d5d57b92e26ba3d1e188e0692ad6710af067e04e.tar.gz
(scan_newline): Always restore prev value of immediate_quit.
Diffstat (limited to 'src/search.c')
-rw-r--r--src/search.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/search.c b/src/search.c
index 82a64e900a9..1b045f80841 100644
--- a/src/search.c
+++ b/src/search.c
@@ -670,7 +670,7 @@ scan_buffer (target, start, end, count, shortage, allow_quit)
the limit we bumped up against.
If ALLOW_QUIT is non-zero, set immediate_quit. That's good to do
- except when inside redisplay. */
+ except in special cases. */
int
scan_newline (start, start_byte, limit, limit_byte, count, allow_quit)
@@ -687,6 +687,8 @@ scan_newline (start, start_byte, limit, limit_byte, count, allow_quit)
register int ceiling;
register unsigned char *ceiling_addr;
+ int old_immediate_quit = immediate_quit;
+
/* If we are not in selective display mode,
check only for newlines. */
int selective_display = (!NILP (current_buffer->selective_display)
@@ -695,7 +697,8 @@ scan_newline (start, start_byte, limit, limit_byte, count, allow_quit)
/* The code that follows is like scan_buffer
but checks for either newline or carriage return. */
- immediate_quit = allow_quit;
+ if (allow_quit)
+ immediate_quit++;
start_byte = CHAR_TO_BYTE (start);
@@ -716,7 +719,7 @@ scan_newline (start, start_byte, limit, limit_byte, count, allow_quit)
{
if (--count == 0)
{
- immediate_quit = 0;
+ immediate_quit = old_immediate_quit;
start_byte = start_byte + cursor - base + 1;
start = BYTE_TO_CHAR (start_byte);
TEMP_SET_PT_BOTH (start, start_byte);
@@ -750,7 +753,7 @@ scan_newline (start, start_byte, limit, limit_byte, count, allow_quit)
{
if (++count == 0)
{
- immediate_quit = 0;
+ immediate_quit = old_immediate_quit;
/* Return the position AFTER the match we found. */
start_byte = start_byte + cursor - base + 1;
start = BYTE_TO_CHAR (start_byte);
@@ -768,6 +771,7 @@ scan_newline (start, start_byte, limit, limit_byte, count, allow_quit)
}
TEMP_SET_PT_BOTH (limit, limit_byte);
+ immediate_quit = old_immediate_quit;
return count * direction;
}