1*83ee113eSDavid van Moolenbroek /* $NetBSD: alloc.c,v 1.3 2014/07/12 12:09:37 spz Exp $ */
2*83ee113eSDavid van Moolenbroek /* alloc.c
3*83ee113eSDavid van Moolenbroek
4*83ee113eSDavid van Moolenbroek Memory allocation... */
5*83ee113eSDavid van Moolenbroek
6*83ee113eSDavid van Moolenbroek /*
7*83ee113eSDavid van Moolenbroek * Copyright (c) 2009,2013-2014 by Internet Systems Consortium, Inc. ("ISC")
8*83ee113eSDavid van Moolenbroek * Copyright (c) 2004-2007 by Internet Systems Consortium, Inc. ("ISC")
9*83ee113eSDavid van Moolenbroek * Copyright (c) 1996-2003 by Internet Software Consortium
10*83ee113eSDavid van Moolenbroek *
11*83ee113eSDavid van Moolenbroek * Permission to use, copy, modify, and distribute this software for any
12*83ee113eSDavid van Moolenbroek * purpose with or without fee is hereby granted, provided that the above
13*83ee113eSDavid van Moolenbroek * copyright notice and this permission notice appear in all copies.
14*83ee113eSDavid van Moolenbroek *
15*83ee113eSDavid van Moolenbroek * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
16*83ee113eSDavid van Moolenbroek * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
17*83ee113eSDavid van Moolenbroek * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR
18*83ee113eSDavid van Moolenbroek * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
19*83ee113eSDavid van Moolenbroek * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
20*83ee113eSDavid van Moolenbroek * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
21*83ee113eSDavid van Moolenbroek * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
22*83ee113eSDavid van Moolenbroek *
23*83ee113eSDavid van Moolenbroek * Internet Systems Consortium, Inc.
24*83ee113eSDavid van Moolenbroek * 950 Charter Street
25*83ee113eSDavid van Moolenbroek * Redwood City, CA 94063
26*83ee113eSDavid van Moolenbroek * <info@isc.org>
27*83ee113eSDavid van Moolenbroek * https://www.isc.org/
28*83ee113eSDavid van Moolenbroek *
29*83ee113eSDavid van Moolenbroek */
30*83ee113eSDavid van Moolenbroek
31*83ee113eSDavid van Moolenbroek #include <sys/cdefs.h>
32*83ee113eSDavid van Moolenbroek __RCSID("$NetBSD: alloc.c,v 1.3 2014/07/12 12:09:37 spz Exp $");
33*83ee113eSDavid van Moolenbroek
34*83ee113eSDavid van Moolenbroek #include "dhcpd.h"
35*83ee113eSDavid van Moolenbroek #include <omapip/omapip_p.h>
36*83ee113eSDavid van Moolenbroek
37*83ee113eSDavid van Moolenbroek struct dhcp_packet *dhcp_free_list;
38*83ee113eSDavid van Moolenbroek struct packet *packet_free_list;
39*83ee113eSDavid van Moolenbroek
option_chain_head_allocate(ptr,file,line)40*83ee113eSDavid van Moolenbroek int option_chain_head_allocate (ptr, file, line)
41*83ee113eSDavid van Moolenbroek struct option_chain_head **ptr;
42*83ee113eSDavid van Moolenbroek const char *file;
43*83ee113eSDavid van Moolenbroek int line;
44*83ee113eSDavid van Moolenbroek {
45*83ee113eSDavid van Moolenbroek struct option_chain_head *h;
46*83ee113eSDavid van Moolenbroek
47*83ee113eSDavid van Moolenbroek if (!ptr) {
48*83ee113eSDavid van Moolenbroek log_error ("%s(%d): null pointer", file, line);
49*83ee113eSDavid van Moolenbroek #if defined (POINTER_DEBUG)
50*83ee113eSDavid van Moolenbroek abort ();
51*83ee113eSDavid van Moolenbroek #else
52*83ee113eSDavid van Moolenbroek return 0;
53*83ee113eSDavid van Moolenbroek #endif
54*83ee113eSDavid van Moolenbroek }
55*83ee113eSDavid van Moolenbroek if (*ptr) {
56*83ee113eSDavid van Moolenbroek log_error ("%s(%d): non-null pointer", file, line);
57*83ee113eSDavid van Moolenbroek #if defined (POINTER_DEBUG)
58*83ee113eSDavid van Moolenbroek abort ();
59*83ee113eSDavid van Moolenbroek #else
60*83ee113eSDavid van Moolenbroek *ptr = (struct option_chain_head *)0;
61*83ee113eSDavid van Moolenbroek #endif
62*83ee113eSDavid van Moolenbroek }
63*83ee113eSDavid van Moolenbroek
64*83ee113eSDavid van Moolenbroek h = dmalloc (sizeof *h, file, line);
65*83ee113eSDavid van Moolenbroek if (h) {
66*83ee113eSDavid van Moolenbroek memset (h, 0, sizeof *h);
67*83ee113eSDavid van Moolenbroek return option_chain_head_reference (ptr, h, file, line);
68*83ee113eSDavid van Moolenbroek }
69*83ee113eSDavid van Moolenbroek return 0;
70*83ee113eSDavid van Moolenbroek }
71*83ee113eSDavid van Moolenbroek
option_chain_head_reference(ptr,bp,file,line)72*83ee113eSDavid van Moolenbroek int option_chain_head_reference (ptr, bp, file, line)
73*83ee113eSDavid van Moolenbroek struct option_chain_head **ptr;
74*83ee113eSDavid van Moolenbroek struct option_chain_head *bp;
75*83ee113eSDavid van Moolenbroek const char *file;
76*83ee113eSDavid van Moolenbroek int line;
77*83ee113eSDavid van Moolenbroek {
78*83ee113eSDavid van Moolenbroek if (!ptr) {
79*83ee113eSDavid van Moolenbroek log_error ("%s(%d): null pointer", file, line);
80*83ee113eSDavid van Moolenbroek #if defined (POINTER_DEBUG)
81*83ee113eSDavid van Moolenbroek abort ();
82*83ee113eSDavid van Moolenbroek #else
83*83ee113eSDavid van Moolenbroek return 0;
84*83ee113eSDavid van Moolenbroek #endif
85*83ee113eSDavid van Moolenbroek }
86*83ee113eSDavid van Moolenbroek if (*ptr) {
87*83ee113eSDavid van Moolenbroek log_error ("%s(%d): non-null pointer", file, line);
88*83ee113eSDavid van Moolenbroek #if defined (POINTER_DEBUG)
89*83ee113eSDavid van Moolenbroek abort ();
90*83ee113eSDavid van Moolenbroek #else
91*83ee113eSDavid van Moolenbroek *ptr = (struct option_chain_head *)0;
92*83ee113eSDavid van Moolenbroek #endif
93*83ee113eSDavid van Moolenbroek }
94*83ee113eSDavid van Moolenbroek *ptr = bp;
95*83ee113eSDavid van Moolenbroek bp -> refcnt++;
96*83ee113eSDavid van Moolenbroek rc_register (file, line, ptr, bp, bp -> refcnt, 0, RC_MISC);
97*83ee113eSDavid van Moolenbroek return 1;
98*83ee113eSDavid van Moolenbroek }
99*83ee113eSDavid van Moolenbroek
option_chain_head_dereference(ptr,file,line)100*83ee113eSDavid van Moolenbroek int option_chain_head_dereference (ptr, file, line)
101*83ee113eSDavid van Moolenbroek struct option_chain_head **ptr;
102*83ee113eSDavid van Moolenbroek const char *file;
103*83ee113eSDavid van Moolenbroek int line;
104*83ee113eSDavid van Moolenbroek {
105*83ee113eSDavid van Moolenbroek struct option_chain_head *option_chain_head;
106*83ee113eSDavid van Moolenbroek pair car, cdr;
107*83ee113eSDavid van Moolenbroek
108*83ee113eSDavid van Moolenbroek if (!ptr || !*ptr) {
109*83ee113eSDavid van Moolenbroek log_error ("%s(%d): null pointer", file, line);
110*83ee113eSDavid van Moolenbroek #if defined (POINTER_DEBUG)
111*83ee113eSDavid van Moolenbroek abort ();
112*83ee113eSDavid van Moolenbroek #else
113*83ee113eSDavid van Moolenbroek return 0;
114*83ee113eSDavid van Moolenbroek #endif
115*83ee113eSDavid van Moolenbroek }
116*83ee113eSDavid van Moolenbroek
117*83ee113eSDavid van Moolenbroek option_chain_head = *ptr;
118*83ee113eSDavid van Moolenbroek *ptr = (struct option_chain_head *)0;
119*83ee113eSDavid van Moolenbroek --option_chain_head -> refcnt;
120*83ee113eSDavid van Moolenbroek rc_register (file, line, ptr, option_chain_head,
121*83ee113eSDavid van Moolenbroek option_chain_head -> refcnt, 1, RC_MISC);
122*83ee113eSDavid van Moolenbroek if (option_chain_head -> refcnt > 0)
123*83ee113eSDavid van Moolenbroek return 1;
124*83ee113eSDavid van Moolenbroek
125*83ee113eSDavid van Moolenbroek if (option_chain_head -> refcnt < 0) {
126*83ee113eSDavid van Moolenbroek log_error ("%s(%d): negative refcnt!", file, line);
127*83ee113eSDavid van Moolenbroek #if defined (DEBUG_RC_HISTORY)
128*83ee113eSDavid van Moolenbroek dump_rc_history (option_chain_head);
129*83ee113eSDavid van Moolenbroek #endif
130*83ee113eSDavid van Moolenbroek #if defined (POINTER_DEBUG)
131*83ee113eSDavid van Moolenbroek abort ();
132*83ee113eSDavid van Moolenbroek #else
133*83ee113eSDavid van Moolenbroek return 0;
134*83ee113eSDavid van Moolenbroek #endif
135*83ee113eSDavid van Moolenbroek }
136*83ee113eSDavid van Moolenbroek
137*83ee113eSDavid van Moolenbroek /* If there are any options on this head, free them. */
138*83ee113eSDavid van Moolenbroek for (car = option_chain_head -> first; car; car = cdr) {
139*83ee113eSDavid van Moolenbroek cdr = car -> cdr;
140*83ee113eSDavid van Moolenbroek if (car -> car)
141*83ee113eSDavid van Moolenbroek option_cache_dereference ((struct option_cache **)
142*83ee113eSDavid van Moolenbroek (void *)(&car -> car), MDL);
143*83ee113eSDavid van Moolenbroek dfree (car, MDL);
144*83ee113eSDavid van Moolenbroek }
145*83ee113eSDavid van Moolenbroek
146*83ee113eSDavid van Moolenbroek dfree (option_chain_head, file, line);
147*83ee113eSDavid van Moolenbroek return 1;
148*83ee113eSDavid van Moolenbroek }
149*83ee113eSDavid van Moolenbroek
group_allocate(ptr,file,line)150*83ee113eSDavid van Moolenbroek int group_allocate (ptr, file, line)
151*83ee113eSDavid van Moolenbroek struct group **ptr;
152*83ee113eSDavid van Moolenbroek const char *file;
153*83ee113eSDavid van Moolenbroek int line;
154*83ee113eSDavid van Moolenbroek {
155*83ee113eSDavid van Moolenbroek struct group *g;
156*83ee113eSDavid van Moolenbroek
157*83ee113eSDavid van Moolenbroek if (!ptr) {
158*83ee113eSDavid van Moolenbroek log_error ("%s(%d): null pointer", file, line);
159*83ee113eSDavid van Moolenbroek #if defined (POINTER_DEBUG)
160*83ee113eSDavid van Moolenbroek abort ();
161*83ee113eSDavid van Moolenbroek #else
162*83ee113eSDavid van Moolenbroek return 0;
163*83ee113eSDavid van Moolenbroek #endif
164*83ee113eSDavid van Moolenbroek }
165*83ee113eSDavid van Moolenbroek if (*ptr) {
166*83ee113eSDavid van Moolenbroek log_error ("%s(%d): non-null pointer", file, line);
167*83ee113eSDavid van Moolenbroek #if defined (POINTER_DEBUG)
168*83ee113eSDavid van Moolenbroek abort ();
169*83ee113eSDavid van Moolenbroek #else
170*83ee113eSDavid van Moolenbroek *ptr = (struct group *)0;
171*83ee113eSDavid van Moolenbroek #endif
172*83ee113eSDavid van Moolenbroek }
173*83ee113eSDavid van Moolenbroek
174*83ee113eSDavid van Moolenbroek g = dmalloc (sizeof *g, file, line);
175*83ee113eSDavid van Moolenbroek if (g) {
176*83ee113eSDavid van Moolenbroek memset (g, 0, sizeof *g);
177*83ee113eSDavid van Moolenbroek return group_reference (ptr, g, file, line);
178*83ee113eSDavid van Moolenbroek }
179*83ee113eSDavid van Moolenbroek return 0;
180*83ee113eSDavid van Moolenbroek }
181*83ee113eSDavid van Moolenbroek
group_reference(ptr,bp,file,line)182*83ee113eSDavid van Moolenbroek int group_reference (ptr, bp, file, line)
183*83ee113eSDavid van Moolenbroek struct group **ptr;
184*83ee113eSDavid van Moolenbroek struct group *bp;
185*83ee113eSDavid van Moolenbroek const char *file;
186*83ee113eSDavid van Moolenbroek int line;
187*83ee113eSDavid van Moolenbroek {
188*83ee113eSDavid van Moolenbroek if (!ptr) {
189*83ee113eSDavid van Moolenbroek log_error ("%s(%d): null pointer", file, line);
190*83ee113eSDavid van Moolenbroek #if defined (POINTER_DEBUG)
191*83ee113eSDavid van Moolenbroek abort ();
192*83ee113eSDavid van Moolenbroek #else
193*83ee113eSDavid van Moolenbroek return 0;
194*83ee113eSDavid van Moolenbroek #endif
195*83ee113eSDavid van Moolenbroek }
196*83ee113eSDavid van Moolenbroek if (*ptr) {
197*83ee113eSDavid van Moolenbroek log_error ("%s(%d): non-null pointer", file, line);
198*83ee113eSDavid van Moolenbroek #if defined (POINTER_DEBUG)
199*83ee113eSDavid van Moolenbroek abort ();
200*83ee113eSDavid van Moolenbroek #else
201*83ee113eSDavid van Moolenbroek *ptr = (struct group *)0;
202*83ee113eSDavid van Moolenbroek #endif
203*83ee113eSDavid van Moolenbroek }
204*83ee113eSDavid van Moolenbroek *ptr = bp;
205*83ee113eSDavid van Moolenbroek bp -> refcnt++;
206*83ee113eSDavid van Moolenbroek rc_register (file, line, ptr, bp, bp -> refcnt, 0, RC_MISC);
207*83ee113eSDavid van Moolenbroek return 1;
208*83ee113eSDavid van Moolenbroek }
209*83ee113eSDavid van Moolenbroek
group_dereference(ptr,file,line)210*83ee113eSDavid van Moolenbroek int group_dereference (ptr, file, line)
211*83ee113eSDavid van Moolenbroek struct group **ptr;
212*83ee113eSDavid van Moolenbroek const char *file;
213*83ee113eSDavid van Moolenbroek int line;
214*83ee113eSDavid van Moolenbroek {
215*83ee113eSDavid van Moolenbroek struct group *group;
216*83ee113eSDavid van Moolenbroek
217*83ee113eSDavid van Moolenbroek if (!ptr || !*ptr) {
218*83ee113eSDavid van Moolenbroek log_error ("%s(%d): null pointer", file, line);
219*83ee113eSDavid van Moolenbroek #if defined (POINTER_DEBUG)
220*83ee113eSDavid van Moolenbroek abort ();
221*83ee113eSDavid van Moolenbroek #else
222*83ee113eSDavid van Moolenbroek return 0;
223*83ee113eSDavid van Moolenbroek #endif
224*83ee113eSDavid van Moolenbroek }
225*83ee113eSDavid van Moolenbroek
226*83ee113eSDavid van Moolenbroek group = *ptr;
227*83ee113eSDavid van Moolenbroek *ptr = (struct group *)0;
228*83ee113eSDavid van Moolenbroek --group -> refcnt;
229*83ee113eSDavid van Moolenbroek rc_register (file, line, ptr, group, group -> refcnt, 1, RC_MISC);
230*83ee113eSDavid van Moolenbroek if (group -> refcnt > 0)
231*83ee113eSDavid van Moolenbroek return 1;
232*83ee113eSDavid van Moolenbroek
233*83ee113eSDavid van Moolenbroek if (group -> refcnt < 0) {
234*83ee113eSDavid van Moolenbroek log_error ("%s(%d): negative refcnt!", file, line);
235*83ee113eSDavid van Moolenbroek #if defined (DEBUG_RC_HISTORY)
236*83ee113eSDavid van Moolenbroek dump_rc_history (group);
237*83ee113eSDavid van Moolenbroek #endif
238*83ee113eSDavid van Moolenbroek #if defined (POINTER_DEBUG)
239*83ee113eSDavid van Moolenbroek abort ();
240*83ee113eSDavid van Moolenbroek #else
241*83ee113eSDavid van Moolenbroek return 0;
242*83ee113eSDavid van Moolenbroek #endif
243*83ee113eSDavid van Moolenbroek }
244*83ee113eSDavid van Moolenbroek
245*83ee113eSDavid van Moolenbroek if (group -> object)
246*83ee113eSDavid van Moolenbroek group_object_dereference (&group -> object, file, line);
247*83ee113eSDavid van Moolenbroek if (group -> subnet)
248*83ee113eSDavid van Moolenbroek subnet_dereference (&group -> subnet, file, line);
249*83ee113eSDavid van Moolenbroek if (group -> shared_network)
250*83ee113eSDavid van Moolenbroek shared_network_dereference (&group -> shared_network,
251*83ee113eSDavid van Moolenbroek file, line);
252*83ee113eSDavid van Moolenbroek if (group -> statements)
253*83ee113eSDavid van Moolenbroek executable_statement_dereference (&group -> statements,
254*83ee113eSDavid van Moolenbroek file, line);
255*83ee113eSDavid van Moolenbroek if (group -> next)
256*83ee113eSDavid van Moolenbroek group_dereference (&group -> next, file, line);
257*83ee113eSDavid van Moolenbroek dfree (group, file, line);
258*83ee113eSDavid van Moolenbroek return 1;
259*83ee113eSDavid van Moolenbroek }
260*83ee113eSDavid van Moolenbroek
new_dhcp_packet(file,line)261*83ee113eSDavid van Moolenbroek struct dhcp_packet *new_dhcp_packet (file, line)
262*83ee113eSDavid van Moolenbroek const char *file;
263*83ee113eSDavid van Moolenbroek int line;
264*83ee113eSDavid van Moolenbroek {
265*83ee113eSDavid van Moolenbroek struct dhcp_packet *rval;
266*83ee113eSDavid van Moolenbroek rval = (struct dhcp_packet *)dmalloc (sizeof (struct dhcp_packet),
267*83ee113eSDavid van Moolenbroek file, line);
268*83ee113eSDavid van Moolenbroek return rval;
269*83ee113eSDavid van Moolenbroek }
270*83ee113eSDavid van Moolenbroek
new_protocol(file,line)271*83ee113eSDavid van Moolenbroek struct protocol *new_protocol (file, line)
272*83ee113eSDavid van Moolenbroek const char *file;
273*83ee113eSDavid van Moolenbroek int line;
274*83ee113eSDavid van Moolenbroek {
275*83ee113eSDavid van Moolenbroek struct protocol *rval = dmalloc (sizeof (struct protocol), file, line);
276*83ee113eSDavid van Moolenbroek return rval;
277*83ee113eSDavid van Moolenbroek }
278*83ee113eSDavid van Moolenbroek
new_domain_search_list(file,line)279*83ee113eSDavid van Moolenbroek struct domain_search_list *new_domain_search_list (file, line)
280*83ee113eSDavid van Moolenbroek const char *file;
281*83ee113eSDavid van Moolenbroek int line;
282*83ee113eSDavid van Moolenbroek {
283*83ee113eSDavid van Moolenbroek struct domain_search_list *rval =
284*83ee113eSDavid van Moolenbroek dmalloc (sizeof (struct domain_search_list), file, line);
285*83ee113eSDavid van Moolenbroek return rval;
286*83ee113eSDavid van Moolenbroek }
287*83ee113eSDavid van Moolenbroek
new_name_server(file,line)288*83ee113eSDavid van Moolenbroek struct name_server *new_name_server (file, line)
289*83ee113eSDavid van Moolenbroek const char *file;
290*83ee113eSDavid van Moolenbroek int line;
291*83ee113eSDavid van Moolenbroek {
292*83ee113eSDavid van Moolenbroek struct name_server *rval =
293*83ee113eSDavid van Moolenbroek dmalloc (sizeof (struct name_server), file, line);
294*83ee113eSDavid van Moolenbroek return rval;
295*83ee113eSDavid van Moolenbroek }
296*83ee113eSDavid van Moolenbroek
free_name_server(ptr,file,line)297*83ee113eSDavid van Moolenbroek void free_name_server (ptr, file, line)
298*83ee113eSDavid van Moolenbroek struct name_server *ptr;
299*83ee113eSDavid van Moolenbroek const char *file;
300*83ee113eSDavid van Moolenbroek int line;
301*83ee113eSDavid van Moolenbroek {
302*83ee113eSDavid van Moolenbroek dfree ((void *)ptr, file, line);
303*83ee113eSDavid van Moolenbroek }
304*83ee113eSDavid van Moolenbroek
new_option(name,file,line)305*83ee113eSDavid van Moolenbroek struct option *new_option (name, file, line)
306*83ee113eSDavid van Moolenbroek const char *name;
307*83ee113eSDavid van Moolenbroek const char *file;
308*83ee113eSDavid van Moolenbroek int line;
309*83ee113eSDavid van Moolenbroek {
310*83ee113eSDavid van Moolenbroek struct option *rval;
311*83ee113eSDavid van Moolenbroek int len;
312*83ee113eSDavid van Moolenbroek
313*83ee113eSDavid van Moolenbroek len = strlen(name);
314*83ee113eSDavid van Moolenbroek
315*83ee113eSDavid van Moolenbroek rval = dmalloc(sizeof(struct option) + len + 1, file, line);
316*83ee113eSDavid van Moolenbroek
317*83ee113eSDavid van Moolenbroek if(rval) {
318*83ee113eSDavid van Moolenbroek memcpy(rval + 1, name, len);
319*83ee113eSDavid van Moolenbroek rval->name = (char *)(rval + 1);
320*83ee113eSDavid van Moolenbroek }
321*83ee113eSDavid van Moolenbroek
322*83ee113eSDavid van Moolenbroek return rval;
323*83ee113eSDavid van Moolenbroek }
324*83ee113eSDavid van Moolenbroek
new_universe(file,line)325*83ee113eSDavid van Moolenbroek struct universe *new_universe (file, line)
326*83ee113eSDavid van Moolenbroek const char *file;
327*83ee113eSDavid van Moolenbroek int line;
328*83ee113eSDavid van Moolenbroek {
329*83ee113eSDavid van Moolenbroek struct universe *rval =
330*83ee113eSDavid van Moolenbroek dmalloc (sizeof (struct universe), file, line);
331*83ee113eSDavid van Moolenbroek return rval;
332*83ee113eSDavid van Moolenbroek }
333*83ee113eSDavid van Moolenbroek
free_universe(ptr,file,line)334*83ee113eSDavid van Moolenbroek void free_universe (ptr, file, line)
335*83ee113eSDavid van Moolenbroek struct universe *ptr;
336*83ee113eSDavid van Moolenbroek const char *file;
337*83ee113eSDavid van Moolenbroek int line;
338*83ee113eSDavid van Moolenbroek {
339*83ee113eSDavid van Moolenbroek dfree ((void *)ptr, file, line);
340*83ee113eSDavid van Moolenbroek }
341*83ee113eSDavid van Moolenbroek
free_domain_search_list(ptr,file,line)342*83ee113eSDavid van Moolenbroek void free_domain_search_list (ptr, file, line)
343*83ee113eSDavid van Moolenbroek struct domain_search_list *ptr;
344*83ee113eSDavid van Moolenbroek const char *file;
345*83ee113eSDavid van Moolenbroek int line;
346*83ee113eSDavid van Moolenbroek {
347*83ee113eSDavid van Moolenbroek dfree ((void *)ptr, file, line);
348*83ee113eSDavid van Moolenbroek }
349*83ee113eSDavid van Moolenbroek
free_protocol(ptr,file,line)350*83ee113eSDavid van Moolenbroek void free_protocol (ptr, file, line)
351*83ee113eSDavid van Moolenbroek struct protocol *ptr;
352*83ee113eSDavid van Moolenbroek const char *file;
353*83ee113eSDavid van Moolenbroek int line;
354*83ee113eSDavid van Moolenbroek {
355*83ee113eSDavid van Moolenbroek dfree ((void *)ptr, file, line);
356*83ee113eSDavid van Moolenbroek }
357*83ee113eSDavid van Moolenbroek
free_dhcp_packet(ptr,file,line)358*83ee113eSDavid van Moolenbroek void free_dhcp_packet (ptr, file, line)
359*83ee113eSDavid van Moolenbroek struct dhcp_packet *ptr;
360*83ee113eSDavid van Moolenbroek const char *file;
361*83ee113eSDavid van Moolenbroek int line;
362*83ee113eSDavid van Moolenbroek {
363*83ee113eSDavid van Moolenbroek dfree ((void *)ptr, file, line);
364*83ee113eSDavid van Moolenbroek }
365*83ee113eSDavid van Moolenbroek
new_client_lease(file,line)366*83ee113eSDavid van Moolenbroek struct client_lease *new_client_lease (file, line)
367*83ee113eSDavid van Moolenbroek const char *file;
368*83ee113eSDavid van Moolenbroek int line;
369*83ee113eSDavid van Moolenbroek {
370*83ee113eSDavid van Moolenbroek return (struct client_lease *)dmalloc (sizeof (struct client_lease),
371*83ee113eSDavid van Moolenbroek file, line);
372*83ee113eSDavid van Moolenbroek }
373*83ee113eSDavid van Moolenbroek
free_client_lease(lease,file,line)374*83ee113eSDavid van Moolenbroek void free_client_lease (lease, file, line)
375*83ee113eSDavid van Moolenbroek struct client_lease *lease;
376*83ee113eSDavid van Moolenbroek const char *file;
377*83ee113eSDavid van Moolenbroek int line;
378*83ee113eSDavid van Moolenbroek {
379*83ee113eSDavid van Moolenbroek dfree (lease, file, line);
380*83ee113eSDavid van Moolenbroek }
381*83ee113eSDavid van Moolenbroek
382*83ee113eSDavid van Moolenbroek pair free_pairs;
383*83ee113eSDavid van Moolenbroek
new_pair(file,line)384*83ee113eSDavid van Moolenbroek pair new_pair (file, line)
385*83ee113eSDavid van Moolenbroek const char *file;
386*83ee113eSDavid van Moolenbroek int line;
387*83ee113eSDavid van Moolenbroek {
388*83ee113eSDavid van Moolenbroek pair foo;
389*83ee113eSDavid van Moolenbroek
390*83ee113eSDavid van Moolenbroek if (free_pairs) {
391*83ee113eSDavid van Moolenbroek foo = free_pairs;
392*83ee113eSDavid van Moolenbroek free_pairs = foo -> cdr;
393*83ee113eSDavid van Moolenbroek memset (foo, 0, sizeof *foo);
394*83ee113eSDavid van Moolenbroek dmalloc_reuse (foo, file, line, 0);
395*83ee113eSDavid van Moolenbroek return foo;
396*83ee113eSDavid van Moolenbroek }
397*83ee113eSDavid van Moolenbroek
398*83ee113eSDavid van Moolenbroek foo = dmalloc (sizeof *foo, file, line);
399*83ee113eSDavid van Moolenbroek if (!foo)
400*83ee113eSDavid van Moolenbroek return foo;
401*83ee113eSDavid van Moolenbroek memset (foo, 0, sizeof *foo);
402*83ee113eSDavid van Moolenbroek return foo;
403*83ee113eSDavid van Moolenbroek }
404*83ee113eSDavid van Moolenbroek
free_pair(foo,file,line)405*83ee113eSDavid van Moolenbroek void free_pair (foo, file, line)
406*83ee113eSDavid van Moolenbroek pair foo;
407*83ee113eSDavid van Moolenbroek const char *file;
408*83ee113eSDavid van Moolenbroek int line;
409*83ee113eSDavid van Moolenbroek {
410*83ee113eSDavid van Moolenbroek foo -> cdr = free_pairs;
411*83ee113eSDavid van Moolenbroek free_pairs = foo;
412*83ee113eSDavid van Moolenbroek dmalloc_reuse (free_pairs, __FILE__, __LINE__, 0);
413*83ee113eSDavid van Moolenbroek }
414*83ee113eSDavid van Moolenbroek
415*83ee113eSDavid van Moolenbroek #if defined (DEBUG_MEMORY_LEAKAGE) || \
416*83ee113eSDavid van Moolenbroek defined (DEBUG_MEMORY_LEAKAGE_ON_EXIT)
relinquish_free_pairs()417*83ee113eSDavid van Moolenbroek void relinquish_free_pairs ()
418*83ee113eSDavid van Moolenbroek {
419*83ee113eSDavid van Moolenbroek pair pf, pc;
420*83ee113eSDavid van Moolenbroek
421*83ee113eSDavid van Moolenbroek for (pf = free_pairs; pf; pf = pc) {
422*83ee113eSDavid van Moolenbroek pc = pf -> cdr;
423*83ee113eSDavid van Moolenbroek dfree (pf, MDL);
424*83ee113eSDavid van Moolenbroek }
425*83ee113eSDavid van Moolenbroek free_pairs = (pair)0;
426*83ee113eSDavid van Moolenbroek }
427*83ee113eSDavid van Moolenbroek #endif
428*83ee113eSDavid van Moolenbroek
429*83ee113eSDavid van Moolenbroek struct expression *free_expressions;
430*83ee113eSDavid van Moolenbroek
expression_allocate(cptr,file,line)431*83ee113eSDavid van Moolenbroek int expression_allocate (cptr, file, line)
432*83ee113eSDavid van Moolenbroek struct expression **cptr;
433*83ee113eSDavid van Moolenbroek const char *file;
434*83ee113eSDavid van Moolenbroek int line;
435*83ee113eSDavid van Moolenbroek {
436*83ee113eSDavid van Moolenbroek struct expression *rval;
437*83ee113eSDavid van Moolenbroek
438*83ee113eSDavid van Moolenbroek if (free_expressions) {
439*83ee113eSDavid van Moolenbroek rval = free_expressions;
440*83ee113eSDavid van Moolenbroek free_expressions = rval -> data.not;
441*83ee113eSDavid van Moolenbroek dmalloc_reuse (rval, file, line, 1);
442*83ee113eSDavid van Moolenbroek } else {
443*83ee113eSDavid van Moolenbroek rval = dmalloc (sizeof (struct expression), file, line);
444*83ee113eSDavid van Moolenbroek if (!rval)
445*83ee113eSDavid van Moolenbroek return 0;
446*83ee113eSDavid van Moolenbroek }
447*83ee113eSDavid van Moolenbroek memset (rval, 0, sizeof *rval);
448*83ee113eSDavid van Moolenbroek return expression_reference (cptr, rval, file, line);
449*83ee113eSDavid van Moolenbroek }
450*83ee113eSDavid van Moolenbroek
expression_reference(ptr,src,file,line)451*83ee113eSDavid van Moolenbroek int expression_reference (ptr, src, file, line)
452*83ee113eSDavid van Moolenbroek struct expression **ptr;
453*83ee113eSDavid van Moolenbroek struct expression *src;
454*83ee113eSDavid van Moolenbroek const char *file;
455*83ee113eSDavid van Moolenbroek int line;
456*83ee113eSDavid van Moolenbroek {
457*83ee113eSDavid van Moolenbroek if (!ptr) {
458*83ee113eSDavid van Moolenbroek log_error ("%s(%d): null pointer", file, line);
459*83ee113eSDavid van Moolenbroek #if defined (POINTER_DEBUG)
460*83ee113eSDavid van Moolenbroek abort ();
461*83ee113eSDavid van Moolenbroek #else
462*83ee113eSDavid van Moolenbroek return 0;
463*83ee113eSDavid van Moolenbroek #endif
464*83ee113eSDavid van Moolenbroek }
465*83ee113eSDavid van Moolenbroek if (*ptr) {
466*83ee113eSDavid van Moolenbroek log_error ("%s(%d): non-null pointer", file, line);
467*83ee113eSDavid van Moolenbroek #if defined (POINTER_DEBUG)
468*83ee113eSDavid van Moolenbroek abort ();
469*83ee113eSDavid van Moolenbroek #else
470*83ee113eSDavid van Moolenbroek *ptr = (struct expression *)0;
471*83ee113eSDavid van Moolenbroek #endif
472*83ee113eSDavid van Moolenbroek }
473*83ee113eSDavid van Moolenbroek *ptr = src;
474*83ee113eSDavid van Moolenbroek src -> refcnt++;
475*83ee113eSDavid van Moolenbroek rc_register (file, line, ptr, src, src -> refcnt, 0, RC_MISC);
476*83ee113eSDavid van Moolenbroek return 1;
477*83ee113eSDavid van Moolenbroek }
478*83ee113eSDavid van Moolenbroek
free_expression(expr,file,line)479*83ee113eSDavid van Moolenbroek void free_expression (expr, file, line)
480*83ee113eSDavid van Moolenbroek struct expression *expr;
481*83ee113eSDavid van Moolenbroek const char *file;
482*83ee113eSDavid van Moolenbroek int line;
483*83ee113eSDavid van Moolenbroek {
484*83ee113eSDavid van Moolenbroek expr -> data.not = free_expressions;
485*83ee113eSDavid van Moolenbroek free_expressions = expr;
486*83ee113eSDavid van Moolenbroek dmalloc_reuse (free_expressions, __FILE__, __LINE__, 0);
487*83ee113eSDavid van Moolenbroek }
488*83ee113eSDavid van Moolenbroek
489*83ee113eSDavid van Moolenbroek #if defined (DEBUG_MEMORY_LEAKAGE) || \
490*83ee113eSDavid van Moolenbroek defined (DEBUG_MEMORY_LEAKAGE_ON_EXIT)
relinquish_free_expressions()491*83ee113eSDavid van Moolenbroek void relinquish_free_expressions ()
492*83ee113eSDavid van Moolenbroek {
493*83ee113eSDavid van Moolenbroek struct expression *e, *n;
494*83ee113eSDavid van Moolenbroek
495*83ee113eSDavid van Moolenbroek for (e = free_expressions; e; e = n) {
496*83ee113eSDavid van Moolenbroek n = e -> data.not;
497*83ee113eSDavid van Moolenbroek dfree (e, MDL);
498*83ee113eSDavid van Moolenbroek }
499*83ee113eSDavid van Moolenbroek free_expressions = (struct expression *)0;
500*83ee113eSDavid van Moolenbroek }
501*83ee113eSDavid van Moolenbroek #endif
502*83ee113eSDavid van Moolenbroek
503*83ee113eSDavid van Moolenbroek struct binding_value *free_binding_values;
504*83ee113eSDavid van Moolenbroek
binding_value_allocate(cptr,file,line)505*83ee113eSDavid van Moolenbroek int binding_value_allocate (cptr, file, line)
506*83ee113eSDavid van Moolenbroek struct binding_value **cptr;
507*83ee113eSDavid van Moolenbroek const char *file;
508*83ee113eSDavid van Moolenbroek int line;
509*83ee113eSDavid van Moolenbroek {
510*83ee113eSDavid van Moolenbroek struct binding_value *rval;
511*83ee113eSDavid van Moolenbroek
512*83ee113eSDavid van Moolenbroek if (free_binding_values) {
513*83ee113eSDavid van Moolenbroek rval = free_binding_values;
514*83ee113eSDavid van Moolenbroek free_binding_values = rval -> value.bv;
515*83ee113eSDavid van Moolenbroek dmalloc_reuse (rval, file, line, 1);
516*83ee113eSDavid van Moolenbroek } else {
517*83ee113eSDavid van Moolenbroek rval = dmalloc (sizeof (struct binding_value), file, line);
518*83ee113eSDavid van Moolenbroek if (!rval)
519*83ee113eSDavid van Moolenbroek return 0;
520*83ee113eSDavid van Moolenbroek }
521*83ee113eSDavid van Moolenbroek memset (rval, 0, sizeof *rval);
522*83ee113eSDavid van Moolenbroek return binding_value_reference (cptr, rval, file, line);
523*83ee113eSDavid van Moolenbroek }
524*83ee113eSDavid van Moolenbroek
binding_value_reference(ptr,src,file,line)525*83ee113eSDavid van Moolenbroek int binding_value_reference (ptr, src, file, line)
526*83ee113eSDavid van Moolenbroek struct binding_value **ptr;
527*83ee113eSDavid van Moolenbroek struct binding_value *src;
528*83ee113eSDavid van Moolenbroek const char *file;
529*83ee113eSDavid van Moolenbroek int line;
530*83ee113eSDavid van Moolenbroek {
531*83ee113eSDavid van Moolenbroek if (!ptr) {
532*83ee113eSDavid van Moolenbroek log_error ("%s(%d): null pointer", file, line);
533*83ee113eSDavid van Moolenbroek #if defined (POINTER_DEBUG)
534*83ee113eSDavid van Moolenbroek abort ();
535*83ee113eSDavid van Moolenbroek #else
536*83ee113eSDavid van Moolenbroek return 0;
537*83ee113eSDavid van Moolenbroek #endif
538*83ee113eSDavid van Moolenbroek }
539*83ee113eSDavid van Moolenbroek if (*ptr) {
540*83ee113eSDavid van Moolenbroek log_error ("%s(%d): non-null pointer", file, line);
541*83ee113eSDavid van Moolenbroek #if defined (POINTER_DEBUG)
542*83ee113eSDavid van Moolenbroek abort ();
543*83ee113eSDavid van Moolenbroek #else
544*83ee113eSDavid van Moolenbroek *ptr = (struct binding_value *)0;
545*83ee113eSDavid van Moolenbroek #endif
546*83ee113eSDavid van Moolenbroek }
547*83ee113eSDavid van Moolenbroek *ptr = src;
548*83ee113eSDavid van Moolenbroek src -> refcnt++;
549*83ee113eSDavid van Moolenbroek rc_register (file, line, ptr, src, src -> refcnt, 0, RC_MISC);
550*83ee113eSDavid van Moolenbroek return 1;
551*83ee113eSDavid van Moolenbroek }
552*83ee113eSDavid van Moolenbroek
free_binding_value(bv,file,line)553*83ee113eSDavid van Moolenbroek void free_binding_value (bv, file, line)
554*83ee113eSDavid van Moolenbroek struct binding_value *bv;
555*83ee113eSDavid van Moolenbroek const char *file;
556*83ee113eSDavid van Moolenbroek int line;
557*83ee113eSDavid van Moolenbroek {
558*83ee113eSDavid van Moolenbroek bv -> value.bv = free_binding_values;
559*83ee113eSDavid van Moolenbroek free_binding_values = bv;
560*83ee113eSDavid van Moolenbroek dmalloc_reuse (free_binding_values, (char *)0, 0, 0);
561*83ee113eSDavid van Moolenbroek }
562*83ee113eSDavid van Moolenbroek
563*83ee113eSDavid van Moolenbroek #if defined (DEBUG_MEMORY_LEAKAGE) || \
564*83ee113eSDavid van Moolenbroek defined (DEBUG_MEMORY_LEAKAGE_ON_EXIT)
relinquish_free_binding_values()565*83ee113eSDavid van Moolenbroek void relinquish_free_binding_values ()
566*83ee113eSDavid van Moolenbroek {
567*83ee113eSDavid van Moolenbroek struct binding_value *b, *n;
568*83ee113eSDavid van Moolenbroek
569*83ee113eSDavid van Moolenbroek for (b = free_binding_values; b; b = n) {
570*83ee113eSDavid van Moolenbroek n = b -> value.bv;
571*83ee113eSDavid van Moolenbroek dfree (b, MDL);
572*83ee113eSDavid van Moolenbroek }
573*83ee113eSDavid van Moolenbroek free_binding_values = (struct binding_value *)0;
574*83ee113eSDavid van Moolenbroek }
575*83ee113eSDavid van Moolenbroek #endif
576*83ee113eSDavid van Moolenbroek
fundef_allocate(cptr,file,line)577*83ee113eSDavid van Moolenbroek int fundef_allocate (cptr, file, line)
578*83ee113eSDavid van Moolenbroek struct fundef **cptr;
579*83ee113eSDavid van Moolenbroek const char *file;
580*83ee113eSDavid van Moolenbroek int line;
581*83ee113eSDavid van Moolenbroek {
582*83ee113eSDavid van Moolenbroek struct fundef *rval;
583*83ee113eSDavid van Moolenbroek
584*83ee113eSDavid van Moolenbroek rval = dmalloc (sizeof (struct fundef), file, line);
585*83ee113eSDavid van Moolenbroek if (!rval)
586*83ee113eSDavid van Moolenbroek return 0;
587*83ee113eSDavid van Moolenbroek memset (rval, 0, sizeof *rval);
588*83ee113eSDavid van Moolenbroek return fundef_reference (cptr, rval, file, line);
589*83ee113eSDavid van Moolenbroek }
590*83ee113eSDavid van Moolenbroek
fundef_reference(ptr,src,file,line)591*83ee113eSDavid van Moolenbroek int fundef_reference (ptr, src, file, line)
592*83ee113eSDavid van Moolenbroek struct fundef **ptr;
593*83ee113eSDavid van Moolenbroek struct fundef *src;
594*83ee113eSDavid van Moolenbroek const char *file;
595*83ee113eSDavid van Moolenbroek int line;
596*83ee113eSDavid van Moolenbroek {
597*83ee113eSDavid van Moolenbroek if (!ptr) {
598*83ee113eSDavid van Moolenbroek log_error ("%s(%d): null pointer", file, line);
599*83ee113eSDavid van Moolenbroek #if defined (POINTER_DEBUG)
600*83ee113eSDavid van Moolenbroek abort ();
601*83ee113eSDavid van Moolenbroek #else
602*83ee113eSDavid van Moolenbroek return 0;
603*83ee113eSDavid van Moolenbroek #endif
604*83ee113eSDavid van Moolenbroek }
605*83ee113eSDavid van Moolenbroek if (*ptr) {
606*83ee113eSDavid van Moolenbroek log_error ("%s(%d): non-null pointer", file, line);
607*83ee113eSDavid van Moolenbroek #if defined (POINTER_DEBUG)
608*83ee113eSDavid van Moolenbroek abort ();
609*83ee113eSDavid van Moolenbroek #else
610*83ee113eSDavid van Moolenbroek *ptr = (struct fundef *)0;
611*83ee113eSDavid van Moolenbroek #endif
612*83ee113eSDavid van Moolenbroek }
613*83ee113eSDavid van Moolenbroek *ptr = src;
614*83ee113eSDavid van Moolenbroek src -> refcnt++;
615*83ee113eSDavid van Moolenbroek rc_register (file, line, ptr, src, src -> refcnt, 0, RC_MISC);
616*83ee113eSDavid van Moolenbroek return 1;
617*83ee113eSDavid van Moolenbroek }
618*83ee113eSDavid van Moolenbroek
619*83ee113eSDavid van Moolenbroek struct option_cache *free_option_caches;
620*83ee113eSDavid van Moolenbroek
621*83ee113eSDavid van Moolenbroek #if defined (DEBUG_MEMORY_LEAKAGE) || \
622*83ee113eSDavid van Moolenbroek defined (DEBUG_MEMORY_LEAKAGE_ON_EXIT)
relinquish_free_option_caches()623*83ee113eSDavid van Moolenbroek void relinquish_free_option_caches ()
624*83ee113eSDavid van Moolenbroek {
625*83ee113eSDavid van Moolenbroek struct option_cache *o, *n;
626*83ee113eSDavid van Moolenbroek
627*83ee113eSDavid van Moolenbroek for (o = free_option_caches; o; o = n) {
628*83ee113eSDavid van Moolenbroek n = (struct option_cache *)(o -> expression);
629*83ee113eSDavid van Moolenbroek dfree (o, MDL);
630*83ee113eSDavid van Moolenbroek }
631*83ee113eSDavid van Moolenbroek free_option_caches = (struct option_cache *)0;
632*83ee113eSDavid van Moolenbroek }
633*83ee113eSDavid van Moolenbroek #endif
634*83ee113eSDavid van Moolenbroek
option_cache_allocate(cptr,file,line)635*83ee113eSDavid van Moolenbroek int option_cache_allocate (cptr, file, line)
636*83ee113eSDavid van Moolenbroek struct option_cache **cptr;
637*83ee113eSDavid van Moolenbroek const char *file;
638*83ee113eSDavid van Moolenbroek int line;
639*83ee113eSDavid van Moolenbroek {
640*83ee113eSDavid van Moolenbroek struct option_cache *rval;
641*83ee113eSDavid van Moolenbroek
642*83ee113eSDavid van Moolenbroek if (free_option_caches) {
643*83ee113eSDavid van Moolenbroek rval = free_option_caches;
644*83ee113eSDavid van Moolenbroek free_option_caches =
645*83ee113eSDavid van Moolenbroek (struct option_cache *)(rval -> expression);
646*83ee113eSDavid van Moolenbroek dmalloc_reuse (rval, file, line, 0);
647*83ee113eSDavid van Moolenbroek } else {
648*83ee113eSDavid van Moolenbroek rval = dmalloc (sizeof (struct option_cache), file, line);
649*83ee113eSDavid van Moolenbroek if (!rval)
650*83ee113eSDavid van Moolenbroek return 0;
651*83ee113eSDavid van Moolenbroek }
652*83ee113eSDavid van Moolenbroek memset (rval, 0, sizeof *rval);
653*83ee113eSDavid van Moolenbroek return option_cache_reference (cptr, rval, file, line);
654*83ee113eSDavid van Moolenbroek }
655*83ee113eSDavid van Moolenbroek
option_cache_reference(ptr,src,file,line)656*83ee113eSDavid van Moolenbroek int option_cache_reference (ptr, src, file, line)
657*83ee113eSDavid van Moolenbroek struct option_cache **ptr;
658*83ee113eSDavid van Moolenbroek struct option_cache *src;
659*83ee113eSDavid van Moolenbroek const char *file;
660*83ee113eSDavid van Moolenbroek int line;
661*83ee113eSDavid van Moolenbroek {
662*83ee113eSDavid van Moolenbroek if (!ptr) {
663*83ee113eSDavid van Moolenbroek log_error ("%s(%d): null pointer", file, line);
664*83ee113eSDavid van Moolenbroek #if defined (POINTER_DEBUG)
665*83ee113eSDavid van Moolenbroek abort ();
666*83ee113eSDavid van Moolenbroek #else
667*83ee113eSDavid van Moolenbroek return 0;
668*83ee113eSDavid van Moolenbroek #endif
669*83ee113eSDavid van Moolenbroek }
670*83ee113eSDavid van Moolenbroek if (*ptr) {
671*83ee113eSDavid van Moolenbroek log_error ("%s(%d): non-null pointer", file, line);
672*83ee113eSDavid van Moolenbroek #if defined (POINTER_DEBUG)
673*83ee113eSDavid van Moolenbroek abort ();
674*83ee113eSDavid van Moolenbroek #else
675*83ee113eSDavid van Moolenbroek *ptr = (struct option_cache *)0;
676*83ee113eSDavid van Moolenbroek #endif
677*83ee113eSDavid van Moolenbroek }
678*83ee113eSDavid van Moolenbroek *ptr = src;
679*83ee113eSDavid van Moolenbroek src -> refcnt++;
680*83ee113eSDavid van Moolenbroek rc_register (file, line, ptr, src, src -> refcnt, 0, RC_MISC);
681*83ee113eSDavid van Moolenbroek return 1;
682*83ee113eSDavid van Moolenbroek }
683*83ee113eSDavid van Moolenbroek
buffer_allocate(ptr,len,file,line)684*83ee113eSDavid van Moolenbroek int buffer_allocate (ptr, len, file, line)
685*83ee113eSDavid van Moolenbroek struct buffer **ptr;
686*83ee113eSDavid van Moolenbroek unsigned len;
687*83ee113eSDavid van Moolenbroek const char *file;
688*83ee113eSDavid van Moolenbroek int line;
689*83ee113eSDavid van Moolenbroek {
690*83ee113eSDavid van Moolenbroek struct buffer *bp;
691*83ee113eSDavid van Moolenbroek
692*83ee113eSDavid van Moolenbroek /* XXXSK: should check for bad ptr values, otherwise we
693*83ee113eSDavid van Moolenbroek leak memory if they are wrong */
694*83ee113eSDavid van Moolenbroek bp = dmalloc (len + sizeof *bp, file, line);
695*83ee113eSDavid van Moolenbroek if (!bp)
696*83ee113eSDavid van Moolenbroek return 0;
697*83ee113eSDavid van Moolenbroek /* XXXSK: both of these initializations are unnecessary */
698*83ee113eSDavid van Moolenbroek memset (bp, 0, sizeof *bp);
699*83ee113eSDavid van Moolenbroek bp -> refcnt = 0;
700*83ee113eSDavid van Moolenbroek return buffer_reference (ptr, bp, file, line);
701*83ee113eSDavid van Moolenbroek }
702*83ee113eSDavid van Moolenbroek
buffer_reference(ptr,bp,file,line)703*83ee113eSDavid van Moolenbroek int buffer_reference (ptr, bp, file, line)
704*83ee113eSDavid van Moolenbroek struct buffer **ptr;
705*83ee113eSDavid van Moolenbroek struct buffer *bp;
706*83ee113eSDavid van Moolenbroek const char *file;
707*83ee113eSDavid van Moolenbroek int line;
708*83ee113eSDavid van Moolenbroek {
709*83ee113eSDavid van Moolenbroek if (!ptr) {
710*83ee113eSDavid van Moolenbroek log_error ("%s(%d): null pointer", file, line);
711*83ee113eSDavid van Moolenbroek #if defined (POINTER_DEBUG)
712*83ee113eSDavid van Moolenbroek abort ();
713*83ee113eSDavid van Moolenbroek #else
714*83ee113eSDavid van Moolenbroek return 0;
715*83ee113eSDavid van Moolenbroek #endif
716*83ee113eSDavid van Moolenbroek }
717*83ee113eSDavid van Moolenbroek if (*ptr) {
718*83ee113eSDavid van Moolenbroek log_error ("%s(%d): non-null pointer", file, line);
719*83ee113eSDavid van Moolenbroek #if defined (POINTER_DEBUG)
720*83ee113eSDavid van Moolenbroek abort ();
721*83ee113eSDavid van Moolenbroek #else
722*83ee113eSDavid van Moolenbroek *ptr = (struct buffer *)0;
723*83ee113eSDavid van Moolenbroek #endif
724*83ee113eSDavid van Moolenbroek }
725*83ee113eSDavid van Moolenbroek *ptr = bp;
726*83ee113eSDavid van Moolenbroek bp -> refcnt++;
727*83ee113eSDavid van Moolenbroek rc_register (file, line, ptr, bp, bp -> refcnt, 0, RC_MISC);
728*83ee113eSDavid van Moolenbroek return 1;
729*83ee113eSDavid van Moolenbroek }
730*83ee113eSDavid van Moolenbroek
buffer_dereference(ptr,file,line)731*83ee113eSDavid van Moolenbroek int buffer_dereference (ptr, file, line)
732*83ee113eSDavid van Moolenbroek struct buffer **ptr;
733*83ee113eSDavid van Moolenbroek const char *file;
734*83ee113eSDavid van Moolenbroek int line;
735*83ee113eSDavid van Moolenbroek {
736*83ee113eSDavid van Moolenbroek if (!ptr) {
737*83ee113eSDavid van Moolenbroek log_error ("%s(%d): null pointer", file, line);
738*83ee113eSDavid van Moolenbroek #if defined (POINTER_DEBUG)
739*83ee113eSDavid van Moolenbroek abort ();
740*83ee113eSDavid van Moolenbroek #else
741*83ee113eSDavid van Moolenbroek return 0;
742*83ee113eSDavid van Moolenbroek #endif
743*83ee113eSDavid van Moolenbroek }
744*83ee113eSDavid van Moolenbroek
745*83ee113eSDavid van Moolenbroek if (!*ptr) {
746*83ee113eSDavid van Moolenbroek log_error ("%s(%d): null pointer", file, line);
747*83ee113eSDavid van Moolenbroek #if defined (POINTER_DEBUG)
748*83ee113eSDavid van Moolenbroek abort ();
749*83ee113eSDavid van Moolenbroek #else
750*83ee113eSDavid van Moolenbroek return 0;
751*83ee113eSDavid van Moolenbroek #endif
752*83ee113eSDavid van Moolenbroek }
753*83ee113eSDavid van Moolenbroek
754*83ee113eSDavid van Moolenbroek (*ptr) -> refcnt--;
755*83ee113eSDavid van Moolenbroek rc_register (file, line, ptr, *ptr, (*ptr) -> refcnt, 1, RC_MISC);
756*83ee113eSDavid van Moolenbroek if (!(*ptr) -> refcnt) {
757*83ee113eSDavid van Moolenbroek dfree ((*ptr), file, line);
758*83ee113eSDavid van Moolenbroek } else if ((*ptr) -> refcnt < 0) {
759*83ee113eSDavid van Moolenbroek log_error ("%s(%d): negative refcnt!", file, line);
760*83ee113eSDavid van Moolenbroek #if defined (DEBUG_RC_HISTORY)
761*83ee113eSDavid van Moolenbroek dump_rc_history (*ptr);
762*83ee113eSDavid van Moolenbroek #endif
763*83ee113eSDavid van Moolenbroek #if defined (POINTER_DEBUG)
764*83ee113eSDavid van Moolenbroek abort ();
765*83ee113eSDavid van Moolenbroek #else
766*83ee113eSDavid van Moolenbroek return 0;
767*83ee113eSDavid van Moolenbroek #endif
768*83ee113eSDavid van Moolenbroek }
769*83ee113eSDavid van Moolenbroek *ptr = (struct buffer *)0;
770*83ee113eSDavid van Moolenbroek return 1;
771*83ee113eSDavid van Moolenbroek }
772*83ee113eSDavid van Moolenbroek
dns_host_entry_allocate(ptr,hostname,file,line)773*83ee113eSDavid van Moolenbroek int dns_host_entry_allocate (ptr, hostname, file, line)
774*83ee113eSDavid van Moolenbroek struct dns_host_entry **ptr;
775*83ee113eSDavid van Moolenbroek const char *hostname;
776*83ee113eSDavid van Moolenbroek const char *file;
777*83ee113eSDavid van Moolenbroek int line;
778*83ee113eSDavid van Moolenbroek {
779*83ee113eSDavid van Moolenbroek struct dns_host_entry *bp;
780*83ee113eSDavid van Moolenbroek
781*83ee113eSDavid van Moolenbroek bp = dmalloc (strlen (hostname) + sizeof *bp, file, line);
782*83ee113eSDavid van Moolenbroek if (!bp)
783*83ee113eSDavid van Moolenbroek return 0;
784*83ee113eSDavid van Moolenbroek memset (bp, 0, sizeof *bp);
785*83ee113eSDavid van Moolenbroek bp -> refcnt = 0;
786*83ee113eSDavid van Moolenbroek strcpy (bp -> hostname, hostname);
787*83ee113eSDavid van Moolenbroek return dns_host_entry_reference (ptr, bp, file, line);
788*83ee113eSDavid van Moolenbroek }
789*83ee113eSDavid van Moolenbroek
dns_host_entry_reference(ptr,bp,file,line)790*83ee113eSDavid van Moolenbroek int dns_host_entry_reference (ptr, bp, file, line)
791*83ee113eSDavid van Moolenbroek struct dns_host_entry **ptr;
792*83ee113eSDavid van Moolenbroek struct dns_host_entry *bp;
793*83ee113eSDavid van Moolenbroek const char *file;
794*83ee113eSDavid van Moolenbroek int line;
795*83ee113eSDavid van Moolenbroek {
796*83ee113eSDavid van Moolenbroek if (!ptr) {
797*83ee113eSDavid van Moolenbroek log_error ("%s(%d): null pointer", file, line);
798*83ee113eSDavid van Moolenbroek #if defined (POINTER_DEBUG)
799*83ee113eSDavid van Moolenbroek abort ();
800*83ee113eSDavid van Moolenbroek #else
801*83ee113eSDavid van Moolenbroek return 0;
802*83ee113eSDavid van Moolenbroek #endif
803*83ee113eSDavid van Moolenbroek }
804*83ee113eSDavid van Moolenbroek if (*ptr) {
805*83ee113eSDavid van Moolenbroek log_error ("%s(%d): non-null pointer", file, line);
806*83ee113eSDavid van Moolenbroek #if defined (POINTER_DEBUG)
807*83ee113eSDavid van Moolenbroek abort ();
808*83ee113eSDavid van Moolenbroek #else
809*83ee113eSDavid van Moolenbroek *ptr = (struct dns_host_entry *)0;
810*83ee113eSDavid van Moolenbroek #endif
811*83ee113eSDavid van Moolenbroek }
812*83ee113eSDavid van Moolenbroek *ptr = bp;
813*83ee113eSDavid van Moolenbroek bp -> refcnt++;
814*83ee113eSDavid van Moolenbroek rc_register (file, line, ptr, bp, bp -> refcnt, 0, RC_MISC);
815*83ee113eSDavid van Moolenbroek return 1;
816*83ee113eSDavid van Moolenbroek }
817*83ee113eSDavid van Moolenbroek
dns_host_entry_dereference(ptr,file,line)818*83ee113eSDavid van Moolenbroek int dns_host_entry_dereference (ptr, file, line)
819*83ee113eSDavid van Moolenbroek struct dns_host_entry **ptr;
820*83ee113eSDavid van Moolenbroek const char *file;
821*83ee113eSDavid van Moolenbroek int line;
822*83ee113eSDavid van Moolenbroek {
823*83ee113eSDavid van Moolenbroek if (!ptr || !*ptr) {
824*83ee113eSDavid van Moolenbroek log_error ("%s(%d): null pointer", file, line);
825*83ee113eSDavid van Moolenbroek #if defined (POINTER_DEBUG)
826*83ee113eSDavid van Moolenbroek abort ();
827*83ee113eSDavid van Moolenbroek #else
828*83ee113eSDavid van Moolenbroek return 0;
829*83ee113eSDavid van Moolenbroek #endif
830*83ee113eSDavid van Moolenbroek }
831*83ee113eSDavid van Moolenbroek
832*83ee113eSDavid van Moolenbroek (*ptr)->refcnt--;
833*83ee113eSDavid van Moolenbroek rc_register (file, line, ptr, *ptr, (*ptr)->refcnt, 1, RC_MISC);
834*83ee113eSDavid van Moolenbroek if ((*ptr)->refcnt == 0) {
835*83ee113eSDavid van Moolenbroek dfree ((*ptr), file, line);
836*83ee113eSDavid van Moolenbroek } else if ((*ptr)->refcnt < 0) {
837*83ee113eSDavid van Moolenbroek log_error ("%s(%d): negative refcnt!", file, line);
838*83ee113eSDavid van Moolenbroek #if defined (DEBUG_RC_HISTORY)
839*83ee113eSDavid van Moolenbroek dump_rc_history (*ptr);
840*83ee113eSDavid van Moolenbroek #endif
841*83ee113eSDavid van Moolenbroek #if defined (POINTER_DEBUG)
842*83ee113eSDavid van Moolenbroek abort ();
843*83ee113eSDavid van Moolenbroek #else
844*83ee113eSDavid van Moolenbroek return 0;
845*83ee113eSDavid van Moolenbroek #endif
846*83ee113eSDavid van Moolenbroek }
847*83ee113eSDavid van Moolenbroek *ptr = (struct dns_host_entry *)0;
848*83ee113eSDavid van Moolenbroek return 1;
849*83ee113eSDavid van Moolenbroek }
850*83ee113eSDavid van Moolenbroek
option_state_allocate(ptr,file,line)851*83ee113eSDavid van Moolenbroek int option_state_allocate (ptr, file, line)
852*83ee113eSDavid van Moolenbroek struct option_state **ptr;
853*83ee113eSDavid van Moolenbroek const char *file;
854*83ee113eSDavid van Moolenbroek int line;
855*83ee113eSDavid van Moolenbroek {
856*83ee113eSDavid van Moolenbroek unsigned size;
857*83ee113eSDavid van Moolenbroek
858*83ee113eSDavid van Moolenbroek if (!ptr) {
859*83ee113eSDavid van Moolenbroek log_error ("%s(%d): null pointer", file, line);
860*83ee113eSDavid van Moolenbroek #if defined (POINTER_DEBUG)
861*83ee113eSDavid van Moolenbroek abort ();
862*83ee113eSDavid van Moolenbroek #else
863*83ee113eSDavid van Moolenbroek return 0;
864*83ee113eSDavid van Moolenbroek #endif
865*83ee113eSDavid van Moolenbroek }
866*83ee113eSDavid van Moolenbroek if (*ptr) {
867*83ee113eSDavid van Moolenbroek log_error ("%s(%d): non-null pointer", file, line);
868*83ee113eSDavid van Moolenbroek #if defined (POINTER_DEBUG)
869*83ee113eSDavid van Moolenbroek abort ();
870*83ee113eSDavid van Moolenbroek #else
871*83ee113eSDavid van Moolenbroek *ptr = (struct option_state *)0;
872*83ee113eSDavid van Moolenbroek #endif
873*83ee113eSDavid van Moolenbroek }
874*83ee113eSDavid van Moolenbroek
875*83ee113eSDavid van Moolenbroek size = sizeof **ptr + (universe_count - 1) * sizeof (void *);
876*83ee113eSDavid van Moolenbroek *ptr = dmalloc (size, file, line);
877*83ee113eSDavid van Moolenbroek if (*ptr) {
878*83ee113eSDavid van Moolenbroek memset (*ptr, 0, size);
879*83ee113eSDavid van Moolenbroek (*ptr) -> universe_count = universe_count;
880*83ee113eSDavid van Moolenbroek (*ptr) -> refcnt = 1;
881*83ee113eSDavid van Moolenbroek rc_register (file, line,
882*83ee113eSDavid van Moolenbroek ptr, *ptr, (*ptr) -> refcnt, 0, RC_MISC);
883*83ee113eSDavid van Moolenbroek return 1;
884*83ee113eSDavid van Moolenbroek }
885*83ee113eSDavid van Moolenbroek return 0;
886*83ee113eSDavid van Moolenbroek }
887*83ee113eSDavid van Moolenbroek
option_state_reference(ptr,bp,file,line)888*83ee113eSDavid van Moolenbroek int option_state_reference (ptr, bp, file, line)
889*83ee113eSDavid van Moolenbroek struct option_state **ptr;
890*83ee113eSDavid van Moolenbroek struct option_state *bp;
891*83ee113eSDavid van Moolenbroek const char *file;
892*83ee113eSDavid van Moolenbroek int line;
893*83ee113eSDavid van Moolenbroek {
894*83ee113eSDavid van Moolenbroek if (!ptr) {
895*83ee113eSDavid van Moolenbroek log_error ("%s(%d): null pointer", file, line);
896*83ee113eSDavid van Moolenbroek #if defined (POINTER_DEBUG)
897*83ee113eSDavid van Moolenbroek abort ();
898*83ee113eSDavid van Moolenbroek #else
899*83ee113eSDavid van Moolenbroek return 0;
900*83ee113eSDavid van Moolenbroek #endif
901*83ee113eSDavid van Moolenbroek }
902*83ee113eSDavid van Moolenbroek if (*ptr) {
903*83ee113eSDavid van Moolenbroek log_error ("%s(%d): non-null pointer", file, line);
904*83ee113eSDavid van Moolenbroek #if defined (POINTER_DEBUG)
905*83ee113eSDavid van Moolenbroek abort ();
906*83ee113eSDavid van Moolenbroek #else
907*83ee113eSDavid van Moolenbroek *ptr = (struct option_state *)0;
908*83ee113eSDavid van Moolenbroek #endif
909*83ee113eSDavid van Moolenbroek }
910*83ee113eSDavid van Moolenbroek *ptr = bp;
911*83ee113eSDavid van Moolenbroek bp -> refcnt++;
912*83ee113eSDavid van Moolenbroek rc_register (file, line, ptr, bp, bp -> refcnt, 0, RC_MISC);
913*83ee113eSDavid van Moolenbroek return 1;
914*83ee113eSDavid van Moolenbroek }
915*83ee113eSDavid van Moolenbroek
option_state_dereference(ptr,file,line)916*83ee113eSDavid van Moolenbroek int option_state_dereference (ptr, file, line)
917*83ee113eSDavid van Moolenbroek struct option_state **ptr;
918*83ee113eSDavid van Moolenbroek const char *file;
919*83ee113eSDavid van Moolenbroek int line;
920*83ee113eSDavid van Moolenbroek {
921*83ee113eSDavid van Moolenbroek int i;
922*83ee113eSDavid van Moolenbroek struct option_state *options;
923*83ee113eSDavid van Moolenbroek
924*83ee113eSDavid van Moolenbroek if (!ptr || !*ptr) {
925*83ee113eSDavid van Moolenbroek log_error ("%s(%d): null pointer", file, line);
926*83ee113eSDavid van Moolenbroek #if defined (POINTER_DEBUG)
927*83ee113eSDavid van Moolenbroek abort ();
928*83ee113eSDavid van Moolenbroek #else
929*83ee113eSDavid van Moolenbroek return 0;
930*83ee113eSDavid van Moolenbroek #endif
931*83ee113eSDavid van Moolenbroek }
932*83ee113eSDavid van Moolenbroek
933*83ee113eSDavid van Moolenbroek options = *ptr;
934*83ee113eSDavid van Moolenbroek *ptr = (struct option_state *)0;
935*83ee113eSDavid van Moolenbroek --options -> refcnt;
936*83ee113eSDavid van Moolenbroek rc_register (file, line, ptr, options, options -> refcnt, 1, RC_MISC);
937*83ee113eSDavid van Moolenbroek if (options -> refcnt > 0)
938*83ee113eSDavid van Moolenbroek return 1;
939*83ee113eSDavid van Moolenbroek
940*83ee113eSDavid van Moolenbroek if (options -> refcnt < 0) {
941*83ee113eSDavid van Moolenbroek log_error ("%s(%d): negative refcnt!", file, line);
942*83ee113eSDavid van Moolenbroek #if defined (DEBUG_RC_HISTORY)
943*83ee113eSDavid van Moolenbroek dump_rc_history (options);
944*83ee113eSDavid van Moolenbroek #endif
945*83ee113eSDavid van Moolenbroek #if defined (POINTER_DEBUG)
946*83ee113eSDavid van Moolenbroek abort ();
947*83ee113eSDavid van Moolenbroek #else
948*83ee113eSDavid van Moolenbroek return 0;
949*83ee113eSDavid van Moolenbroek #endif
950*83ee113eSDavid van Moolenbroek }
951*83ee113eSDavid van Moolenbroek
952*83ee113eSDavid van Moolenbroek /* Loop through the per-universe state. */
953*83ee113eSDavid van Moolenbroek for (i = 0; i < options -> universe_count; i++)
954*83ee113eSDavid van Moolenbroek if (options -> universes [i] &&
955*83ee113eSDavid van Moolenbroek universes [i] -> option_state_dereference)
956*83ee113eSDavid van Moolenbroek ((*(universes [i] -> option_state_dereference))
957*83ee113eSDavid van Moolenbroek (universes [i], options, file, line));
958*83ee113eSDavid van Moolenbroek
959*83ee113eSDavid van Moolenbroek dfree (options, file, line);
960*83ee113eSDavid van Moolenbroek return 1;
961*83ee113eSDavid van Moolenbroek }
962*83ee113eSDavid van Moolenbroek
executable_statement_allocate(ptr,file,line)963*83ee113eSDavid van Moolenbroek int executable_statement_allocate (ptr, file, line)
964*83ee113eSDavid van Moolenbroek struct executable_statement **ptr;
965*83ee113eSDavid van Moolenbroek const char *file;
966*83ee113eSDavid van Moolenbroek int line;
967*83ee113eSDavid van Moolenbroek {
968*83ee113eSDavid van Moolenbroek struct executable_statement *bp;
969*83ee113eSDavid van Moolenbroek
970*83ee113eSDavid van Moolenbroek bp = dmalloc (sizeof *bp, file, line);
971*83ee113eSDavid van Moolenbroek if (!bp)
972*83ee113eSDavid van Moolenbroek return 0;
973*83ee113eSDavid van Moolenbroek memset (bp, 0, sizeof *bp);
974*83ee113eSDavid van Moolenbroek return executable_statement_reference (ptr, bp, file, line);
975*83ee113eSDavid van Moolenbroek }
976*83ee113eSDavid van Moolenbroek
executable_statement_reference(ptr,bp,file,line)977*83ee113eSDavid van Moolenbroek int executable_statement_reference (ptr, bp, file, line)
978*83ee113eSDavid van Moolenbroek struct executable_statement **ptr;
979*83ee113eSDavid van Moolenbroek struct executable_statement *bp;
980*83ee113eSDavid van Moolenbroek const char *file;
981*83ee113eSDavid van Moolenbroek int line;
982*83ee113eSDavid van Moolenbroek {
983*83ee113eSDavid van Moolenbroek if (!ptr) {
984*83ee113eSDavid van Moolenbroek log_error ("%s(%d): null pointer", file, line);
985*83ee113eSDavid van Moolenbroek #if defined (POINTER_DEBUG)
986*83ee113eSDavid van Moolenbroek abort ();
987*83ee113eSDavid van Moolenbroek #else
988*83ee113eSDavid van Moolenbroek return 0;
989*83ee113eSDavid van Moolenbroek #endif
990*83ee113eSDavid van Moolenbroek }
991*83ee113eSDavid van Moolenbroek if (*ptr) {
992*83ee113eSDavid van Moolenbroek log_error ("%s(%d): non-null pointer", file, line);
993*83ee113eSDavid van Moolenbroek #if defined (POINTER_DEBUG)
994*83ee113eSDavid van Moolenbroek abort ();
995*83ee113eSDavid van Moolenbroek #else
996*83ee113eSDavid van Moolenbroek *ptr = (struct executable_statement *)0;
997*83ee113eSDavid van Moolenbroek #endif
998*83ee113eSDavid van Moolenbroek }
999*83ee113eSDavid van Moolenbroek *ptr = bp;
1000*83ee113eSDavid van Moolenbroek bp -> refcnt++;
1001*83ee113eSDavid van Moolenbroek rc_register (file, line, ptr, bp, bp -> refcnt, 0, RC_MISC);
1002*83ee113eSDavid van Moolenbroek return 1;
1003*83ee113eSDavid van Moolenbroek }
1004*83ee113eSDavid van Moolenbroek
1005*83ee113eSDavid van Moolenbroek static struct packet *free_packets;
1006*83ee113eSDavid van Moolenbroek
1007*83ee113eSDavid van Moolenbroek #if defined (DEBUG_MEMORY_LEAKAGE) || \
1008*83ee113eSDavid van Moolenbroek defined (DEBUG_MEMORY_LEAKAGE_ON_EXIT)
relinquish_free_packets()1009*83ee113eSDavid van Moolenbroek void relinquish_free_packets ()
1010*83ee113eSDavid van Moolenbroek {
1011*83ee113eSDavid van Moolenbroek struct packet *p, *n;
1012*83ee113eSDavid van Moolenbroek for (p = free_packets; p; p = n) {
1013*83ee113eSDavid van Moolenbroek n = (struct packet *)(p -> raw);
1014*83ee113eSDavid van Moolenbroek dfree (p, MDL);
1015*83ee113eSDavid van Moolenbroek }
1016*83ee113eSDavid van Moolenbroek free_packets = (struct packet *)0;
1017*83ee113eSDavid van Moolenbroek }
1018*83ee113eSDavid van Moolenbroek #endif
1019*83ee113eSDavid van Moolenbroek
packet_allocate(ptr,file,line)1020*83ee113eSDavid van Moolenbroek int packet_allocate (ptr, file, line)
1021*83ee113eSDavid van Moolenbroek struct packet **ptr;
1022*83ee113eSDavid van Moolenbroek const char *file;
1023*83ee113eSDavid van Moolenbroek int line;
1024*83ee113eSDavid van Moolenbroek {
1025*83ee113eSDavid van Moolenbroek struct packet *p;
1026*83ee113eSDavid van Moolenbroek
1027*83ee113eSDavid van Moolenbroek if (!ptr) {
1028*83ee113eSDavid van Moolenbroek log_error ("%s(%d): null pointer", file, line);
1029*83ee113eSDavid van Moolenbroek #if defined (POINTER_DEBUG)
1030*83ee113eSDavid van Moolenbroek abort ();
1031*83ee113eSDavid van Moolenbroek #else
1032*83ee113eSDavid van Moolenbroek return 0;
1033*83ee113eSDavid van Moolenbroek #endif
1034*83ee113eSDavid van Moolenbroek }
1035*83ee113eSDavid van Moolenbroek if (*ptr) {
1036*83ee113eSDavid van Moolenbroek log_error ("%s(%d): non-null pointer", file, line);
1037*83ee113eSDavid van Moolenbroek #if defined (POINTER_DEBUG)
1038*83ee113eSDavid van Moolenbroek abort ();
1039*83ee113eSDavid van Moolenbroek #else
1040*83ee113eSDavid van Moolenbroek *ptr = (struct packet *)0;
1041*83ee113eSDavid van Moolenbroek #endif
1042*83ee113eSDavid van Moolenbroek }
1043*83ee113eSDavid van Moolenbroek
1044*83ee113eSDavid van Moolenbroek if (free_packets) {
1045*83ee113eSDavid van Moolenbroek p = free_packets;
1046*83ee113eSDavid van Moolenbroek free_packets = (struct packet *)(p -> raw);
1047*83ee113eSDavid van Moolenbroek dmalloc_reuse (p, file, line, 1);
1048*83ee113eSDavid van Moolenbroek } else {
1049*83ee113eSDavid van Moolenbroek p = dmalloc (sizeof *p, file, line);
1050*83ee113eSDavid van Moolenbroek }
1051*83ee113eSDavid van Moolenbroek if (p) {
1052*83ee113eSDavid van Moolenbroek memset (p, 0, sizeof *p);
1053*83ee113eSDavid van Moolenbroek return packet_reference (ptr, p, file, line);
1054*83ee113eSDavid van Moolenbroek }
1055*83ee113eSDavid van Moolenbroek return 0;
1056*83ee113eSDavid van Moolenbroek }
1057*83ee113eSDavid van Moolenbroek
packet_reference(ptr,bp,file,line)1058*83ee113eSDavid van Moolenbroek int packet_reference (ptr, bp, file, line)
1059*83ee113eSDavid van Moolenbroek struct packet **ptr;
1060*83ee113eSDavid van Moolenbroek struct packet *bp;
1061*83ee113eSDavid van Moolenbroek const char *file;
1062*83ee113eSDavid van Moolenbroek int line;
1063*83ee113eSDavid van Moolenbroek {
1064*83ee113eSDavid van Moolenbroek if (!ptr) {
1065*83ee113eSDavid van Moolenbroek log_error ("%s(%d): null pointer", file, line);
1066*83ee113eSDavid van Moolenbroek #if defined (POINTER_DEBUG)
1067*83ee113eSDavid van Moolenbroek abort ();
1068*83ee113eSDavid van Moolenbroek #else
1069*83ee113eSDavid van Moolenbroek return 0;
1070*83ee113eSDavid van Moolenbroek #endif
1071*83ee113eSDavid van Moolenbroek }
1072*83ee113eSDavid van Moolenbroek if (*ptr) {
1073*83ee113eSDavid van Moolenbroek log_error ("%s(%d): non-null pointer", file, line);
1074*83ee113eSDavid van Moolenbroek #if defined (POINTER_DEBUG)
1075*83ee113eSDavid van Moolenbroek abort ();
1076*83ee113eSDavid van Moolenbroek #else
1077*83ee113eSDavid van Moolenbroek *ptr = (struct packet *)0;
1078*83ee113eSDavid van Moolenbroek #endif
1079*83ee113eSDavid van Moolenbroek }
1080*83ee113eSDavid van Moolenbroek *ptr = bp;
1081*83ee113eSDavid van Moolenbroek bp -> refcnt++;
1082*83ee113eSDavid van Moolenbroek rc_register (file, line, ptr, bp, bp -> refcnt, 0, RC_MISC);
1083*83ee113eSDavid van Moolenbroek return 1;
1084*83ee113eSDavid van Moolenbroek }
1085*83ee113eSDavid van Moolenbroek
packet_dereference(ptr,file,line)1086*83ee113eSDavid van Moolenbroek int packet_dereference (ptr, file, line)
1087*83ee113eSDavid van Moolenbroek struct packet **ptr;
1088*83ee113eSDavid van Moolenbroek const char *file;
1089*83ee113eSDavid van Moolenbroek int line;
1090*83ee113eSDavid van Moolenbroek {
1091*83ee113eSDavid van Moolenbroek int i;
1092*83ee113eSDavid van Moolenbroek struct packet *packet;
1093*83ee113eSDavid van Moolenbroek
1094*83ee113eSDavid van Moolenbroek if (!ptr || !*ptr) {
1095*83ee113eSDavid van Moolenbroek log_error ("%s(%d): null pointer", file, line);
1096*83ee113eSDavid van Moolenbroek #if defined (POINTER_DEBUG)
1097*83ee113eSDavid van Moolenbroek abort ();
1098*83ee113eSDavid van Moolenbroek #else
1099*83ee113eSDavid van Moolenbroek return 0;
1100*83ee113eSDavid van Moolenbroek #endif
1101*83ee113eSDavid van Moolenbroek }
1102*83ee113eSDavid van Moolenbroek
1103*83ee113eSDavid van Moolenbroek packet = *ptr;
1104*83ee113eSDavid van Moolenbroek *ptr = (struct packet *)0;
1105*83ee113eSDavid van Moolenbroek --packet -> refcnt;
1106*83ee113eSDavid van Moolenbroek rc_register (file, line, ptr, packet, packet -> refcnt, 1, RC_MISC);
1107*83ee113eSDavid van Moolenbroek if (packet -> refcnt > 0)
1108*83ee113eSDavid van Moolenbroek return 1;
1109*83ee113eSDavid van Moolenbroek
1110*83ee113eSDavid van Moolenbroek if (packet -> refcnt < 0) {
1111*83ee113eSDavid van Moolenbroek log_error ("%s(%d): negative refcnt!", file, line);
1112*83ee113eSDavid van Moolenbroek #if defined (DEBUG_RC_HISTORY)
1113*83ee113eSDavid van Moolenbroek dump_rc_history (packet);
1114*83ee113eSDavid van Moolenbroek #endif
1115*83ee113eSDavid van Moolenbroek #if defined (POINTER_DEBUG)
1116*83ee113eSDavid van Moolenbroek abort ();
1117*83ee113eSDavid van Moolenbroek #else
1118*83ee113eSDavid van Moolenbroek return 0;
1119*83ee113eSDavid van Moolenbroek #endif
1120*83ee113eSDavid van Moolenbroek }
1121*83ee113eSDavid van Moolenbroek
1122*83ee113eSDavid van Moolenbroek if (packet -> options)
1123*83ee113eSDavid van Moolenbroek option_state_dereference (&packet -> options, file, line);
1124*83ee113eSDavid van Moolenbroek if (packet -> interface)
1125*83ee113eSDavid van Moolenbroek interface_dereference (&packet -> interface, MDL);
1126*83ee113eSDavid van Moolenbroek if (packet -> shared_network)
1127*83ee113eSDavid van Moolenbroek shared_network_dereference (&packet -> shared_network, MDL);
1128*83ee113eSDavid van Moolenbroek for (i = 0; i < packet -> class_count && i < PACKET_MAX_CLASSES; i++) {
1129*83ee113eSDavid van Moolenbroek if (packet -> classes [i])
1130*83ee113eSDavid van Moolenbroek omapi_object_dereference ((omapi_object_t **)
1131*83ee113eSDavid van Moolenbroek &packet -> classes [i], MDL);
1132*83ee113eSDavid van Moolenbroek }
1133*83ee113eSDavid van Moolenbroek packet -> raw = (struct dhcp_packet *)free_packets;
1134*83ee113eSDavid van Moolenbroek free_packets = packet;
1135*83ee113eSDavid van Moolenbroek dmalloc_reuse (free_packets, __FILE__, __LINE__, 0);
1136*83ee113eSDavid van Moolenbroek return 1;
1137*83ee113eSDavid van Moolenbroek }
1138*83ee113eSDavid van Moolenbroek
dns_zone_allocate(ptr,file,line)1139*83ee113eSDavid van Moolenbroek int dns_zone_allocate (ptr, file, line)
1140*83ee113eSDavid van Moolenbroek struct dns_zone **ptr;
1141*83ee113eSDavid van Moolenbroek const char *file;
1142*83ee113eSDavid van Moolenbroek int line;
1143*83ee113eSDavid van Moolenbroek {
1144*83ee113eSDavid van Moolenbroek struct dns_zone *d;
1145*83ee113eSDavid van Moolenbroek
1146*83ee113eSDavid van Moolenbroek if (!ptr) {
1147*83ee113eSDavid van Moolenbroek log_error ("%s(%d): null pointer", file, line);
1148*83ee113eSDavid van Moolenbroek #if defined (POINTER_DEBUG)
1149*83ee113eSDavid van Moolenbroek abort ();
1150*83ee113eSDavid van Moolenbroek #else
1151*83ee113eSDavid van Moolenbroek return 0;
1152*83ee113eSDavid van Moolenbroek #endif
1153*83ee113eSDavid van Moolenbroek }
1154*83ee113eSDavid van Moolenbroek if (*ptr) {
1155*83ee113eSDavid van Moolenbroek log_error ("%s(%d): non-null pointer", file, line);
1156*83ee113eSDavid van Moolenbroek #if defined (POINTER_DEBUG)
1157*83ee113eSDavid van Moolenbroek abort ();
1158*83ee113eSDavid van Moolenbroek #else
1159*83ee113eSDavid van Moolenbroek *ptr = (struct dns_zone *)0;
1160*83ee113eSDavid van Moolenbroek #endif
1161*83ee113eSDavid van Moolenbroek }
1162*83ee113eSDavid van Moolenbroek
1163*83ee113eSDavid van Moolenbroek d = dmalloc (sizeof *d, file, line);
1164*83ee113eSDavid van Moolenbroek if (d) {
1165*83ee113eSDavid van Moolenbroek memset (d, 0, sizeof *d);
1166*83ee113eSDavid van Moolenbroek return dns_zone_reference (ptr, d, file, line);
1167*83ee113eSDavid van Moolenbroek }
1168*83ee113eSDavid van Moolenbroek return 0;
1169*83ee113eSDavid van Moolenbroek }
1170*83ee113eSDavid van Moolenbroek
dns_zone_reference(ptr,bp,file,line)1171*83ee113eSDavid van Moolenbroek int dns_zone_reference (ptr, bp, file, line)
1172*83ee113eSDavid van Moolenbroek struct dns_zone **ptr;
1173*83ee113eSDavid van Moolenbroek struct dns_zone *bp;
1174*83ee113eSDavid van Moolenbroek const char *file;
1175*83ee113eSDavid van Moolenbroek int line;
1176*83ee113eSDavid van Moolenbroek {
1177*83ee113eSDavid van Moolenbroek if (!ptr) {
1178*83ee113eSDavid van Moolenbroek log_error ("%s(%d): null pointer", file, line);
1179*83ee113eSDavid van Moolenbroek #if defined (POINTER_DEBUG)
1180*83ee113eSDavid van Moolenbroek abort ();
1181*83ee113eSDavid van Moolenbroek #else
1182*83ee113eSDavid van Moolenbroek return 0;
1183*83ee113eSDavid van Moolenbroek #endif
1184*83ee113eSDavid van Moolenbroek }
1185*83ee113eSDavid van Moolenbroek if (*ptr) {
1186*83ee113eSDavid van Moolenbroek log_error ("%s(%d): non-null pointer", file, line);
1187*83ee113eSDavid van Moolenbroek #if defined (POINTER_DEBUG)
1188*83ee113eSDavid van Moolenbroek abort ();
1189*83ee113eSDavid van Moolenbroek #else
1190*83ee113eSDavid van Moolenbroek *ptr = (struct dns_zone *)0;
1191*83ee113eSDavid van Moolenbroek #endif
1192*83ee113eSDavid van Moolenbroek }
1193*83ee113eSDavid van Moolenbroek *ptr = bp;
1194*83ee113eSDavid van Moolenbroek bp -> refcnt++;
1195*83ee113eSDavid van Moolenbroek rc_register (file, line, ptr, bp, bp -> refcnt, 0, RC_MISC);
1196*83ee113eSDavid van Moolenbroek return 1;
1197*83ee113eSDavid van Moolenbroek }
1198*83ee113eSDavid van Moolenbroek
binding_scope_allocate(ptr,file,line)1199*83ee113eSDavid van Moolenbroek int binding_scope_allocate (ptr, file, line)
1200*83ee113eSDavid van Moolenbroek struct binding_scope **ptr;
1201*83ee113eSDavid van Moolenbroek const char *file;
1202*83ee113eSDavid van Moolenbroek int line;
1203*83ee113eSDavid van Moolenbroek {
1204*83ee113eSDavid van Moolenbroek struct binding_scope *bp;
1205*83ee113eSDavid van Moolenbroek
1206*83ee113eSDavid van Moolenbroek if (!ptr) {
1207*83ee113eSDavid van Moolenbroek log_error ("%s(%d): null pointer", file, line);
1208*83ee113eSDavid van Moolenbroek #if defined (POINTER_DEBUG)
1209*83ee113eSDavid van Moolenbroek abort ();
1210*83ee113eSDavid van Moolenbroek #else
1211*83ee113eSDavid van Moolenbroek return 0;
1212*83ee113eSDavid van Moolenbroek #endif
1213*83ee113eSDavid van Moolenbroek }
1214*83ee113eSDavid van Moolenbroek
1215*83ee113eSDavid van Moolenbroek if (*ptr) {
1216*83ee113eSDavid van Moolenbroek log_error ("%s(%d): non-null pointer", file, line);
1217*83ee113eSDavid van Moolenbroek #if defined (POINTER_DEBUG)
1218*83ee113eSDavid van Moolenbroek abort ();
1219*83ee113eSDavid van Moolenbroek #else
1220*83ee113eSDavid van Moolenbroek return 0;
1221*83ee113eSDavid van Moolenbroek #endif
1222*83ee113eSDavid van Moolenbroek }
1223*83ee113eSDavid van Moolenbroek
1224*83ee113eSDavid van Moolenbroek bp = dmalloc (sizeof *bp, file, line);
1225*83ee113eSDavid van Moolenbroek if (!bp)
1226*83ee113eSDavid van Moolenbroek return 0;
1227*83ee113eSDavid van Moolenbroek memset (bp, 0, sizeof *bp);
1228*83ee113eSDavid van Moolenbroek binding_scope_reference (ptr, bp, file, line);
1229*83ee113eSDavid van Moolenbroek return 1;
1230*83ee113eSDavid van Moolenbroek }
1231*83ee113eSDavid van Moolenbroek
binding_scope_reference(ptr,bp,file,line)1232*83ee113eSDavid van Moolenbroek int binding_scope_reference (ptr, bp, file, line)
1233*83ee113eSDavid van Moolenbroek struct binding_scope **ptr;
1234*83ee113eSDavid van Moolenbroek struct binding_scope *bp;
1235*83ee113eSDavid van Moolenbroek const char *file;
1236*83ee113eSDavid van Moolenbroek int line;
1237*83ee113eSDavid van Moolenbroek {
1238*83ee113eSDavid van Moolenbroek if (!ptr) {
1239*83ee113eSDavid van Moolenbroek log_error ("%s(%d): null pointer", file, line);
1240*83ee113eSDavid van Moolenbroek #if defined (POINTER_DEBUG)
1241*83ee113eSDavid van Moolenbroek abort ();
1242*83ee113eSDavid van Moolenbroek #else
1243*83ee113eSDavid van Moolenbroek return 0;
1244*83ee113eSDavid van Moolenbroek #endif
1245*83ee113eSDavid van Moolenbroek }
1246*83ee113eSDavid van Moolenbroek if (*ptr) {
1247*83ee113eSDavid van Moolenbroek log_error ("%s(%d): non-null pointer", file, line);
1248*83ee113eSDavid van Moolenbroek #if defined (POINTER_DEBUG)
1249*83ee113eSDavid van Moolenbroek abort ();
1250*83ee113eSDavid van Moolenbroek #else
1251*83ee113eSDavid van Moolenbroek *ptr = (struct binding_scope *)0;
1252*83ee113eSDavid van Moolenbroek #endif
1253*83ee113eSDavid van Moolenbroek }
1254*83ee113eSDavid van Moolenbroek *ptr = bp;
1255*83ee113eSDavid van Moolenbroek bp -> refcnt++;
1256*83ee113eSDavid van Moolenbroek rc_register (file, line, ptr, bp, bp -> refcnt, 0, RC_MISC);
1257*83ee113eSDavid van Moolenbroek return 1;
1258*83ee113eSDavid van Moolenbroek }
1259*83ee113eSDavid van Moolenbroek
1260*83ee113eSDavid van Moolenbroek /* Make a copy of the data in data_string, upping the buffer reference
1261*83ee113eSDavid van Moolenbroek count if there's a buffer. */
1262*83ee113eSDavid van Moolenbroek
1263*83ee113eSDavid van Moolenbroek void
data_string_copy(struct data_string * dest,const struct data_string * src,const char * file,int line)1264*83ee113eSDavid van Moolenbroek data_string_copy(struct data_string *dest, const struct data_string *src,
1265*83ee113eSDavid van Moolenbroek const char *file, int line)
1266*83ee113eSDavid van Moolenbroek {
1267*83ee113eSDavid van Moolenbroek if (src -> buffer) {
1268*83ee113eSDavid van Moolenbroek buffer_reference (&dest -> buffer, src -> buffer, file, line);
1269*83ee113eSDavid van Moolenbroek } else {
1270*83ee113eSDavid van Moolenbroek dest->buffer = NULL;
1271*83ee113eSDavid van Moolenbroek }
1272*83ee113eSDavid van Moolenbroek dest -> data = src -> data;
1273*83ee113eSDavid van Moolenbroek dest -> terminated = src -> terminated;
1274*83ee113eSDavid van Moolenbroek dest -> len = src -> len;
1275*83ee113eSDavid van Moolenbroek }
1276*83ee113eSDavid van Moolenbroek
1277*83ee113eSDavid van Moolenbroek /* Release the reference count to a data string's buffer (if any) and
1278*83ee113eSDavid van Moolenbroek zero out the other information, yielding the null data string. */
1279*83ee113eSDavid van Moolenbroek
data_string_forget(data,file,line)1280*83ee113eSDavid van Moolenbroek void data_string_forget (data, file, line)
1281*83ee113eSDavid van Moolenbroek struct data_string *data;
1282*83ee113eSDavid van Moolenbroek const char *file;
1283*83ee113eSDavid van Moolenbroek int line;
1284*83ee113eSDavid van Moolenbroek {
1285*83ee113eSDavid van Moolenbroek if (data -> buffer)
1286*83ee113eSDavid van Moolenbroek buffer_dereference (&data -> buffer, file, line);
1287*83ee113eSDavid van Moolenbroek memset (data, 0, sizeof *data);
1288*83ee113eSDavid van Moolenbroek }
1289*83ee113eSDavid van Moolenbroek
1290*83ee113eSDavid van Moolenbroek /* If the data_string is larger than the specified length, reduce
1291*83ee113eSDavid van Moolenbroek the data_string to the specified size. */
1292*83ee113eSDavid van Moolenbroek
data_string_truncate(dp,len)1293*83ee113eSDavid van Moolenbroek void data_string_truncate (dp, len)
1294*83ee113eSDavid van Moolenbroek struct data_string *dp;
1295*83ee113eSDavid van Moolenbroek int len;
1296*83ee113eSDavid van Moolenbroek {
1297*83ee113eSDavid van Moolenbroek /* XXX: do we need to consider the "terminated" flag in the check? */
1298*83ee113eSDavid van Moolenbroek if (len < dp -> len) {
1299*83ee113eSDavid van Moolenbroek dp -> terminated = 0;
1300*83ee113eSDavid van Moolenbroek dp -> len = len;
1301*83ee113eSDavid van Moolenbroek }
1302*83ee113eSDavid van Moolenbroek }
1303