Return to vmbuf.c CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / ipsec-tools / src / racoon |
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: }