1 /* MikMod sound library
\r
2 (c) 1998, 1999 Miodrag Vallat and others - see file AUTHORS for
\r
5 This library is free software; you can redistribute it and/or modify
\r
6 it under the terms of the GNU Library General Public License as
\r
7 published by the Free Software Foundation; either version 2 of
\r
8 the License, or (at your option) any later version.
\r
10 This program is distributed in the hope that it will be useful,
\r
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
\r
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
\r
13 GNU Library General Public License for more details.
\r
15 You should have received a copy of the GNU Library General Public
\r
16 License along with this library; if not, write to the Free Software
\r
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
\r
21 /*==============================================================================
\r
23 $Id: mmalloc.c,v 1.1.1.1 2004/01/21 01:36:35 raph Exp $
\r
25 Dynamic memory routines
\r
27 ==============================================================================*/
\r
29 #ifdef HAVE_CONFIG_H
\r
33 #include "mikmod_internals.h"
\r
36 size_t mem_offset = 0;
\r
37 char *mallocbuf = NULL;
\r
38 size_t mallocbuflen = 0;
\r
41 size_t mikmod_get_mbuffsize(size_t *buff)
\r
47 void mikmod_prepare_malloc(char *buff, int bufsize)
\r
50 mallocbuflen = bufsize;
\r
54 long mikmod_get_malloc_usage(void)
\r
59 int mikmod_abs(int num)
\r
67 void* mikmod_memset(char *buf, int val, size_t count)
\r
71 for (i = 0; i < count; i++)
\r
78 /* 'Poor man's malloc' taken from rockbox codeclib.c */
\r
79 void* mikmod_malloc(size_t size)
\r
85 if (mem_offset + (long)size + 4 > mallocbuflen)
\r
90 x = &mallocbuf[mem_offset];
\r
91 ((size_t*)x)[-1] = size;
\r
93 mem_offset += (size + 3) & ~3; /* Keep memory 32-bit aligned */
\r
101 void* mikmod_calloc(size_t nmemb, size_t size)
\r
104 x = mikmod_malloc(nmemb * size);
\r
107 //memset(x, 0, nmemb*size); /* already done in mikmod_malloc() */
\r
111 void mikmod_free(void* ptr) {
\r
115 void* mikmod_realloc(void* ptr, size_t size)
\r
119 x = mikmod_malloc(size);
\r
122 if (mikmod_get_mbuffsize(ptr) < size)
\r
124 memcpy(x, ptr, mikmod_get_mbuffsize(ptr));
\r
128 memcpy(x, ptr, size);
\r
134 unsigned int mikmod_strlen(const char *string)
\r
137 for (i = 0; string[i] != 0; i++);
\r
141 char* mikmod_strdup(const char *srcbuf)
\r
144 unsigned int i, len;
\r
146 len = mikmod_strlen(srcbuf);
\r
147 newbuf = mikmod_malloc(len + 1);
\r
151 for (i = 0; i <= len; i++)
\r
152 newbuf[i] = srcbuf[i];
\r
157 char* mikmod_strncat(char *dest, const char *src, size_t count)
\r
160 j = mikmod_strlen(dest);
\r
162 for(i = 0; i < count; i++)
\r
166 dest[i + j] = src[i];
\r
171 int mikmod_memcmp(const char *buf1, const char *buf2, size_t count)
\r
175 for(i = 0; i < count; i++)
\r
177 if (buf1[i] > buf2[i])
\r
179 if (buf1[i] < buf2[i])
\r
185 char* mikmod_strstr(char *str, char *search)
\r
189 if (!mikmod_strlen(search))
\r
192 j = mikmod_strlen(str);
\r
193 k = mikmod_strlen(search);
\r
195 for (i = 0; i < (j - k); i++)
\r
197 if (!mikmod_memcmp(str, search, k))
\r
203 int mikmod_toupper(int character)
\r
205 if ((character > 96) && (character < 123))
\r
206 return (character - 32);
\r
211 int mikmod_isalnum(int character)
\r
213 if ((character > 96) && (character < 123))
\r
215 if ((character > 64) && (character < 91))
\r
217 if ((character > 47) && (character < 58))
\r
222 int mikmod_isdigit(char c)
\r
224 return (c >= '0') && (c <= '9');
\r
228 /****************************************************
\r
229 * 'Original' MikMod code goes here
\r
231 ****************************************************/
\r
233 /* Same as malloc, but sets error variable _mm_error when fails */
\r
234 void* _mm_malloc(size_t size)
\r
238 //if(!(d=mikmod_malloc(size))) {
\r
239 if(!(d=mikmod_malloc(size))) {
\r
240 _mm_errno = MMERR_OUT_OF_MEMORY;
\r
241 if(_mm_errorhandler) _mm_errorhandler();
\r
243 memset(d, 0, size);
\r
247 /* Same as calloc, but sets error variable _mm_error when fails */
\r
248 void* _mm_calloc(size_t nitems,size_t size)
\r
252 if(!(d=mikmod_calloc(nitems,size))) {
\r
253 _mm_errno = MMERR_OUT_OF_MEMORY;
\r
254 if(_mm_errorhandler) _mm_errorhandler();
\r