http: Print human readable GNUTLS status.
[gnupg.git] / common / xmalloc.c
1 /* xmalloc.c -  standard malloc wrappers
2  *      Copyright (C) 1999, 2000, 2001, 2006 Free Software Foundation, Inc.
3  *
4  * This file is part of JNLIB, which is a subsystem of GnuPG.
5  *
6  * JNLIB is free software; you can redistribute it and/or modify it
7  * under the terms of either
8  *
9  *   - the GNU Lesser General Public License as published by the Free
10  *     Software Foundation; either version 3 of the License, or (at
11  *     your option) any later version.
12  *
13  * or
14  *
15  *   - the GNU General Public License as published by the Free
16  *     Software Foundation; either version 2 of the License, or (at
17  *     your option) any later version.
18  *
19  * or both in parallel, as here.
20  *
21  * JNLIB is distributed in the hope that it will be useful, but
22  * WITHOUT ANY WARRANTY; without even the implied warranty of
23  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
24  * General Public License for more details.
25  *
26  * You should have received a copies of the GNU General Public License
27  * and the GNU Lesser General Public License along with this program;
28  * if not, see <http://www.gnu.org/licenses/>.
29  */
30
31 #include <config.h>
32 #include <stdlib.h>
33 #include <string.h>
34 #include <stdio.h>
35
36 #include "libjnlib-config.h"
37 #include "xmalloc.h"
38
39 static void
40 out_of_core(void)
41 {
42     fputs("\nfatal: out of memory\n", stderr );
43     exit(2);
44 }
45
46
47 void *
48 xmalloc( size_t n )
49 {
50     void *p;
51
52     /* Make sure that xmalloc (0) works.  This is the same behaviour
53        has in gpg 2.x.  Note that in contrast to this code, Libgcrypt
54        (and thus most xmallocs in gpg 2.x) detect the !n and bail out.  */
55     if (!n)
56       n = 1;
57
58     p = malloc( n );
59     if( !p )
60         out_of_core();
61     return p;
62 }
63
64 void *
65 xrealloc( void *a, size_t n )
66 {
67     void *p = realloc( a, n );
68     if( !p )
69         out_of_core();
70     return p;
71 }
72
73 void *
74 xcalloc( size_t n, size_t m )
75 {
76     void *p;
77
78     if (!n)
79       n = 1;
80     if (!m)
81       m = 1;
82
83     p = calloc( n, m );
84     if( !p )
85         out_of_core();
86     return p;
87 }
88
89 char *
90 xstrdup( const char *string )
91 {
92     void *p = xmalloc( strlen(string)+1 );
93     strcpy( p, string );
94     return p;
95 }
96
97
98 char *
99 xstrcat2( const char *a, const char *b )
100 {
101     size_t n1;
102     char *p;
103
104     if( !b )
105         return xstrdup( a );
106
107     n1 = strlen(a);
108     p = xmalloc( n1 + strlen(b) + 1 );
109     memcpy(p, a, n1 );
110     strcpy(p+n1, b );
111     return p;
112 }