/* String search routines for GNU Emacs.
- Copyright (C) 1985, 1986, 1987, 1992 Free Software Foundation, Inc.
+ Copyright (C) 1985, 1986, 1987, 1993 Free Software Foundation, Inc.
This file is part of GNU Emacs.
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
-#include "config.h"
+#include <config.h>
#include "lisp.h"
#include "syntax.h"
#include "buffer.h"
last_regexp = Qnil;
bufp->translate = translate;
BLOCK_INPUT;
- val = re_compile_pattern ((char *) XSTRING (pattern)->data,
- XSTRING (pattern)->size,
- bufp);
+ val = (CONST char *) re_compile_pattern ((char *) XSTRING (pattern)->data,
+ XSTRING (pattern)->size, bufp);
UNBLOCK_INPUT;
if (val)
{
s2 = 0;
}
- BLOCK_INPUT;
i = re_match_2 (&searchbuf, (char *) p1, s1, (char *) p2, s2,
point - BEGV, &search_regs,
ZV - BEGV);
- UNBLOCK_INPUT;
if (i == -2)
matcher_overflow ();
compile_pattern (regexp, &searchbuf, &search_regs,
!NILP (current_buffer->case_fold_search) ? DOWNCASE_TABLE : 0);
immediate_quit = 1;
- BLOCK_INPUT;
val = re_search (&searchbuf, (char *) XSTRING (string)->data,
XSTRING (string)->size, s, XSTRING (string)->size - s,
&search_regs);
- UNBLOCK_INPUT;
immediate_quit = 0;
last_thing_searched = Qt;
if (val == -2)
compile_pattern (regexp, &searchbuf, 0, 0);
immediate_quit = 1;
- BLOCK_INPUT;
val = re_search (&searchbuf, (char *) XSTRING (string)->data,
XSTRING (string)->size, 0, XSTRING (string)->size,
0);
- UNBLOCK_INPUT;
immediate_quit = 0;
return val;
}
int s1, s2;
/* Null string is found at starting position. */
- if (!len)
+ if (len == 0)
+ return pos;
+
+ /* Searching 0 times means don't move. */
+ if (n == 0)
return pos;
if (RE)
while (n < 0)
{
int val;
- BLOCK_INPUT;
val = re_search_2 (&searchbuf, (char *) p1, s1, (char *) p2, s2,
pos - BEGV, lim - pos, &search_regs,
/* Don't allow match past current point */
pos - BEGV);
- UNBLOCK_INPUT;
if (val == -2)
matcher_overflow ();
if (val >= 0)
while (n > 0)
{
int val;
- BLOCK_INPUT;
val = re_search_2 (&searchbuf, (char *) p1, s1, (char *) p2, s2,
pos - BEGV, lim - pos, &search_regs,
lim - BEGV);
- UNBLOCK_INPUT;
if (val == -2)
matcher_overflow ();
if (val >= 0)
while ((limit - pos) * direction >= 0)
pos += BM_tab[FETCH_CHAR(pos)];
/* now run the same tests to distinguish going off the */
- /* end, a match or a phoney match. */
+ /* end, a match or a phony match. */
if ((pos - limit) * direction <= len)
break; /* ran off the end */
/* Found what might be a match.