diff options
author | Max Kellermann <max@duempel.org> | 2008-11-27 16:58:14 +0100 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2008-11-27 16:58:14 +0100 |
commit | f7d53b74a7743e120f9f1019c594cbd2de708caf (patch) | |
tree | 3d9e4bc520cd09d5a14a0196f0bea6370d003439 /src/list_window.c | |
parent | 00b15acd11ec809446e2b3962ff41dec1336cf08 (diff) | |
download | mpd-f7d53b74a7743e120f9f1019c594cbd2de708caf.tar.gz mpd-f7d53b74a7743e120f9f1019c594cbd2de708caf.tar.xz mpd-f7d53b74a7743e120f9f1019c594cbd2de708caf.zip |
list_window: fixed endless loop in non-wrapped search
When the cursor was at the end of a list and the user pressed 'n',
ncmpc would hang in an endless loop forever. The same bug was fixed
in the backwards search.
Diffstat (limited to 'src/list_window.c')
-rw-r--r-- | src/list_window.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/src/list_window.c b/src/list_window.c index 9f34f539f..46858ee2b 100644 --- a/src/list_window.c +++ b/src/list_window.c @@ -221,7 +221,7 @@ list_window_find(struct list_window *lw, unsigned i = lw->selected + 1; const char *label; - while (wrap || i == lw->selected + 1) { + do { while ((label = callback(i,&h,callback_data))) { if (str && label && strcasestr(label, str)) { lw->selected = i; @@ -237,7 +237,7 @@ list_window_find(struct list_window *lw, i=0; /* first item */ screen_bell(); } - } + } while (wrap); return 1; } @@ -257,7 +257,7 @@ list_window_rfind(struct list_window *lw, if (rows == 0) return 1; - while (wrap || i == (int)lw->selected - 1) { + do { while (i >= 0 && (label = callback(i,&h,callback_data))) { if( str && label && strcasestr(label, str) ) { lw->selected = i; @@ -271,7 +271,8 @@ list_window_rfind(struct list_window *lw, i = rows - 1; /* last item */ screen_bell(); } - } + } while (wrap); + return 1; } |