(svn r84) Improved news system code a little to avoid potential memory leaks
This commit is contained in:
		
							
								
								
									
										30
									
								
								news_gui.c
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								news_gui.c
									
									
									
									
									
								
							@@ -62,7 +62,7 @@ GetNewsStringCallbackProc * const _get_news_string_callback[] = {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void InitNewsItemStructs()
 | 
					void InitNewsItemStructs()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	memset(_news_items, 0, sizeof(_news_items));
 | 
						memset(_news_items, 0, sizeof(NewsItem)*MAX_NEWS);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void DrawNewsBorder(Window *w)
 | 
					void DrawNewsBorder(Window *w)
 | 
				
			||||||
@@ -176,15 +176,13 @@ static void NewsWindowProc(Window *w, WindowEvent *e)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// returns the correct index in the array
 | 
					// returns the correct index in the array
 | 
				
			||||||
// (to deal with overflows)
 | 
					// (to deal with overflows)
 | 
				
			||||||
byte getIndex(byte i)
 | 
					byte increaseIndex(byte i)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if(i==255) {
 | 
						if(i==255)
 | 
				
			||||||
		if(_oldest_news <= _latest_news)
 | 
							return 0;
 | 
				
			||||||
			return _latest_news;
 | 
						i++;
 | 
				
			||||||
		else
 | 
						if(i >= MAX_NEWS)
 | 
				
			||||||
			return MAX_NEWS;
 | 
							i = i % MAX_NEWS;
 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if(i >= MAX_NEWS) i %= MAX_NEWS;
 | 
					 | 
				
			||||||
	return i;
 | 
						return i;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -201,11 +199,11 @@ void AddNewsItem(StringID string, uint32 flags, uint data_a, uint data_b)
 | 
				
			|||||||
	if(_total_news < MAX_NEWS) _total_news++;
 | 
						if(_total_news < MAX_NEWS) _total_news++;
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// make sure our pointer isn't overflowing
 | 
						// make sure our pointer isn't overflowing
 | 
				
			||||||
	_latest_news = getIndex(++_latest_news);
 | 
						_latest_news = increaseIndex(_latest_news);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// overwrite oldest news entry
 | 
						// overwrite oldest news entry
 | 
				
			||||||
	if( _oldest_news == _latest_news && _news_items[_oldest_news].string_id != 0)
 | 
						if( _oldest_news == _latest_news && _news_items[_oldest_news].string_id != 0)
 | 
				
			||||||
		_oldest_news = getIndex(++_oldest_news); // but make sure we're not overflowing here
 | 
							_oldest_news = increaseIndex(_oldest_news); // but make sure we're not overflowing here
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// add news to _latest_news
 | 
						// add news to _latest_news
 | 
				
			||||||
	ni = &_news_items[_latest_news];
 | 
						ni = &_news_items[_latest_news];
 | 
				
			||||||
@@ -365,7 +363,7 @@ static void MoveToNexItem()
 | 
				
			|||||||
	{
 | 
						{
 | 
				
			||||||
		NewsItem *ni;
 | 
							NewsItem *ni;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		_current_news = getIndex(++_current_news);
 | 
							_current_news = increaseIndex(_current_news);
 | 
				
			||||||
		ni = &_news_items[_current_news];
 | 
							ni = &_news_items[_current_news];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// check the date, don't show too old items
 | 
							// check the date, don't show too old items
 | 
				
			||||||
@@ -413,8 +411,14 @@ void ShowLastNewsMessage()
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	if(_forced_news==255)
 | 
						if(_forced_news==255)
 | 
				
			||||||
		ShowNewsMessage(_current_news);
 | 
							ShowNewsMessage(_current_news);
 | 
				
			||||||
 | 
						else if(_forced_news!=0)
 | 
				
			||||||
 | 
							ShowNewsMessage(_forced_news-1);
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
 | 
							if(_total_news != MAX_NEWS) 
 | 
				
			||||||
 | 
								ShowNewsMessage(_latest_news);
 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
		ShowNewsMessage( getIndex(_forced_news-1) );
 | 
								ShowNewsMessage(MAX_NEWS-1);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user