FreeRDP
uwac-utils.h
1 /*
2  * Copyright © 2014 David FORT <contact@hardening-consulting.com>
3  *
4  * Permission to use, copy, modify, distribute, and sell this software and its
5  * documentation for any purpose is hereby granted without fee, provided that
6  * the above copyright notice appear in all copies and that both that copyright
7  * notice and this permission notice appear in supporting documentation, and
8  * that the name of the copyright holders not be used in advertising or
9  * publicity pertaining to distribution of the software without specific,
10  * written prior permission. The copyright holders make no representations
11  * about the suitability of this software for any purpose. It is provided "as
12  * is" without express or implied warranty.
13  *
14  * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
15  * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
16  * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
17  * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
18  * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
19  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
20  * OF THIS SOFTWARE.
21  */
22 
23 #ifndef UWAC_UTILS_H_
24 #define UWAC_UTILS_H_
25 
26 #include <stdlib.h>
27 #include <string.h>
28 
29 #include <uwac/config.h>
30 
31 #define min(a, b) (a) < (b) ? (a) : (b)
32 
33 #define container_of(ptr, type, member) (type*)((char*)(ptr)-offsetof(type, member))
34 
35 #define ARRAY_LENGTH(a) (sizeof(a) / sizeof(a)[0])
36 
37 void* xmalloc(size_t s);
38 
39 static inline void* zalloc(size_t size)
40 {
41  return calloc(1, size);
42 }
43 
44 void* xzalloc(size_t s);
45 
46 char* xstrdup(const char* s);
47 
48 void* xrealloc(void* p, size_t s);
49 
50 static inline char* uwac_strerror(int dw, char* dmsg, size_t size)
51 {
52 #ifdef __STDC_LIB_EXT1__
53  (void)strerror_s(dw, dmsg, size);
54 #elif defined(UWAC_HAVE_STRERROR_R)
55  (void)strerror_r(dw, dmsg, size);
56 #else
57  (void)_snprintf(dmsg, size, "%s", strerror(dw));
58 #endif
59  return dmsg;
60 }
61 
62 #endif /* UWAC_UTILS_H_ */