source: roaraudio/include/libroar/memmgr.h @ 5010:065b9de0acf7

Last change on this file since 5010:065b9de0acf7 was 5010:065b9de0acf7, checked in by phi, 11 years ago

Updated roar_reset() (Closes: #131)

File size: 4.8 KB
Line 
1//memmgr.h:
2
3/*
4 *      Copyright (C) Philipp 'ph3-der-loewe' Schafft - 2009-2011
5 *
6 *  This file is part of libroar a part of RoarAudio,
7 *  a cross-platform sound system for both, home and professional use.
8 *  See README for details.
9 *
10 *  This file is free software; you can redistribute it and/or modify
11 *  it under the terms of the GNU General Public License version 3
12 *  as published by the Free Software Foundation.
13 *
14 *  libroar is distributed in the hope that it will be useful,
15 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
16 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 *  GNU General Public License for more details.
18 *
19 *  You should have received a copy of the GNU General Public License
20 *  along with this software; see the file COPYING.  If not, write to
21 *  the Free Software Foundation, 51 Franklin Street, Fifth Floor,
22 *  Boston, MA 02110-1301, USA.
23 *
24 *  NOTE for everyone want's to change something and send patches:
25 *  read README and HACKING! There a addition information on
26 *  the license of this document you need to read before you send
27 *  any patches.
28 *
29 *  NOTE for uses of non-GPL (LGPL,...) software using libesd, libartsc
30 *  or libpulse*:
31 *  The libs libroaresd, libroararts and libroarpulse link this lib
32 *  and are therefore GPL. Because of this it may be illigal to use
33 *  them with any software that uses libesd, libartsc or libpulse*.
34 */
35
36#ifndef _LIBROARMEMMGR_H_
37#define _LIBROARMEMMGR_H_
38
39#include "libroar.h"
40
41#ifndef ROAR_USE_MEMMGR
42#if !defined(ROAR_HAVE_MALLOC) || !defined(ROAR_HAVE_CALLOC) || !defined(ROAR_HAVE_REALLOC) || !defined(ROAR_HAVE_FREE)
43#define ROAR_USE_MEMMGR
44#endif
45#endif
46
47#ifdef ROAR_USE_MEMMGR
48// those functions are currently not implemeted:
49
50int     roar_mm_reset(void);
51
52ssize_t roar_mm_sizeof(void * buf);
53
54void * roar_mm_calloc(size_t nmemb, size_t size);
55void * roar_mm_malloc(size_t size);
56int    roar_mm_free(void *ptr);
57void * roar_mm_realloc(void *ptr, size_t size);
58
59/*
60 * TODO: we need some functions to control the pre-alloc
61 *       of memory.
62 */
63
64#else
65#define roar_mm_reset()             (0)
66#define roar_mm_sizeof(ptr)         ((ssize_t)-1)
67#define roar_mm_calloc(nmemb, size) calloc((nmemb), (size))
68#define roar_mm_malloc(size)        malloc((size))
69#define roar_mm_free(ptr)           free((ptr))
70#define roar_mm_realloc(ptr, size)  realloc((ptr), (size))
71#endif
72
73// dummy function doing the same as roar_mm_free() but return void.
74// this should only be used in case a function pointer of this type is required.
75void roar_mm_free_retvoid(void *ptr);
76
77// memory locking:
78
79#if defined(ROAR_HAVE_MLOCK) && defined(__linux__)
80#define roar_mm_mlock(addr, len) mlock((addr), (len))
81#elif defined(ROAR_TARGET_MICROCONTROLLER)
82#define roar_mm_mlock(addr, len) 0
83#else
84int roar_mm_mlock(const void *addr, size_t len);
85#endif
86
87#if defined(ROAR_HAVE_MUNLOCK) && defined(__linux__)
88#define roar_mm_munlock(addr, len) munlock((addr), (len))
89#elif defined(ROAR_TARGET_MICROCONTROLLER)
90#define roar_mm_munlock(addr, len) 0
91#else
92int roar_mm_munlock(const void *addr, size_t len);
93#endif
94
95#if defined(ROAR_HAVE_MLOCKALL)
96#define roar_mm_mlockall(flags) mlockall((flags))
97#elif defined(ROAR_TARGET_MICROCONTROLLER)
98#define roar_mm_mlockall(flags) 0
99#else
100#define roar_mm_mlockall(flags) (-1)
101#endif
102
103#if defined(ROAR_HAVE_MUNLOCKALL)
104#define roar_mm_munlockall() munlockall()
105#elif defined(ROAR_TARGET_MICROCONTROLLER)
106#define roar_mm_munlockall() 0
107#else
108#define roar_mm_munlockall() (-1)
109#endif
110
111// for compatibility with old versions:
112#define ROAR_MLOCK _ROAR_MLOCK
113
114// aux functions:
115void * roar_mm_memdup(const void * s, size_t len);
116
117// string functions:
118#ifndef ROAR_HAVE_STRLEN
119ssize_t roar_mm_strlen(const char *s);
120#else
121#define roar_mm_strlen(str) strlen((str))
122#endif
123
124ssize_t roar_mm_strnlen(const char *s, size_t maxlen);
125
126#if defined(ROAR_USE_MEMMGR) || !defined(ROAR_HAVE_STRDUP)
127char * roar_mm_strdup(const char *s);
128#else
129#define roar_mm_strdup(str)         strdup((str))
130#endif
131
132#if defined(ROAR_USE_MEMMGR) || !defined(ROAR_HAVE_STRNDUP)
133char *roar_mm_strndup(const char *s, size_t n);
134#else
135#define roar_mm_strndup(str, size)         strdup((str), (size))
136#endif
137
138#ifndef ROAR_HAVE_STRLCPY
139ssize_t roar_mm_strlcpy(char *dst, const char *src, size_t size);
140#else
141#define roar_mm_strlcpy(dst,src,size) strlcpy((dst),(src),(size))
142#endif
143
144#define roar_mm_strscpy(dst,src) roar_mm_strlcpy((dst),(src),sizeof((dst)))
145
146#ifndef ROAR_HAVE_STRLCAT
147ssize_t roar_mm_strlcat(char *dst, const char *src, size_t size);
148#else
149#define roar_mm_strlcat(dst,src,size) strlcat((dst),(src),(size))
150#endif
151
152#define roar_mm_strscat(dst,src) roar_mm_strlcat((dst),(src),sizeof((dst)))
153
154#ifndef ROAR_HAVE_STRTOK_R
155char * roar_mm_strtok_r(char *str, const char *delim, char **saveptr);
156#else
157#define roar_mm_strtok_r(str,delim,saveptr) strtok_r((str),(delim),(saveptr))
158#endif
159
160#endif
161
162//ll
Note: See TracBrowser for help on using the repository browser.