2004-05-09 Michael Poole <mdpoole@troilus.org>
[ircu2.10.12-pk.git] / ircd / ircd_alloc.c
1 /************************************************************************
2  *   IRC - Internet Relay Chat, ircd/ircd_alloc.c
3  *   Copyright (C) 1999 Thomas Helvey (BleepSoft)
4  *                     
5  *   See file AUTHORS in IRC package for additional names of
6  *   the programmers. 
7  *
8  *   This program is free software; you can redistribute it and/or modify
9  *   it under the terms of the GNU General Public License as published by
10  *   the Free Software Foundation; either version 1, or (at your option)
11  *   any later version.
12  *
13  *   This program is distributed in the hope that it will be useful,
14  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
15  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  *   GNU General Public License for more details.
17  *
18  *   You should have received a copy of the GNU General Public License
19  *   along with this program; if not, write to the Free Software
20  *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21  *
22  *   $Id$
23  */
24 #include "config.h"
25
26 #include "ircd_alloc.h"
27 #include "ircd_string.h"
28 #include "s_debug.h"
29
30 #include <assert.h>
31 #include <string.h>
32
33 static void nomem_handler(void);
34
35 /* Those ugly globals... */
36 OutOfMemoryHandler noMemHandler = nomem_handler;
37 void *malloc_tmp;
38
39 static void
40 nomem_handler(void)
41 {
42 #ifdef MDEBUG
43   assert(0);
44 #else
45   Debug((DEBUG_FATAL, "Out of memory, exiting"));
46   exit(2);
47 #endif
48 }
49
50 void
51 set_nomem_handler(OutOfMemoryHandler handler)
52 {
53   noMemHandler = handler;
54 }
55
56 void* DoMalloc(size_t size, const char* x, const char* y, int z)
57 {
58   void* t = malloc(size);
59   if (!t)
60     (*noMemHandler)();
61   return t;
62 }
63
64 void* DoMallocZero(size_t size, const char* x, const char* y, int z)
65 {
66   void* t = malloc(size);
67   if (!t)
68     (*noMemHandler)();
69   memset(t, 0, size);
70   return t;
71 }
72
73 void* DoRealloc(void *orig, size_t size, const char *file, int line)
74 {
75   void* t = realloc(orig, size);
76   if (!t)
77     (*noMemHandler)();
78   return t;
79 }