1 // Copyright 2012 Intel Corporation
3 // All rights reserved.
5 // Redistribution and use in source and binary forms, with or without
6 // modification, are permitted provided that the following conditions are met:
8 // - Redistributions of source code must retain the above copyright notice, this
9 // list of conditions and the following disclaimer.
11 // - Redistributions in binary form must reproduce the above copyright notice,
12 // this list of conditions and the following disclaimer in the documentation
13 // and/or other materials provided with the distribution.
15 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
16 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18 // DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
19 // FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20 // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
21 // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
22 // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
23 // OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 * C99 restrict keyword
32 # if defined(__GNUC__)
33 # define restrict __restrict__
34 # elif defined(_MSC_VER)
35 /* leave empty to prevent compiler wows - decl vs. def diff */
46 # if defined(__GNUC__)
47 # define inline __inline__
48 # elif defined(_MSC_VER)
49 # define inline __inline
51 # define inline __inline
58 * C99 string manipulation functions - snprintf, strcasecmp
60 * https://stackoverflow.com/questions/2915672/snprintf-and-visual-studio-2010
63 #include <stdarg.h> // for va_start, va_end
64 #include <stdio.h> // for _vscprintf, _vscprintf_s
67 #define strcasecmp _stricmp
68 #define snprintf c99_snprintf
69 #define vsnprintf c99_vsnprintf
72 c99_vsnprintf(char* str
, size_t size
, const char* format
, va_list ap
)
77 count
= _vsnprintf_s(str
, size
, _TRUNCATE
, format
, ap
);
79 count
= _vscprintf(format
, ap
);
85 c99_snprintf(char* str
, size_t size
, const char* format
, ...)
91 count
= c99_vsnprintf(str
, size
, format
, ap
);
103 * strerror_r - strictly speaking not C99 function, but it's been around of
104 * ages in one shape or another.
106 * Under *NIX there are three flavours - XSI-compliant (POSIX.1-2001)
107 * or not, vs GNU-specific one. The POSIX one is available only under *NIX
108 * and is guaranteed to be thread-safe (as used in waffle).
109 * Under Windows the function is not thread-safe and thus it's depreciated.
112 #define strerror_r(errno,buf,len) strerror_s(buf,len,errno)