@@ -382,7 +382,7 @@ typedef struct _webui_core_t {
382382 bool initialized ;
383383 char * executable_path ;
384384 void * ptr_list [WEBUI_MAX_IDS * 2 ];
385- size_t ptr_position ;
385+ size_t ptr_last_pos ;
386386 size_t ptr_size [WEBUI_MAX_IDS * 2 ];
387387 size_t current_browser ;
388388 _webui_window_t * wins [WEBUI_MAX_IDS ];
@@ -3690,8 +3690,7 @@ static bool _webui_ptr_exist(void * ptr) {
36903690 if (ptr == NULL )
36913691 return false;
36923692
3693- for (size_t i = 0 ; i < _webui .ptr_position ; i ++ ) {
3694-
3693+ for (size_t i = 0 ; i < _webui .ptr_last_pos ; i ++ ) {
36953694 if (_webui .ptr_list [i ] == ptr )
36963695 return true;
36973696 }
@@ -3708,19 +3707,29 @@ static void _webui_ptr_add(void * ptr, size_t size) {
37083707 if (ptr == NULL )
37093708 return ;
37103709
3711- // Search for first empty slot & add
3710+ // Search for first empty slot & save pointer
37123711 if (!_webui_ptr_exist (ptr )) {
3713- size_t i = 0 ;
3714- for (; i < _webui .ptr_position ; i ++ ) {
3712+ size_t i = 0 ;
3713+ for (; i < _webui .ptr_last_pos ; i ++ ) {
37153714 if (_webui .ptr_list [i ] == NULL ) {
3715+ // Pointer found
37163716 break ;
37173717 }
37183718 }
3719- _webui .ptr_list [_webui .ptr_position ] = ptr ;
3720- _webui .ptr_size [_webui .ptr_position ] = size ;
3721- _webui .ptr_position ++ ;
3722- if (_webui .ptr_position >= WEBUI_MAX_IDS )
3723- _webui .ptr_position = (WEBUI_MAX_IDS - 1 );
3719+ if (i == _webui .ptr_last_pos ) {
3720+ // Pointer not found
3721+ i = _webui .ptr_last_pos ++ ;
3722+ if (_webui .ptr_last_pos >= (WEBUI_MAX_IDS * 2 )) {
3723+ _webui .ptr_last_pos = ((WEBUI_MAX_IDS * 2 ) - 1 );
3724+ #ifdef WEBUI_LOG
3725+ printf ("[Core]\t\t_webui_ptr_add(0x%p) -> ERROR: Maximum pointer capacity reached.\n" ,
3726+ ptr );
3727+ #endif
3728+ }
3729+ }
3730+ // Add pointer
3731+ _webui .ptr_list [i ] = ptr ;
3732+ _webui .ptr_size [i ] = size ;
37243733 #ifdef WEBUI_LOG_VERBOSE
37253734 printf ("[Core]\t\t_webui_ptr_add(0x%p) -> Pointer #%zu saved (%zu + 1 bytes)\n" , ptr , i , size );
37263735 #endif
@@ -3739,10 +3748,11 @@ static void _webui_free_mem(void * ptr) {
37393748 _webui_mutex_lock (& _webui .mutex_mem );
37403749
37413750 // Search for pointer & free
3742- for (size_t i = 0 ; i < _webui .ptr_position ; i ++ ) {
3751+ for (size_t i = 0 ; i < _webui .ptr_last_pos ; i ++ ) {
37433752 if (_webui .ptr_list [i ] == ptr ) {
37443753 #ifdef WEBUI_LOG_VERBOSE
3745- printf ("[Core]\t\t_webui_free_mem(0x%p) -> Pointer #%zu freed (%zu + 1 bytes)\n" , ptr , i , _webui .ptr_size [i ]);
3754+ printf ("[Core]\t\t_webui_free_mem(0x%p) -> Pointer #%zu freed (%zu + 1 bytes)\n" ,
3755+ ptr , i , _webui .ptr_size [i ]);
37463756 #endif
37473757 free (ptr );
37483758 _webui .ptr_size [i ] = 0 ;
@@ -3751,9 +3761,9 @@ static void _webui_free_mem(void * ptr) {
37513761 }
37523762
37533763 // Search (backward) for first empty slot
3754- for (int i = _webui .ptr_position ; i >= 0 ;i -- ) {
3764+ for (int i = _webui .ptr_last_pos ; i >= 0 ;i -- ) {
37553765 if (_webui .ptr_list [i ] == NULL ) {
3756- _webui .ptr_position = i ;
3766+ _webui .ptr_last_pos = i ;
37573767 break ;
37583768 }
37593769 }
@@ -3777,14 +3787,16 @@ static void _webui_free_all_mem(void) {
37773787
37783788 // Free all pointers in the list
37793789 void * ptr = NULL ;
3780- for (size_t i = 0 ; i < _webui .ptr_position ; i ++ ) {
3790+ for (size_t i = 0 ; i < _webui .ptr_last_pos ; i ++ ) {
37813791 ptr = _webui .ptr_list [i ];
37823792 if (ptr != NULL ) {
37833793 #ifdef WEBUI_LOG
3784- printf ("[Core]\t\t_webui_free_all_mem() -> Free %zu bytes @ 0x%p\n" ,
3785- _webui .ptr_size [i ], ptr );
3794+ printf ("[Core]\t\t_webui_free_all_mem() -> Pointer # %zu freed (%zu + 1 bytes) 0x%p\n" ,
3795+ i , _webui .ptr_size [i ], ptr );
37863796 #endif
37873797 free (ptr );
3798+ _webui .ptr_size [i ] = 0 ;
3799+ _webui .ptr_list [i ] = NULL ;
37883800 }
37893801 }
37903802
0 commit comments