aboutsummaryrefslogtreecommitdiffstats
path: root/src/search.c
diff options
context:
space:
mode:
authorKenichi Handa <[email protected]>1998-01-28 12:37:25 +0000
committerKenichi Handa <[email protected]>1998-01-28 12:37:25 +0000
commit4996330bfb44680cb2b10c42b6d81387fb65c993 (patch)
tree15b84019984d209e34578f4841beede097acfb15 /src/search.c
parent024bda024c737b337ed924db6d1bb6c7af7a4217 (diff)
(fast_string_match): Give re_search byte size of
STRING. (trivial_regexp_p): Initialize LEN to byte size of REGEXP. (search_buffer): Give re_search_2 STARTPOS, RANGE and STOP by counting them by bytes.
Diffstat (limited to 'src/search.c')
-rw-r--r--src/search.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/src/search.c b/src/search.c
index 42cfa9350f..5f5a3e6050 100644
--- a/src/search.c
+++ b/src/search.c
@@ -429,7 +429,7 @@ fast_string_match (regexp, string)
re_match_object = string;
val = re_search (bufp, (char *) XSTRING (string)->data,
- XSTRING (string)->size, 0, XSTRING (string)->size,
+ XSTRING (string)->size_byte, 0, XSTRING (string)->size_byte,
0);
immediate_quit = 0;
return val;
@@ -922,7 +922,7 @@ static int
trivial_regexp_p (regexp)
Lisp_Object regexp;
{
- int len = XSTRING (regexp)->size;
+ int len = XSTRING (regexp)->size_byte;
unsigned char *s = XSTRING (regexp)->data;
unsigned char c;
while (--len >= 0)
@@ -1005,6 +1005,8 @@ search_buffer (string, pos, lim, n, RE, trt, inverse_trt, posix)
if (RE && !trivial_regexp_p (string))
{
struct re_pattern_buffer *bufp;
+ int pos_byte = CHAR_TO_BYTE (pos);
+ int lim_byte = CHAR_TO_BYTE (lim);
bufp = compile_pattern (string, &search_regs, trt, posix,
!NILP (current_buffer->enable_multibyte_characters));
@@ -1038,9 +1040,10 @@ search_buffer (string, pos, lim, n, RE, trt, inverse_trt, posix)
{
int val;
val = re_search_2 (bufp, (char *) p1, s1, (char *) p2, s2,
- pos - BEGV, lim - pos, &search_regs,
+ pos_byte - BEGV_BYTE, lim_byte - pos_byte,
+ &search_regs,
/* Don't allow match past current point */
- pos - BEGV);
+ pos_byte - BEGV_BYTE);
if (val == -2)
{
matcher_overflow ();
@@ -1070,8 +1073,9 @@ search_buffer (string, pos, lim, n, RE, trt, inverse_trt, posix)
{
int val;
val = re_search_2 (bufp, (char *) p1, s1, (char *) p2, s2,
- pos - BEGV, lim - pos, &search_regs,
- lim - BEGV);
+ pos_byte - BEGV_BYTE, lim_byte - pos_byte,
+ &search_regs,
+ lim_byte - BEGV_BYTE);
if (val == -2)
{
matcher_overflow ();