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