[prev in list] [next in list] [prev in thread] [next in thread]
List: busybox
Subject: [PATCH] vi: backward search repair for ENABLE_FEATURE_VI_REGEX_SEARCH
From: Andrey Dobrovolsky <andrey.dobrovolsky.odessa () gmail ! com>
Date: 2021-02-17 23:27:19
Message-ID: CAN5FJ7eA1ZRSPwXtQGDfWEBFYUDtD5=8c=mL_MB=mA9zVNhLtg () mail ! gmail ! com
[Download RAW message or body]
In order to perform backward search using re_search(), starting offset
must be set
to the end of the area searched, while "range" parameter is negative.
The returned value of re_search() is an offset of the pattern start
inside the area
searched, so char_search() can return area start adress plus offset,
in case re_search()
returned positive offset, meaning succeful search.
---
editors/vi.c | 8 ++------
1 file changed, 2 insertions(+), 6 deletions(-)
diff --git a/editors/vi.c b/editors/vi.c
index 458ca62..5bfb69d 100644
--- a/editors/vi.c
+++ b/editors/vi.c
@@ -2189,15 +2189,11 @@ static char *char_search(char *p, const char
*pat, int dir_and_range)
// re_search() >= 0: index of found pattern
// struct pattern char int int int struct reg
// re_search(*pattern_buffer, *string, size, start, range, *regs)
- i = re_search(&preg, q, size, /*start:*/ 0, range, /*struct
re_registers*:*/ NULL);
+ i = re_search(&preg, q, size, (range < 0) ? size : 0 , range,
/*struct re_registers*:*/ NULL);
regfree(&preg);
if (i < 0)
return NULL;
- if (dir_and_range > 0) // FORWARD?
- p = p + i;
- else
- p = p - i;
- return p;
+ return (q + i) ;
}
# else
# if ENABLE_FEATURE_VI_SETOPTS
--
2.9.2
_______________________________________________
busybox mailing list
busybox@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic