From d9fc99160ddc77d61f45423bd05d44735ef912f5 Mon Sep 17 00:00:00 2001 From: pdmef Date: Sat, 14 May 2005 12:19:50 +0000 Subject: [PATCH] Rocco Rutte: fix infinite loop for buffy cycling (patch by Lars Ellenberg) git-svn-id: svn://svn.berlios.de/mutt-ng/trunk@290 e385b8ad-14ed-0310-8656-cc95a2468c6d --- buffy.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/buffy.c b/buffy.c index 9824b6b..7290fa6 100644 --- a/buffy.c +++ b/buffy.c @@ -570,7 +570,7 @@ int buffy_notify (void) */ void buffy_next (char *s, size_t slen) { - int i = 0, c = 0; + int i = 0, c = 0, l = 0; if (list_empty(Incoming)) return; @@ -581,14 +581,19 @@ void buffy_next (char *s, size_t slen) return; } - i = buffy_lookup (s); - c = i == Incoming->length-1 ? 0 : i+1; - while (((BUFFY*) Incoming->data[c])->new <= 0) { - c = (c+1) % Incoming->length; - if (c == i) - break; /* tried all once */ + /* + * If buffy_lookup returns the index, + * or -1 if not found (-1..Incoming->length-1); + * plus one --> (0..Incoming->length). + * Modulo mapps it into the correct range. + */ + i = 1 + buffy_lookup (s); + for (l=0; l < Incoming->length; l++) { + c = (l+i) % Incoming->length; + if (((BUFFY*) Incoming->data[c])->new > 0) + break; } - if (c == i) { + if (l >= Incoming->length) { *s = '\0'; /* something went wrong since we're here when buffy_check * reported new mail */ -- 2.20.1