Kannel: Open Source WAP and SMS gateway  svn-r5335
gwmem-native.c
Go to the documentation of this file.
1 /* ====================================================================
2  * The Kannel Software License, Version 1.0
3  *
4  * Copyright (c) 2001-2018 Kannel Group
5  * Copyright (c) 1998-2001 WapIT Ltd.
6  * All rights reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  *
12  * 1. Redistributions of source code must retain the above copyright
13  * notice, this list of conditions and the following disclaimer.
14  *
15  * 2. Redistributions in binary form must reproduce the above copyright
16  * notice, this list of conditions and the following disclaimer in
17  * the documentation and/or other materials provided with the
18  * distribution.
19  *
20  * 3. The end-user documentation included with the redistribution,
21  * if any, must include the following acknowledgment:
22  * "This product includes software developed by the
23  * Kannel Group (http://www.kannel.org/)."
24  * Alternately, this acknowledgment may appear in the software itself,
25  * if and wherever such third-party acknowledgments normally appear.
26  *
27  * 4. The names "Kannel" and "Kannel Group" must not be used to
28  * endorse or promote products derived from this software without
29  * prior written permission. For written permission, please
30  * contact org@kannel.org.
31  *
32  * 5. Products derived from this software may not be called "Kannel",
33  * nor may "Kannel" appear in their name, without prior written
34  * permission of the Kannel Group.
35  *
36  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
37  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
38  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
39  * DISCLAIMED. IN NO EVENT SHALL THE KANNEL GROUP OR ITS CONTRIBUTORS
40  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
41  * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
42  * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
43  * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
44  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
45  * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
46  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
47  * ====================================================================
48  *
49  * This software consists of voluntary contributions made by many
50  * individuals on behalf of the Kannel Group. For more information on
51  * the Kannel Group, please see <http://www.kannel.org/>.
52  *
53  * Portions of this software are based upon software originally written at
54  * WapIT Ltd., Helsinki, Finland for the Kannel project.
55  */
56 
57 /*
58  * gwmem-native.h - memory managment wrapper functions, native flavor
59  *
60  * Lars Wirzenius
61  */
62 
63 #include <stdlib.h>
64 #include <errno.h>
65 #include <string.h>
66 
67 #include "gwlib.h"
68 
69 /*
70  * In this module, we must use the real versions so let's undefine the
71  * accident protectors.
72  */
73 #undef malloc
74 #undef calloc
75 #undef realloc
76 #undef free
77 
78 void *gw_native_noop(void *ptr) { return ptr; }
79 
80 void *gw_native_malloc(size_t size)
81 {
82  void *ptr;
83 
84  /* ANSI C89 says malloc(0) is implementation-defined. Avoid it. */
85  gw_assert(size > 0);
86 
87  ptr = malloc(size);
88  if (ptr == NULL)
89  panic(errno, "Memory allocation failed");
90 
91  return ptr;
92 }
93 
94 void *gw_native_calloc(int nmemb, size_t size)
95 {
96  void *ptr;
97 
98  /* ANSI C89 says malloc(0) is implementation-defined. Avoid it. */
99  gw_assert(size > 0);
100  gw_assert(nmemb > 0);
101 
102  ptr = calloc(nmemb, size);
103  if (ptr == NULL)
104  panic(errno, "Memory allocation failed");
105 
106  return ptr;
107 }
108 
109 void *gw_native_realloc(void *ptr, size_t size)
110 {
111  void *new_ptr;
112 
113  gw_assert(size > 0);
114 
115  new_ptr = realloc(ptr, size);
116  if (new_ptr == NULL)
117  panic(errno, "Memory re-allocation failed");
118 
119  return new_ptr;
120 }
121 
122 
123 void gw_native_free(void *ptr)
124 {
125  free(ptr);
126 }
127 
128 
129 char *gw_native_strdup(const char *str)
130 {
131  char *copy;
132  int size;
133 
134  gw_assert(str != NULL);
135  size = strlen(str) + 1;
136 
137  copy = gw_native_malloc(size);
138  memcpy(copy, str, size);
139  return copy;
140 }
int size
Definition: wsasm.c:84
void gw_native_free(void *ptr)
Definition: gwmem-native.c:123
gw_assert(wtls_machine->packet_to_send !=NULL)
void * gw_native_realloc(void *ptr, size_t size)
Definition: gwmem-native.c:109
void * malloc(YYSIZE_T)
#define calloc(a, b)
Definition: gwmem.h:192
void * gw_native_calloc(int nmemb, size_t size)
Definition: gwmem-native.c:94
#define realloc(p, n)
Definition: gwmem.h:193
void * gw_native_malloc(size_t size)
Definition: gwmem-native.c:80
void free(void *)
char * gw_native_strdup(const char *str)
Definition: gwmem-native.c:129
void * gw_native_noop(void *ptr)
Definition: gwmem-native.c:78
#define panic
Definition: log.h:87
See file LICENSE for details about the license agreement for using, modifying, copying or deriving work from this software.