2002-03-25 23:16:26 +03:00
/** \ingroup rpmio
* \ file rpmio / rpmmalloc . c
*/
# include "system.h"
# include "debug.h"
# if !defined(EXIT_FAILURE)
# define EXIT_FAILURE 1
# endif
/*@-modfilesys@*/
/*@only@*/ void * vmefail ( size_t size )
{
fprintf ( stderr , _ ( " memory alloc (%u bytes) returned NULL. \n " ) , ( unsigned ) size ) ;
exit ( EXIT_FAILURE ) ;
/*@notreached@*/
return NULL ;
}
/*@=modfilesys@*/
2019-01-11 02:20:03 +03:00
char *
xasprintf ( const char * fmt , . . . )
{
va_list ap ;
va_start ( ap , fmt ) ;
char * res ;
if ( vasprintf ( & res , fmt , ap ) < 0 ) {
fprintf ( stderr , " vasprintf: %m \n " ) ;
exit ( EXIT_FAILURE ) ;
}
va_end ( ap ) ;
return res ;
}
2002-03-25 23:16:26 +03:00
# if !(HAVE_MCHECK_H && defined(__GNUC__)) && !defined(__LCLINT__)
/*@out@*/ /*@only@*/ void * xmalloc ( size_t size )
{
register void * value ;
if ( size = = 0 ) size + + ;
value = malloc ( size ) ;
if ( value = = 0 )
value = vmefail ( size ) ;
return value ;
}
/*@only@*/ void * xcalloc ( size_t nmemb , size_t size )
{
register void * value ;
if ( size = = 0 ) size + + ;
if ( nmemb = = 0 ) nmemb + + ;
value = calloc ( nmemb , size ) ;
if ( value = = 0 )
value = vmefail ( size ) ;
return value ;
}
/*@only@*/ void * xrealloc ( /*@only@*/ void * ptr , size_t size )
{
register void * value ;
if ( size = = 0 ) size + + ;
value = realloc ( ptr , size ) ;
if ( value = = 0 )
value = vmefail ( size ) ;
return value ;
}
/*@only@*/ char * xstrdup ( const char * str )
{
size_t size = strlen ( str ) + 1 ;
char * newstr = ( char * ) malloc ( size ) ;
if ( newstr = = 0 )
newstr = ( char * ) vmefail ( size ) ;
strcpy ( newstr , str ) ;
return newstr ;
}
# endif /* !(HAVE_MCHECK_H && defined(__GNUC__)) */