mirror of
				https://github.com/subsurface/subsurface.git
				synced 2025-02-19 22:16:15 +00:00 
			
		
		
		
	The comment said "Clear everything but the first element" but actually the macro freed the whole list including the first element. For dive computers it was explicitly called on the second element. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
		
			
				
	
	
		
			29 lines
		
	
	
	
		
			983 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			29 lines
		
	
	
	
		
			983 B
		
	
	
	
		
			C
		
	
	
	
	
	
| // SPDX-License-Identifier: GPL-2.0
 | |
| #ifndef STRUCTURED_LIST_H
 | |
| #define STRUCTURED_LIST_H
 | |
| 
 | |
| /* Clear whole list; this works for taglist, picturelist and dive computers */
 | |
| #define STRUCTURED_LIST_FREE(_type, _start, _free) \
 | |
| 	{                                          \
 | |
| 		_type *_ptr = _start;              \
 | |
| 		while (_ptr) {                     \
 | |
| 			_type *_next = _ptr->next; \
 | |
| 			_free(_ptr);               \
 | |
| 			_ptr = _next;              \
 | |
| 		}                                  \
 | |
| 	}
 | |
| 
 | |
| #define STRUCTURED_LIST_COPY(_type, _first, _dest, _cpy) \
 | |
| 	{                                                \
 | |
| 		_type *_sptr = _first;                   \
 | |
| 		_type **_dptr = &_dest;                  \
 | |
| 		while (_sptr) {                          \
 | |
| 			*_dptr = malloc(sizeof(_type));  \
 | |
| 			_cpy(_sptr, *_dptr);             \
 | |
| 			_sptr = _sptr->next;             \
 | |
| 			_dptr = &(*_dptr)->next;         \
 | |
| 		}                                        \
 | |
| 		*_dptr = 0;                              \
 | |
| 	}
 | |
| 
 | |
| #endif
 |