1/* 2 * Various trivial helper wrappers around standard functions 3 */ 4#include "cache.h" 5 6/* 7 * There's no pack memory to release - but stay close to the Git 8 * version so wrap this away: 9 */ 10static inline void release_pack_memory(size_t size __used, int flag __used) 11{ 12} 13 14char *xstrdup(const char *str) 15{ 16 char *ret = strdup(str); 17 if (!ret) { 18 release_pack_memory(strlen(str) + 1, -1); 19 ret = strdup(str); 20 if (!ret) 21 die("Out of memory, strdup failed"); 22 } 23 return ret; 24} 25 26void *xrealloc(void *ptr, size_t size) 27{ 28 void *ret = realloc(ptr, size); 29 if (!ret && !size) 30 ret = realloc(ptr, 1); 31 if (!ret) { 32 release_pack_memory(size, -1); 33 ret = realloc(ptr, size); 34 if (!ret && !size) 35 ret = realloc(ptr, 1); 36 if (!ret) 37 die("Out of memory, realloc failed"); 38 } 39 return ret; 40} 41