2 * \file rpmio/rpmmalloc.c
13 static rpmMemFailFunc failfunc = NULL;
14 static void *failfunc_data = NULL;
17 * Give memfail callback a chance to try to give us memory or perform
18 * it's own cleanup. If we dont get memory we die anyway as rpm doesn't
19 * check for NULL returns from allocations.
21 static void *vmefail(size_t size)
23 void *val = failfunc ? (*failfunc)(size, failfunc_data) : NULL;
25 fprintf(stderr, _("memory alloc (%u bytes) returned NULL.\n"),
32 rpmMemFailFunc rpmSetMemFail(rpmMemFailFunc func, void *data)
34 rpmMemFailFunc ofunc = failfunc;
40 void * rmalloc (size_t size)
43 if (size == 0) size++;
44 value = malloc (size);
46 value = vmefail(size);
50 void * rcalloc (size_t nmemb, size_t size)
53 if (size == 0) size++;
54 if (nmemb == 0) nmemb++;
55 value = calloc (nmemb, size);
57 value = vmefail(size);
61 void * rrealloc (void *ptr, size_t size)
64 if (size == 0) size++;
65 value = realloc (ptr, size);
67 value = vmefail(size);
71 char * rstrdup (const char *str)
73 size_t size = strlen(str) + 1;
74 char *newstr = (char *) malloc (size);
76 newstr = (char *) vmefail(size);
81 void * rfree (void *ptr)