xalloc.h 2.07 KB
Newer Older
Niels Möller's avatar
Niels Möller committed
1
2
/* xalloc.h
 *
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 *
 *
 * $Id$ */

/* lsh, an implementation of the ssh protocol
 *
 * Copyright (C) 1998 Niels Möller
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of 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.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
Niels Möller's avatar
Niels Möller committed
24
25
26
27
28
29
 */

#ifndef LSH_XALLOC_H_INCLUDED
#define LSH_XALLOC_H_INCLUDED

#include <stdlib.h>
Niels Möller's avatar
Niels Möller committed
30
#include "lsh_types.h"
Niels Möller's avatar
Niels Möller committed
31
32

void *xalloc(size_t size);
Niels Möller's avatar
Niels Möller committed
33
#define NEW(x) ((x) = xalloc(sizeof(*(x))))
Niels Möller's avatar
Niels Möller committed
34

Niels Möller's avatar
Niels Möller committed
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
/* Allocation */

/* The memory allocation model (for strings) is as follows:
 *
 * Packets are allocated when the are needed. A packet may be passed
 * through a chain of processing functions, until it is finally
 * discarded or transmitted, at which time it is deallocated.
 * Processing functions may deallocate their input packets and
 * allocate fresh packets to pass on; therefore, any data from a
 * packet that is needed later must be copied into some other storage.
 *
 * At any time, each packet is own by a a particular processing
 * function. Pointers into a packet are valid only while you own it.
 * */

struct lsh_string *lsh_string_alloc(UINT32 size);
void lsh_string_free(struct lsh_string *packet);

Niels Möller's avatar
Niels Möller committed
53
#ifdef DEBUG_ALLOC
Niels Möller's avatar
Niels Möller committed
54

Niels Möller's avatar
Niels Möller committed
55
56
void *debug_malloc(size_t size);
void debug_free(void *m);
Niels Möller's avatar
Niels Möller committed
57
58
void debug_check_object(void *m, UINT32 size);

Niels Möller's avatar
Niels Möller committed
59
60
#define lsh_free debug_free
#define lsh_malloc debug_malloc
Niels Möller's avatar
Niels Möller committed
61
62
63
64
#define MDEBUG(x) debug_check_object(x, sizeof(*(x)))

#else   /* !DEBUG_ALLOC */

Niels Möller's avatar
Niels Möller committed
65
66
#define lsh_free free
#define lsh_malloc malloc
Niels Möller's avatar
Niels Möller committed
67
68
#define MDEBUG(x)
#endif  /* !DEBUG_ALLOC */
Niels Möller's avatar
Niels Möller committed
69

Niels Möller's avatar
Niels Möller committed
70
#endif /* LSH_XALLOC_H_INCLUDED */