2003-01-09 12:36:05 +00:00
|
|
|
/* xmalloc.c - standard malloc wrappers
|
2006-10-02 11:54:35 +00:00
|
|
|
* Copyright (C) 1999, 2000, 2001, 2006 Free Software Foundation, Inc.
|
2003-01-09 12:36:05 +00:00
|
|
|
*
|
2015-04-24 16:42:28 +02:00
|
|
|
* This file is part of GnuPG.
|
2003-01-09 12:36:05 +00:00
|
|
|
*
|
2015-04-24 16:42:28 +02:00
|
|
|
* GnuPG is free software; you can redistribute it and/or modify it
|
2011-09-30 12:52:11 +02:00
|
|
|
* under the terms of either
|
|
|
|
*
|
|
|
|
* - the GNU Lesser General Public License as published by the Free
|
|
|
|
* Software Foundation; either version 3 of the License, or (at
|
|
|
|
* your option) any later version.
|
|
|
|
*
|
|
|
|
* or
|
|
|
|
*
|
|
|
|
* - the GNU General Public License as published by the Free
|
|
|
|
* Software Foundation; either version 2 of the License, or (at
|
|
|
|
* your option) any later version.
|
|
|
|
*
|
|
|
|
* or both in parallel, as here.
|
2003-01-09 12:36:05 +00:00
|
|
|
*
|
2015-04-24 16:42:28 +02:00
|
|
|
* GnuPG is distributed in the hope that it will be useful, but
|
2006-10-02 11:54:35 +00:00
|
|
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
2011-09-30 12:52:11 +02:00
|
|
|
* General Public License for more details.
|
2003-01-09 12:36:05 +00:00
|
|
|
*
|
2011-09-30 12:52:11 +02:00
|
|
|
* You should have received a copies of the GNU General Public License
|
|
|
|
* and the GNU Lesser General Public License along with this program;
|
|
|
|
* if not, see <http://www.gnu.org/licenses/>.
|
2003-01-09 12:36:05 +00:00
|
|
|
*/
|
|
|
|
|
|
|
|
#include <config.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include <string.h>
|
|
|
|
#include <stdio.h>
|
|
|
|
|
|
|
|
#include "libjnlib-config.h"
|
|
|
|
#include "xmalloc.h"
|
|
|
|
|
|
|
|
static void
|
|
|
|
out_of_core(void)
|
|
|
|
{
|
|
|
|
fputs("\nfatal: out of memory\n", stderr );
|
|
|
|
exit(2);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void *
|
|
|
|
xmalloc( size_t n )
|
|
|
|
{
|
2014-06-02 11:47:25 +02:00
|
|
|
void *p;
|
|
|
|
|
|
|
|
/* Make sure that xmalloc (0) works. This is the same behaviour
|
|
|
|
has in gpg 2.x. Note that in contrast to this code, Libgcrypt
|
|
|
|
(and thus most xmallocs in gpg 2.x) detect the !n and bail out. */
|
|
|
|
if (!n)
|
|
|
|
n = 1;
|
|
|
|
|
|
|
|
p = malloc( n );
|
2003-01-09 12:36:05 +00:00
|
|
|
if( !p )
|
|
|
|
out_of_core();
|
|
|
|
return p;
|
|
|
|
}
|
|
|
|
|
|
|
|
void *
|
|
|
|
xrealloc( void *a, size_t n )
|
|
|
|
{
|
|
|
|
void *p = realloc( a, n );
|
|
|
|
if( !p )
|
|
|
|
out_of_core();
|
|
|
|
return p;
|
|
|
|
}
|
|
|
|
|
|
|
|
void *
|
|
|
|
xcalloc( size_t n, size_t m )
|
|
|
|
{
|
2014-06-02 11:47:25 +02:00
|
|
|
void *p;
|
|
|
|
|
|
|
|
if (!n)
|
|
|
|
n = 1;
|
|
|
|
if (!m)
|
|
|
|
m = 1;
|
|
|
|
|
|
|
|
p = calloc( n, m );
|
2003-01-09 12:36:05 +00:00
|
|
|
if( !p )
|
|
|
|
out_of_core();
|
|
|
|
return p;
|
|
|
|
}
|
|
|
|
|
|
|
|
char *
|
|
|
|
xstrdup( const char *string )
|
|
|
|
{
|
|
|
|
void *p = xmalloc( strlen(string)+1 );
|
|
|
|
strcpy( p, string );
|
|
|
|
return p;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
char *
|
|
|
|
xstrcat2( const char *a, const char *b )
|
|
|
|
{
|
|
|
|
size_t n1;
|
|
|
|
char *p;
|
|
|
|
|
|
|
|
if( !b )
|
|
|
|
return xstrdup( a );
|
|
|
|
|
|
|
|
n1 = strlen(a);
|
|
|
|
p = xmalloc( n1 + strlen(b) + 1 );
|
|
|
|
memcpy(p, a, n1 );
|
|
|
|
strcpy(p+n1, b );
|
|
|
|
return p;
|
|
|
|
}
|