Home | History | Annotate | Download | only in util
      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  */
     10 static inline void release_pack_memory(size_t size __used, int flag __used)
     11 {
     12 }
     13 
     14 char *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 
     26 void *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