OpenDNSSEC-signer 1.2.1
|
00001 /* 00002 * $Id: se_malloc.c 4294 2011-01-13 19:58:29Z jakob $ 00003 * 00004 * Copyright (c) 2009 NLNet Labs. All rights reserved. 00005 * 00006 * Redistribution and use in source and binary forms, with or without 00007 * modification, are permitted provided that the following conditions 00008 * are met: 00009 * 1. Redistributions of source code must retain the above copyright 00010 * notice, this list of conditions and the following disclaimer. 00011 * 2. Redistributions in binary form must reproduce the above copyright 00012 * notice, this list of conditions and the following disclaimer in the 00013 * documentation and/or other materials provided with the distribution. 00014 * 00015 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 00016 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 00017 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 00018 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY 00019 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 00020 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 00021 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 00022 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER 00023 * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 00024 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 00025 * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00026 * 00027 */ 00028 00034 #include "config.h" 00035 #include "util/se_malloc.h" 00036 #include "util/log.h" 00037 00038 #include <stdlib.h> /* malloc(), calloc(), realloc(), free() */ 00039 #include <string.h> /* strdup() */ 00040 00045 static void* 00046 se_assert_data(void* data) 00047 { 00048 if (!data) { 00049 se_fatal_exit("memory allocation failed (se): out of memory"); 00050 } 00051 return data; 00052 } 00053 00058 void* 00059 se_calloc(size_t nmemb, size_t size) 00060 { 00061 void* data = calloc(nmemb, size); 00062 return se_assert_data(data); 00063 } 00064 00069 void* se_malloc(size_t size) 00070 { 00071 void* data = malloc(size); 00072 return se_assert_data(data); 00073 } 00074 00079 void 00080 se_free(void* ptr) 00081 { 00082 if (ptr) { 00083 free(ptr); 00084 } 00085 } 00086 00091 void* 00092 se_realloc(void* ptr, size_t size) 00093 { 00094 void* data = realloc(ptr, size); 00095 return se_assert_data(data); 00096 } 00097 00102 void 00103 se_rbnode_free(ldns_rbnode_t* node) 00104 { 00105 if (node && node != LDNS_RBTREE_NULL) { 00106 se_rbnode_free(node->left); 00107 se_rbnode_free(node->right); 00108 free((void*)node); 00109 } 00110 } 00111 00116 char* 00117 se_strdup(const char *s) 00118 { 00119 char* dup = NULL; 00120 00121 if (s) { 00122 dup = strdup(s); 00123 if (!dup) { 00124 se_fatal_exit("memory allocation failed (strdup): out of memory"); 00125 } 00126 } 00127 return dup; 00128 }