@@ -1446,29 +1446,38 @@ pizza_sys_memory_t pizza_sys_memory_move(pizza_sys_memory_t dest, const pizza_sy
14461446}
14471447
14481448pizza_sys_memory_t pizza_sys_memory_resize (pizza_sys_memory_t ptr , size_t old_size , size_t new_size ) {
1449- if (ptr == null ) {
1449+ if (! ptr ) {
14501450 fprintf (stderr , "Error: pizza_sys_memory_resize() - Pointer is null.\n" );
1451- return null ;
1451+ return NULL ;
14521452 }
14531453
14541454 if (new_size == 0 ) {
14551455 pizza_sys_memory_free (ptr );
1456- return null ;
1456+ return NULL ;
1457+ }
1458+
1459+ if (new_size <= old_size ) {
1460+ // Shrinking, just realloc (no data copy needed)
1461+ pizza_sys_memory_t new_ptr = pizza_sys_memory_realloc (ptr , new_size );
1462+ if (!new_ptr ) {
1463+ fprintf (stderr , "Error: pizza_sys_memory_resize() - Memory shrink failed, original preserved.\n" );
1464+ return ptr ;
1465+ }
1466+ return new_ptr ;
14571467 }
14581468
1459- // Allocate new memory
1460- pizza_sys_memory_t new_ptr = pizza_sys_memory_realloc ( ptr , new_size );
1469+ // Allocate new memory manually to preserve old data
1470+ pizza_sys_memory_t new_ptr = pizza_sys_memory_alloc ( new_size );
14611471 if (!new_ptr ) {
1462- // Allocation failed; return the original memory block
1463- fprintf (stderr , "Error: pizza_sys_memory_resize() - Memory resize failed, original memory preserved.\n" );
1472+ fprintf (stderr , "Error: pizza_sys_memory_resize() - Allocation failed.\n" );
14641473 return ptr ;
14651474 }
14661475
1467- // Check if new size is larger, and if so, preserve the old data
1468- if ( new_size > old_size && ptr ) {
1469- // Initialize new memory with old data (if necessary)
1470- memcpy ( new_ptr , ptr , old_size );
1471- }
1476+ // Copy old data
1477+ memcpy ( new_ptr , ptr , old_size );
1478+
1479+ // Free old memory
1480+ pizza_sys_memory_free ( ptr );
14721481
14731482 return new_ptr ;
14741483}
0 commit comments