summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorfvogel <fvogelnew1@free.fr>2018-10-16 21:16:47 (GMT)
committerfvogel <fvogelnew1@free.fr>2018-10-16 21:16:47 (GMT)
commit3da23be2cedeef3e4349ee110f183ed9dca40486 (patch)
treeb4efe2e31f9b3fc58d27102a28cee10f0ac5a0de
parent2eb57cb5163bee4eeb2eaf045701d75d740523c7 (diff)
downloadtk-3da23be2cedeef3e4349ee110f183ed9dca40486.zip
tk-3da23be2cedeef3e4349ee110f183ed9dca40486.tar.gz
tk-3da23be2cedeef3e4349ee110f183ed9dca40486.tar.bz2
Fix backwards search, thanks to Koen Danckaert
-rw-r--r--generic/tkText.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/generic/tkText.c b/generic/tkText.c
index 6e09ce6..4c536a2 100644
--- a/generic/tkText.c
+++ b/generic/tkText.c
@@ -5823,7 +5823,7 @@ SearchCore(
firstOffset = 0;
}
- if (alreadySearchOffset != -1) {
+ if (alreadySearchOffset >= 0) {
if (searchSpecPtr->backwards) {
if (alreadySearchOffset < lastOffset) {
lastOffset = alreadySearchOffset;
@@ -5912,17 +5912,17 @@ SearchCore(
* match.
*/
- const char c = pattern[0];
+ const char c = matchLength ? pattern[0] : '\0';
- if (alreadySearchOffset != -1) {
+ if (alreadySearchOffset >= 0) {
p = startOfLine + alreadySearchOffset;
alreadySearchOffset = -1;
} else {
p = startOfLine + lastOffset -1;
}
while (p >= startOfLine + firstOffset) {
- if (p[0] == c && !strncmp(p, pattern,
- (size_t) matchLength)) {
+ if (matchLength == 0 || (p[0] == c && !strncmp(
+ p, pattern, (size_t) matchLength))) {
goto backwardsMatch;
}
p--;
@@ -6085,7 +6085,10 @@ SearchCore(
if (firstNewLine != -1) {
break;
} else {
- alreadySearchOffset -= matchLength;
+ alreadySearchOffset -= (matchLength ? matchLength : 1);
+ if (alreadySearchOffset < 0) {
+ break;
+ }
}
} else {
firstOffset = matchLength ? p - startOfLine + matchLength