Skip to content
Snippets Groups Projects
xmalloc.c 1.24 KiB
Newer Older
  • Learn to ignore specific revisions
  • Alexandre Julliard's avatar
    Alexandre Julliard committed
    /*
       xmalloc - a safe malloc
    
       Use this function instead of malloc whenever you don't intend to check
       the return value yourself, for instance because you don't have a good
       way to handle a zero return value.
    
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
       Typically, Wine's own memory requests should be handled by this function,
       while the clients should use malloc directly (and Wine should return an
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
       error to the client if allocation fails).
    
       Copyright 1995 by Morten Welinder.
    
    */
    
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    #include <stdlib.h>
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    #include <string.h>
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    #include "xmalloc.h"
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    
    
    void *xmalloc( size_t size )
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    {
        void *res;
    
        res = malloc (size ? size : 1);
        if (res == NULL)
        {
    
            MESSAGE("Virtual memory exhausted.\n");
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
            exit (1);
        }
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
        memset(res,0,size);
        return res;
    }
    
    
    void *xcalloc( size_t size )
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    {
        void *res;
    
        res = xmalloc (size);
        memset(res,0,size);
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
        return res;
    }
    
    
    
    void *xrealloc( void *ptr, size_t size )
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    {
        void *res = realloc (ptr, size);
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
        if ((res == NULL) && size)
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
        {
    
            MESSAGE("Virtual memory exhausted.\n");
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
            exit (1);
        }
        return res;
    }
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    
    
    char *xstrdup( const char *str )
    {
        char *res = strdup( str );
        if (!res)
        {
    
            MESSAGE("Virtual memory exhausted.\n");
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
            exit (1);
        }
        return res;
    }