summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--linenoise/linenoise.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/linenoise/linenoise.c b/linenoise/linenoise.c
index 5af71ed0..44f88211 100644
--- a/linenoise/linenoise.c
+++ b/linenoise/linenoise.c
@@ -473,8 +473,14 @@ static int history_search(lino_t *l)
}
{
- int ni = next_hist_match(l, hpat, hp, &dp);
-
+ int ni, sp = hp;
+
+ do {
+ ni = next_hist_match(l, hpat, sp, &dp);
+ sp = ni - 1;
+ } while (ni >= 0 && hi < l->history_len &&
+ ni != hi &&
+ strcmp(l->history[hi], l->history[ni]) == 0);
if (ni < 0)
break;