source: roaraudio/include/libroar/memmgr.h @ 5003:955e3f977a2d

Last change on this file since 5003:955e3f977a2d was 5003:955e3f977a2d, checked in by phi, 11 years ago

added roar_mm_strscpy() and roar_mm_strscat()

File size: 4.7 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
50ssize_t roar_mm_sizeof(void * buf);
51
52void * roar_mm_calloc(size_t nmemb, size_t size);
53void * roar_mm_malloc(size_t size);
54int    roar_mm_free(void *ptr);
55void * roar_mm_realloc(void *ptr, size_t size);
56
57/*
58 * TODO: we need some functions to control the pre-alloc
59 *       of memory.
60 */
61
62#else
63#define roar_mm_sizeof(ptr)         ((ssize_t)-1)
64#define roar_mm_calloc(nmemb, size) calloc((nmemb), (size))
65#define roar_mm_malloc(size)        malloc((size))
66#define roar_mm_free(ptr)           free((ptr))
67#define roar_mm_realloc(ptr, size)  realloc((ptr), (size))
68#endif
69
70// dummy function doing the same as roar_mm_free() but return void.
71// this should only be used in case a function pointer of this type is required.
72void roar_mm_free_retvoid(void *ptr);
73
74// memory locking:
75
76#if defined(ROAR_HAVE_MLOCK) && defined(__linux__)
77#define roar_mm_mlock(addr, len) mlock((addr), (len))
78#elif defined(ROAR_TARGET_MICROCONTROLLER)
79#define roar_mm_mlock(addr, len) 0
80#else
81int roar_mm_mlock(const void *addr, size_t len);
82#endif
83
84#if defined(ROAR_HAVE_MUNLOCK) && defined(__linux__)
85#define roar_mm_munlock(addr, len) munlock((addr), (len))
86#elif defined(ROAR_TARGET_MICROCONTROLLER)
87#define roar_mm_munlock(addr, len) 0
88#else
89int roar_mm_munlock(const void *addr, size_t len);
90#endif
91
92#if defined(ROAR_HAVE_MLOCKALL)
93#define roar_mm_mlockall(flags) mlockall((flags))
94#elif defined(ROAR_TARGET_MICROCONTROLLER)
95#define roar_mm_mlockall(flags) 0
96#else
97#define roar_mm_mlockall(flags) (-1)
98#endif
99
100#if defined(ROAR_HAVE_MUNLOCKALL)
101#define roar_mm_munlockall() munlockall()
102#elif defined(ROAR_TARGET_MICROCONTROLLER)
103#define roar_mm_munlockall() 0
104#else
105#define roar_mm_munlockall() (-1)
106#endif
107
108// for compatibility with old versions:
109#define ROAR_MLOCK _ROAR_MLOCK
110
111// aux functions:
112void * roar_mm_memdup(const void * s, size_t len);
113
114// string functions:
115#ifndef ROAR_HAVE_STRLEN
116ssize_t roar_mm_strlen(const char *s);
117#else
118#define roar_mm_strlen(str) strlen((str))
119#endif
120
121ssize_t roar_mm_strnlen(const char *s, size_t maxlen);
122
123#if defined(ROAR_USE_MEMMGR) || !defined(ROAR_HAVE_STRDUP)
124char * roar_mm_strdup(const char *s);
125#else
126#define roar_mm_strdup(str)         strdup((str))
127#endif
128
129#if defined(ROAR_USE_MEMMGR) || !defined(ROAR_HAVE_STRNDUP)
130char *roar_mm_strndup(const char *s, size_t n);
131#else
132#define roar_mm_strndup(str, size)         strdup((str), (size))
133#endif
134
135#ifndef ROAR_HAVE_STRLCPY
136ssize_t roar_mm_strlcpy(char *dst, const char *src, size_t size);
137#else
138#define roar_mm_strlcpy(dst,src,size) strlcpy((dst),(src),(size))
139#endif
140
141#define roar_mm_strscpy(dst,src) roar_mm_strlcpy((dst),(src),sizeof((dst)))
142
143#ifndef ROAR_HAVE_STRLCAT
144ssize_t roar_mm_strlcat(char *dst, const char *src, size_t size);
145#else
146#define roar_mm_strlcat(dst,src,size) strlcat((dst),(src),(size))
147#endif
148
149#define roar_mm_strscat(dst,src) roar_mm_strlcat((dst),(src),sizeof((dst)))
150
151#ifndef ROAR_HAVE_STRTOK_R
152char * roar_mm_strtok_r(char *str, const char *delim, char **saveptr);
153#else
154#define roar_mm_strtok_r(str,delim,saveptr) strtok_r((str),(delim),(saveptr))
155#endif
156
157#endif
158
159//ll
Note: See TracBrowser for help on using the repository browser.