(svn r7388) -Fix (r7384 / r7368 / r3757): When adding a new news item for the first time (_latest_news
authorDarkvater
Tue, 05 Dec 2006 23:37:04 +0000
changeset 5258 eae66ac02803
parent 5257 677d0c3322c1
child 5259 08336337aae0
(svn r7388) -Fix (r7384 / r7368 / r3757): When adding a new news item for the first time (_latest_news
is INVALID_NEWS), make it the value of _oldest_news, not zero as DeleteVehicleNews can
change _oldest_news. Also remove the (i == INVALID_NEWS) return 0; guard from increaseIndex
as it's only used in 2 places, nowhere else.
news_gui.c
--- a/news_gui.c	Tue Dec 05 23:32:15 2006 +0000
+++ b/news_gui.c	Tue Dec 05 23:37:04 2006 +0000
@@ -230,7 +230,7 @@
  * queue and deals with overflows when increasing the index */
 static inline NewsID increaseIndex(NewsID i)
 {
-	if (i == INVALID_NEWS) return 0;
+	assert(i != INVALID_NEWS);
 	return (i + 1) % MAX_NEWS;
 }
 
@@ -275,9 +275,11 @@
 	_forced_news = INVALID_NEWS;
 	if (_total_news < MAX_NEWS) _total_news++;
 
-	// make sure our pointer isn't overflowing
+	/* Increase _latest_news. If we have no news yet, use _oldest news as an
+	 * index. We cannot use 0 as _oldest_news can jump around due to
+	 * DeleteVehicleNews */
 	l_news = _latest_news;
-	_latest_news = increaseIndex(_latest_news);
+	_latest_news = (_latest_news == INVALID_NEWS) ? _oldest_news : increaseIndex(_latest_news);
 
 	/* If the fifo-buffer is full, overwrite the oldest entry */
 	if (l_news != INVALID_NEWS && _latest_news == _oldest_news) {
@@ -489,7 +491,7 @@
 	if (_current_news != _latest_news) {
 		NewsItem *ni;
 
-		_current_news = increaseIndex(_current_news);
+		_current_news = (_current_news == INVALID_NEWS) ? _oldest_news : increaseIndex(_current_news);
 		ni = &_news_items[_current_news];
 
 		// check the date, don't show too old items