Annotation of embedaddon/ipsec-tools/src/racoon/vmbuf.c, revision 1.1.1.1
1.1 misho 1: /* $NetBSD: vmbuf.c,v 1.4 2006/09/09 16:22:10 manu Exp $ */
2:
3: /* $KAME: vmbuf.c,v 1.11 2001/11/26 16:54:29 sakane Exp $ */
4:
5: /*
6: * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
7: * All rights reserved.
8: *
9: * Redistribution and use in source and binary forms, with or without
10: * modification, are permitted provided that the following conditions
11: * are met:
12: * 1. Redistributions of source code must retain the above copyright
13: * notice, this list of conditions and the following disclaimer.
14: * 2. Redistributions in binary form must reproduce the above copyright
15: * notice, this list of conditions and the following disclaimer in the
16: * documentation and/or other materials provided with the distribution.
17: * 3. Neither the name of the project nor the names of its contributors
18: * may be used to endorse or promote products derived from this software
19: * without specific prior written permission.
20: *
21: * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
22: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24: * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
25: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31: * SUCH DAMAGE.
32: */
33:
34: #include "config.h"
35:
36: #define NONEED_DRM
37:
38: #include <sys/types.h>
39: #include <sys/param.h>
40:
41: #include <stdlib.h>
42: #include <stdio.h>
43: #include <string.h>
44:
45: #include "var.h"
46: #include "misc.h"
47: #include "vmbuf.h"
48: #include "debug.h"
49: #include "plog.h"
50: #include "gcmalloc.h"
51:
52: vchar_t *
53: vmalloc(size)
54: size_t size;
55: {
56: vchar_t *var;
57:
58: if ((var = (vchar_t *)racoon_malloc(sizeof(*var))) == NULL)
59: return NULL;
60:
61: var->l = size;
62: if (size == 0) {
63: var->v = NULL;
64: } else {
65: var->v = (caddr_t)racoon_calloc(1, size);
66: if (var->v == NULL) {
67: (void)racoon_free(var);
68: return NULL;
69: }
70: }
71:
72: return var;
73: }
74:
75: vchar_t *
76: vrealloc(ptr, size)
77: vchar_t *ptr;
78: size_t size;
79: {
80: caddr_t v;
81:
82: if (ptr != NULL) {
83: if (ptr->l == 0) {
84: (void)vfree(ptr);
85: return vmalloc(size); /* zero-fill it? */
86: }
87:
88: if ((v = (caddr_t)racoon_realloc(ptr->v, size)) == NULL) {
89: (void)vfree(ptr);
90: return NULL;
91: }
92:
93: if ( size > ptr->l)
94: memset(v + ptr->l, 0, size - ptr->l);
95: ptr->v = v;
96: ptr->l = size;
97: } else {
98: if ((ptr = vmalloc(size)) == NULL)
99: return NULL;
100: }
101:
102: return ptr;
103: }
104:
105: void
106: vfree(var)
107: vchar_t *var;
108: {
109: if (var == NULL)
110: return;
111:
112: if (var->v)
113: (void)racoon_free(var->v);
114:
115: (void)racoon_free(var);
116:
117: return;
118: }
119:
120: vchar_t *
121: vdup(src)
122: vchar_t *src;
123: {
124: vchar_t *new;
125:
126: if (src == NULL) {
127: plog(LLV_ERROR, LOCATION, NULL, "vdup(NULL) called\n");
128: return NULL;
129: }
130:
131: if ((new = vmalloc(src->l)) == NULL)
132: return NULL;
133:
134: memcpy(new->v, src->v, src->l);
135:
136: return new;
137: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>