diff options
Diffstat (limited to 'src/Common/libzip/compat.h')
-rw-r--r-- | src/Common/libzip/compat.h | 118 |
1 files changed, 85 insertions, 33 deletions
diff --git a/src/Common/libzip/compat.h b/src/Common/libzip/compat.h index dc73f5ce..296ee59e 100644 --- a/src/Common/libzip/compat.h +++ b/src/Common/libzip/compat.h @@ -3,10 +3,10 @@ /* compat.h -- compatibility defines. - Copyright (C) 1999-2016 Dieter Baron and Thomas Klausner + Copyright (C) 1999-2021 Dieter Baron and Thomas Klausner This file is part of libzip, a library to manipulate ZIP archives. - The authors can be contacted at <libzip@nih.at> + The authors can be contacted at <info@libzip.org> Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -20,7 +20,7 @@ 3. The names of the authors may not be used to endorse or promote products derived from this software without specific prior written permission. - + THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -34,29 +34,35 @@ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#ifdef HAVE_CONFIG_H +#include "zipconf.h" + #include "config.h" -#endif /* to have *_MAX definitions for all types when compiling with g++ */ #define __STDC_LIMIT_MACROS -#ifdef _WIN32 -#ifdef ZIP_STATIC -#define ZIP_EXTERN -#else +/* to have ISO C secure library functions */ +#define __STDC_WANT_LIB_EXT1__ 1 + +#if defined(_WIN32) && defined(ZIP_DLL) && !defined(ZIP_STATIC) +#ifdef BUILDING_LIBZIP #define ZIP_EXTERN __declspec(dllexport) +#else +#define ZIP_EXTERN __declspec(dllimport) #endif +#endif + +#ifdef _WIN32 /* for dup(), close(), etc. */ #include <io.h> #endif #ifdef HAVE_STDBOOL_H #include <stdbool.h> -#else +#elif !defined(__BOOL_DEFINED) typedef char bool; -#define true 1 -#define false 0 +#define true 1 +#define false 0 #endif #include <errno.h> @@ -75,62 +81,104 @@ typedef char bool; #define EOVERFLOW EFBIG #endif +/* not supported on at least Windows */ +#ifndef O_CLOEXEC +#define O_CLOEXEC 0 +#endif + #ifdef _WIN32 #if defined(HAVE__CLOSE) -#define close _close +#define close _close #endif #if defined(HAVE__DUP) -#define dup _dup +#define dup _dup #endif /* crashes reported when using fdopen instead of _fdopen on Windows/Visual Studio 10/Win64 */ #if defined(HAVE__FDOPEN) -#define fdopen _fdopen +#define fdopen _fdopen #endif #if !defined(HAVE_FILENO) && defined(HAVE__FILENO) -#define fileno _fileno +#define fileno _fileno #endif -/* Windows' open() doesn't understand Unix permissions */ -#if defined(HAVE__OPEN) -#define open(a, b, c) _open((a), (b)) +#if !defined(HAVE_SNPRINTF) && defined(HAVE__SNPRINTF) +#define snprintf _snprintf #endif -#if defined(HAVE__SNPRINTF) -#define snprintf _snprintf +#if !defined(HAVE__SNWPRINTF_S) +#define _snwprintf_s(buf, bufsz, len, fmt, ...) (_snwprintf((buf), (len), (fmt), __VA_ARGS__)) #endif #if defined(HAVE__STRDUP) #if !defined(HAVE_STRDUP) || defined(_WIN32) #undef strdup -#define strdup _strdup +#define strdup _strdup #endif #endif #if !defined(HAVE__SETMODE) && defined(HAVE_SETMODE) -#define _setmode setmode +#define _setmode setmode #endif #if !defined(HAVE_STRTOLL) && defined(HAVE__STRTOI64) -#define strtoll _strtoi64 +#define strtoll _strtoi64 #endif #if !defined(HAVE_STRTOULL) && defined(HAVE__STRTOUI64) -#define strtoull _strtoui64 +#define strtoull _strtoui64 +#endif +#if defined(HAVE__UNLINK) +#define unlink _unlink #endif #endif #ifndef HAVE_FSEEKO -#define fseeko(s, o, w) (fseek((s), (long int)(o), (w))) +#define fseeko(s, o, w) (fseek((s), (long int)(o), (w))) #endif #ifndef HAVE_FTELLO -#define ftello(s) ((long)ftell((s))) +#define ftello(s) ((long)ftell((s))) +#endif + +#ifdef HAVE_LOCALTIME_S +#ifdef _WIN32 +/* Windows is incompatible to the C11 standard, hurray! */ +#define zip_localtime(t, tm) (localtime_s((tm), (t)) == 0 ? tm : NULL) +#else +#define zip_localtime localtime_s +#endif +#else +#ifdef HAVE_LOCALTIME_R +#define zip_localtime localtime_r +#else +#define zip_localtime(t, tm) (localtime(t)) +#endif #endif -#ifndef HAVE_MKSTEMP -int _zip_mkstemp(char *); -#define mkstemp _zip_mkstemp +#ifndef HAVE_MEMCPY_S +#define memcpy_s(dest, destsz, src, count) (memcpy((dest), (src), (count)) == NULL) +#endif + +#ifndef HAVE_SNPRINTF_S +#ifdef HAVE__SNPRINTF_S +#define snprintf_s(buf, bufsz, fmt, ...) (_snprintf_s((buf), (bufsz), (bufsz), (fmt), __VA_ARGS__)) +#else +#define snprintf_s snprintf +#endif #endif #if !defined(HAVE_STRCASECMP) #if defined(HAVE__STRICMP) -#define strcasecmp _stricmp +#define strcasecmp _stricmp #elif defined(HAVE_STRICMP) -#define strcasecmp stricmp +#define strcasecmp stricmp +#endif +#endif + +#ifndef HAVE_STRNCPY_S +#define strncpy_s(dest, destsz, src, count) (strncpy((dest), (src), (count)), 0) +#endif + +#ifndef HAVE_STRERROR_S +#define strerrorlen_s(errnum) (strlen(strerror(errnum))) +#define strerror_s(buf, bufsz, errnum) ((void)strncpy_s((buf), (bufsz), strerror(errnum), (bufsz)), (buf)[(bufsz)-1] = '\0', strerrorlen_s(errnum) >= (bufsz)) +#else +#ifndef HAVE_STRERRORLEN_S +#define strerrorlen_s(errnum) 8192 #endif #endif @@ -185,7 +233,11 @@ int _zip_mkstemp(char *); #endif #ifndef S_ISDIR -#define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR) +#define S_ISDIR(mode) (((mode)&S_IFMT) == S_IFDIR) +#endif + +#ifndef S_ISREG +#define S_ISREG(mode) (((mode)&S_IFMT) == S_IFREG) #endif #endif /* compat.h */ |