Annotation of libelwix/src/elwix.c, revision 1.1.1.1
1.1 misho 1: /*************************************************************************
2: * (C) 2013 AITNET ltd - Sofia/Bulgaria - <misho@aitnet.org>
3: * by Michael Pounov <misho@elwix.org>
4: *
5: * $Author: misho $
6: * $Id: aitio.c,v 1.13 2012/11/15 23:23:54 misho Exp $
7: *
8: **************************************************************************
9: The ELWIX and AITNET software is distributed under the following
10: terms:
11:
12: All of the documentation and software included in the ELWIX and AITNET
13: Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org>
14:
15: Copyright 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
16: by Michael Pounov <misho@elwix.org>. All rights reserved.
17:
18: Redistribution and use in source and binary forms, with or without
19: modification, are permitted provided that the following conditions
20: are met:
21: 1. Redistributions of source code must retain the above copyright
22: notice, this list of conditions and the following disclaimer.
23: 2. Redistributions in binary form must reproduce the above copyright
24: notice, this list of conditions and the following disclaimer in the
25: documentation and/or other materials provided with the distribution.
26: 3. All advertising materials mentioning features or use of this software
27: must display the following acknowledgement:
28: This product includes software developed by Michael Pounov <misho@elwix.org>
29: ELWIX - Embedded LightWeight unIX and its contributors.
30: 4. Neither the name of AITNET nor the names of its contributors
31: may be used to endorse or promote products derived from this software
32: without specific prior written permission.
33:
34: THIS SOFTWARE IS PROVIDED BY AITNET AND CONTRIBUTORS ``AS IS'' AND
35: ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
36: IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
37: ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
38: FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
39: DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
40: OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
41: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
42: LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
43: OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
44: SUCH DAMAGE.
45: */
46: #include "global.h"
47:
48:
49: int elwix_Debug;
50: int elwix_Verbose;
51:
52:
53: /* Memory management */
54:
55: void *(*e_malloc)(size_t) = malloc;
56: void *(*e_calloc)(size_t, size_t) = calloc;
57: void *(*e_realloc)(void*, size_t) = realloc;
58: char *(*e_strdup)(const char*) = strdup;
59: void (*e_free)(void*) = free;
60:
61:
62: #pragma GCC visibility push(hidden)
63:
64: int use_mm;
65: const char elwix_Prog[STRSIZ];
66:
67: int elwix_Errno;
68: char elwix_Error[STRSIZ];
69:
70: #pragma GCC visibility pop
71:
72:
73: // elwix_SetProg() Set program memory pool name
74: inline void
75: elwix_SetProg(const char *csProgName)
76: {
77: strlcpy((char*) elwix_Prog, csProgName, sizeof elwix_Prog);
78: }
79:
80: // elwix_GetProg() Get program memory pool name
81: inline const char *
82: elwix_GetProg()
83: {
84: return elwix_Prog;
85: }
86:
87: // elwix_GetErrno() Get error code of last operation
88: inline int
89: elwix_GetErrno()
90: {
91: return elwix_Errno;
92: }
93:
94: // elwix_GetError() Get error text of last operation
95: inline const char *
96: elwix_GetError()
97: {
98: return elwix_Error;
99: }
100:
101: // elwix_SetErr() Set error to variables for internal use!!!
102: inline void
103: elwix_SetErr(int eno, char *estr, ...)
104: {
105: va_list lst;
106:
107: elwix_Errno = eno;
108: memset(elwix_Error, 0, sizeof elwix_Error);
109: va_start(lst, estr);
110: vsnprintf(elwix_Error, sizeof elwix_Error, estr, lst);
111: va_end(lst);
112: }
113:
114: // elwix_mm_inuse() Check for memory management model
115: inline int
116: elwix_mm_inuse()
117: {
118: return use_mm & ELWIX_MPOOL;
119: }
120:
121:
122: // init libelwix routine
123: __attribute__((constructor)) void
124: _elwix_init()
125: {
126: elwixInit(ELWIX_MPOOL, 0);
127: }
128:
129: // fini libelwix routine
130: __attribute__((destructor)) void
131: _elwix_fini()
132: {
133: elwixFini();
134: }
135:
136: /*
137: * elwixInit() - Init libelwix library memory management
138: *
139: * @mm = memory management (ELWIX_SYSM or ELWIX_MPOOL)
140: * @maxmem = memory limit
141: * return: -1 error or !=-1 used memory management model
142: */
143: int
144: elwixInit(int mm, u_long maxmem)
145: {
146: switch (mm) {
147: case ELWIX_MPOOL: /* mpool */
148: elwix_mpool = mpool_init(maxmem);
149: if (elwix_mpool) {
150: e_malloc = mpool_xmalloc;
151: e_calloc = mpool_xcalloc;
152: e_realloc = mpool_xrealloc;
153: e_strdup = mpool_xstrdup;
154: e_free = mpool_xfree;
155: break;
156: } else {
157: mm = ELWIX_SYSM;
158: #undef USE_MPOOL
159: }
160: case ELWIX_SYSM: /* system */
161: e_malloc = malloc;
162: e_calloc = calloc;
163: e_realloc = realloc;
164: e_strdup = strdup;
165: e_free = free;
166: break;
167: default: /* not supported */
168: elwix_SetErr(EINVAL, "Not supported memory management");
169: return -1;
170: }
171:
172: return (use_mm = mm);
173: }
174:
175: /*
176: * elwixFini() - Finish libaitio library memory management
177: *
178: * return: none
179: */
180: void
181: elwixFini()
182: {
183: switch (use_mm) {
184: case ELWIX_MPOOL:
185: e_malloc = malloc;
186: e_calloc = calloc;
187: e_realloc = realloc;
188: e_strdup = strdup;
189: e_free = free;
190: use_mm = ELWIX_SYSM;
191:
192: mpool_destroy(&elwix_mpool);
193: break;
194: }
195: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>