33 */
44#include "cache.h"
55
6+ static void try_to_free_builtin (size_t size )
7+ {
8+ release_pack_memory (size , -1 );
9+ }
10+
11+ static void (* try_to_free_routine )(size_t size ) = try_to_free_builtin ;
12+
13+ void set_try_to_free_routine (void (* routine )(size_t ))
14+ {
15+ try_to_free_routine = (routine ) ? routine : try_to_free_builtin ;
16+ }
17+
618char * xstrdup (const char * str )
719{
820 char * ret = strdup (str );
921 if (!ret ) {
10- release_pack_memory (strlen (str ) + 1 , - 1 );
22+ try_to_free_routine (strlen (str ) + 1 );
1123 ret = strdup (str );
1224 if (!ret )
1325 die ("Out of memory, strdup failed" );
@@ -21,7 +33,7 @@ void *xmalloc(size_t size)
2133 if (!ret && !size )
2234 ret = malloc (1 );
2335 if (!ret ) {
24- release_pack_memory (size , -1 );
36+ try_to_free_routine (size );
2537 ret = malloc (size );
2638 if (!ret && !size )
2739 ret = malloc (1 );
@@ -67,7 +79,7 @@ void *xrealloc(void *ptr, size_t size)
6779 if (!ret && !size )
6880 ret = realloc (ptr , 1 );
6981 if (!ret ) {
70- release_pack_memory (size , -1 );
82+ try_to_free_routine (size );
7183 ret = realloc (ptr , size );
7284 if (!ret && !size )
7385 ret = realloc (ptr , 1 );
@@ -83,7 +95,7 @@ void *xcalloc(size_t nmemb, size_t size)
8395 if (!ret && (!nmemb || !size ))
8496 ret = calloc (1 , 1 );
8597 if (!ret ) {
86- release_pack_memory (nmemb * size , -1 );
98+ try_to_free_routine (nmemb * size );
8799 ret = calloc (nmemb , size );
88100 if (!ret && (!nmemb || !size ))
89101 ret = calloc (1 , 1 );
0 commit comments