alloc.c (2971B)
1 /* 2 * alloc.c 3 * 4 * memory allocation and deallocation 5 * 6 * David A. McGrew 7 * Cisco Systems, Inc. 8 */ 9 /* 10 * 11 * Copyright (c) 2001-2017 Cisco Systems, Inc. 12 * All rights reserved. 13 * 14 * Redistribution and use in source and binary forms, with or without 15 * modification, are permitted provided that the following conditions 16 * are met: 17 * 18 * Redistributions of source code must retain the above copyright 19 * notice, this list of conditions and the following disclaimer. 20 * 21 * Redistributions in binary form must reproduce the above 22 * copyright notice, this list of conditions and the following 23 * disclaimer in the documentation and/or other materials provided 24 * with the distribution. 25 * 26 * Neither the name of the Cisco Systems, Inc. nor the names of its 27 * contributors may be used to endorse or promote products derived 28 * from this software without specific prior written permission. 29 * 30 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 31 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 32 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 33 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 34 * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 35 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 36 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 37 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 40 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 41 * OF THE POSSIBILITY OF SUCH DAMAGE. 42 * 43 */ 44 45 #ifdef HAVE_CONFIG_H 46 #include <config.h> 47 #endif 48 49 #include "alloc.h" 50 #include "crypto_kernel.h" 51 52 /* the debug module for memory allocation */ 53 54 srtp_debug_module_t srtp_mod_alloc = { 55 0, /* debugging is off by default */ 56 "alloc" /* printable name for module */ 57 }; 58 59 /* 60 * Nota bene: the debugging statements for srtp_crypto_alloc() and 61 * srtp_crypto_free() have identical prefixes, which include the addresses 62 * of the memory locations on which they are operating. This fact can 63 * be used to locate memory leaks, by turning on memory debugging, 64 * grepping for 'alloc', then matching alloc and free calls by 65 * address. 66 */ 67 68 #if defined(HAVE_STDLIB_H) 69 70 void *srtp_crypto_alloc(size_t size) 71 { 72 void *ptr; 73 74 if (!size) { 75 return NULL; 76 } 77 78 ptr = calloc(1, size); 79 80 if (ptr) { 81 debug_print(srtp_mod_alloc, "(location: %p) allocated", ptr); 82 } else { 83 debug_print(srtp_mod_alloc, "allocation failed (asked for %zu bytes)\n", 84 size); 85 } 86 87 return ptr; 88 } 89 90 void srtp_crypto_free(void *ptr) 91 { 92 debug_print(srtp_mod_alloc, "(location: %p) freed", ptr); 93 94 free(ptr); 95 } 96 97 #else /* we need to define our own memory allocation routines */ 98 99 #error no memory allocation defined yet 100 101 #endif