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