Updated FSF's address.
[gnupg.git] / jnlib / xmalloc.c
1 /* xmalloc.c -  standard malloc wrappers
2  *      Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
3  *
4  * This file is part of GnuPG.
5  *
6  * GnuPG is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * GnuPG is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
19  * USA.
20  */
21
22 #include <config.h>
23 #include <stdlib.h>
24 #include <string.h>
25 #include <stdio.h>
26
27 #include "libjnlib-config.h"
28 #include "xmalloc.h"
29
30 static void
31 out_of_core(void)
32 {
33     fputs("\nfatal: out of memory\n", stderr );
34     exit(2);
35 }
36
37
38 void *
39 xmalloc( size_t n )
40 {
41     void *p = malloc( n );
42     if( !p )
43         out_of_core();
44     return p;
45 }
46
47 void *
48 xrealloc( void *a, size_t n )
49 {
50     void *p = realloc( a, n );
51     if( !p )
52         out_of_core();
53     return p;
54 }
55
56 void *
57 xcalloc( size_t n, size_t m )
58 {
59     void *p = calloc( n, m );
60     if( !p )
61         out_of_core();
62     return p;
63 }
64
65 char *
66 xstrdup( const char *string )
67 {
68     void *p = xmalloc( strlen(string)+1 );
69     strcpy( p, string );
70     return p;
71 }
72
73
74 char *
75 xstrcat2( const char *a, const char *b )
76 {
77     size_t n1;
78     char *p;
79
80     if( !b )
81         return xstrdup( a );
82
83     n1 = strlen(a);
84     p = xmalloc( n1 + strlen(b) + 1 );
85     memcpy(p, a, n1 );
86     strcpy(p+n1, b );
87     return p;
88 }
89