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