rpm  4.5
rpmmalloc.c
Go to the documentation of this file.
1 
5 #include "system.h"
6 #include "debug.h"
7 
8 #if !defined(EXIT_FAILURE)
9 #define EXIT_FAILURE 1
10 #endif
11 
12 /*@-modfilesys@*/
13 /*@only@*/ void *vmefail(size_t size)
14 {
15  fprintf(stderr, _("memory alloc (%u bytes) returned NULL.\n"), (unsigned)size);
16  exit(EXIT_FAILURE);
17  /*@notreached@*/
18  return NULL;
19 }
20 /*@=modfilesys@*/
21 
22 #if !(HAVE_MCHECK_H && defined(__GNUC__)) && !defined(__LCLINT__)
23 
24 /*@out@*/ /*@only@*/ void * xmalloc (size_t size)
25 {
26  register void *value;
27  if (size == 0) size++;
28  value = malloc (size);
29  if (value == 0)
30  value = vmefail(size);
31  return value;
32 }
33 
34 /*@only@*/ void * xcalloc (size_t nmemb, size_t size)
35 {
36  register void *value;
37  if (size == 0) size++;
38  if (nmemb == 0) nmemb++;
39  value = calloc (nmemb, size);
40  if (value == 0)
41  value = vmefail(size);
42  return value;
43 }
44 
45 /*@only@*/ void * xrealloc (/*@only@*/ void *ptr, size_t size)
46 {
47  register void *value;
48  if (size == 0) size++;
49  value = realloc (ptr, size);
50  if (value == 0)
51  value = vmefail(size);
52  return value;
53 }
54 
55 /*@only@*/ char * xstrdup (const char *str)
56 {
57  size_t size = strlen(str) + 1;
58  char *newstr = (char *) malloc (size);
59  if (newstr == 0)
60  newstr = (char *) vmefail(size);
61  strcpy (newstr, str);
62  return newstr;
63 }
64 
65 #endif /* !(HAVE_MCHECK_H && defined(__GNUC__)) */