1 /* libFLAC - Free Lossless Audio Codec library 2 * Copyright (C) 2012-2016 Xiph.org Foundation 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 8 * - Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 11 * - Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in the 13 * documentation and/or other materials provided with the distribution. 14 * 15 * - Neither the name of the Xiph.org Foundation nor the names of its 16 * contributors may be used to endorse or promote products derived from 17 * this software without specific prior written permission. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR 23 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 24 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 25 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 26 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 27 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 28 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 29 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 */ 31 32 /* This is the prefered location of all CPP hackery to make $random_compiler 33 * work like something approaching a C99 (or maybe more accurately GNU99) 34 * compiler. 35 * 36 * It is assumed that this header will be included after "config.h". 37 */ 38 39 #ifndef FLAC__SHARE__COMPAT_H 40 #define FLAC__SHARE__COMPAT_H 41 42 #if defined _WIN32 && !defined __CYGWIN__ 43 /* where MSVC puts unlink() */ 44 # include <io.h> 45 #else 46 # include <unistd.h> 47 #endif 48 49 #if defined _MSC_VER || defined __BORLANDC__ || defined __MINGW32__ 50 #include <sys/types.h> /* for off_t */ 51 #define FLAC__off_t __int64 /* use this instead of off_t to fix the 2 GB limit */ 52 #if defined(_MSC_VER) && (_MSC_VER >= 1400) 53 #define fseeko _fseeki64 54 #define ftello _ftelli64 55 #elif defined(_MSC_VER) && (_MSC_VER < 1400) 56 #define fseeko fseek 57 #define ftello ftell 58 #else /* MinGW */ 59 #if !defined(HAVE_FSEEKO) 60 #define fseeko fseeko64 61 #define ftello ftello64 62 #endif 63 #endif 64 #else 65 #define FLAC__off_t off_t 66 #endif 67 68 #if HAVE_INTTYPES_H 69 #define __STDC_FORMAT_MACROS 70 #include <inttypes.h> 71 #endif 72 73 #if defined(_MSC_VER) 74 #define strtoll _strtoi64 75 #define strtoull _strtoui64 76 #endif 77 78 #if defined(_MSC_VER) 79 #define inline __inline 80 #endif 81 82 #if defined __INTEL_COMPILER || (defined _MSC_VER && defined _WIN64) 83 /* MSVS generates VERY slow 32-bit code with __restrict */ 84 #define flac_restrict __restrict 85 #elif defined __GNUC__ 86 #define flac_restrict __restrict__ 87 #else 88 #define flac_restrict 89 #endif 90 91 #define FLAC__U64L(x) x##ULL 92 93 #if defined _MSC_VER || defined __MINGW32__ 94 #define FLAC__STRCASECMP _stricmp 95 #define FLAC__STRNCASECMP _strnicmp 96 #elif defined __BORLANDC__ 97 #define FLAC__STRCASECMP stricmp 98 #define FLAC__STRNCASECMP strnicmp 99 #else 100 #define FLAC__STRCASECMP strcasecmp 101 #define FLAC__STRNCASECMP strncasecmp 102 #endif 103 104 #if defined _MSC_VER || defined __MINGW32__ || defined __CYGWIN__ || defined __EMX__ 105 #include <io.h> /* for _setmode(), chmod() */ 106 #include <fcntl.h> /* for _O_BINARY */ 107 #else 108 #include <unistd.h> /* for chown(), unlink() */ 109 #endif 110 111 #if defined _MSC_VER || defined __BORLANDC__ || defined __MINGW32__ 112 #if defined __BORLANDC__ 113 #include <utime.h> /* for utime() */ 114 #else 115 #include <sys/utime.h> /* for utime() */ 116 #endif 117 #else 118 #include <sys/types.h> /* some flavors of BSD (like OS X) require this to get time_t */ 119 #include <utime.h> /* for utime() */ 120 #endif 121 122 #if defined _MSC_VER 123 # if _MSC_VER >= 1800 124 # include <inttypes.h> 125 # elif _MSC_VER >= 1600 126 /* Visual Studio 2010 has decent C99 support */ 127 # include <stdint.h> 128 # define PRIu64 "llu" 129 # define PRId64 "lld" 130 # define PRIx64 "llx" 131 # else 132 # include <limits.h> 133 # ifndef UINT32_MAX 134 # define UINT32_MAX _UI32_MAX 135 # endif 136 typedef unsigned __int64 uint64_t; 137 typedef unsigned __int32 uint32_t; 138 typedef unsigned __int16 uint16_t; 139 typedef unsigned __int8 uint8_t; 140 typedef __int64 int64_t; 141 typedef __int32 int32_t; 142 typedef __int16 int16_t; 143 typedef __int8 int8_t; 144 # define PRIu64 "I64u" 145 # define PRId64 "I64d" 146 # define PRIx64 "I64x" 147 # endif 148 #endif /* defined _MSC_VER */ 149 150 #ifdef _WIN32 151 /* All char* strings are in UTF-8 format. Added to support Unicode files on Windows */ 152 153 #include "share/win_utf8_io.h" 154 #define flac_printf printf_utf8 155 #define flac_fprintf fprintf_utf8 156 #define flac_vfprintf vfprintf_utf8 157 158 #include "share/windows_unicode_filenames.h" 159 #define flac_fopen flac_internal_fopen_utf8 160 #define flac_chmod flac_internal_chmod_utf8 161 #define flac_utime flac_internal_utime_utf8 162 #define flac_unlink flac_internal_unlink_utf8 163 #define flac_rename flac_internal_rename_utf8 164 #define flac_stat flac_internal_stat64_utf8 165 166 #else 167 168 #define flac_printf printf 169 #define flac_fprintf fprintf 170 #define flac_vfprintf vfprintf 171 172 #define flac_fopen fopen 173 #define flac_chmod chmod 174 #define flac_utime utime 175 #define flac_unlink unlink 176 #define flac_rename rename 177 #define flac_stat stat 178 179 #endif 180 181 #ifdef _WIN32 182 #define flac_stat_s __stat64 /* stat struct */ 183 #define flac_fstat _fstat64 184 #else 185 #define flac_stat_s stat /* stat struct */ 186 #define flac_fstat fstat 187 #endif 188 189 #ifndef M_LN2 190 #define M_LN2 0.69314718055994530942 191 #endif 192 #ifndef M_PI 193 #define M_PI 3.14159265358979323846 194 #endif 195 196 /* FLAC needs to compile and work correctly on systems with a normal ISO C99 197 * snprintf as well as Microsoft Visual Studio which has an non-standards 198 * conformant snprint_s function. 199 * 200 * This function wraps the MS version to behave more like the ISO version. 201 */ 202 #include <stdarg.h> 203 #ifdef __cplusplus 204 extern "C" { 205 #endif 206 int flac_snprintf(char *str, size_t size, const char *fmt, ...); 207 int flac_vsnprintf(char *str, size_t size, const char *fmt, va_list va); 208 #ifdef __cplusplus 209 }; 210 #endif 211 212 #endif /* FLAC__SHARE__COMPAT_H */ 213