/*
* The PCI Library -- System-Dependent Stuff
*
- * Copyright (c) 1997--2004 Martin Mares <mj@ucw.cz>
+ * Copyright (c) 1997--2020 Martin Mares <mj@ucw.cz>
*
* Can be freely distributed and used under the terms of the GNU GPL.
*/
#ifdef __GNUC__
#define UNUSED __attribute__((unused))
#define NONRET __attribute__((noreturn))
+#define FORMAT_CHECK(x,y,z) __attribute__((format(x,y,z)))
#else
#define UNUSED
#define NONRET
+#define FORMAT_CHECK(x,y,z)
#define inline
#endif
+typedef u8 byte;
+typedef u16 word;
+
+#ifdef PCI_OS_WINDOWS
+#define strcasecmp _strcmpi
+#define strncasecmp _strnicmp
+#if defined(_MSC_VER) && _MSC_VER < 1900
+#define snprintf _snprintf
+#define vsnprintf _vsnprintf
+#endif
+#endif
+
#ifdef PCI_HAVE_LINUX_BYTEORDER_H
#include <asm/byteorder.h>
#ifdef PCI_OS_SUNOS
#include <sys/byteorder.h>
+#if defined(__i386) && defined(LITTLE_ENDIAN)
+# define BYTE_ORDER LITTLE_ENDIAN
+#elif defined(__sparc) && defined(BIG_ENDIAN)
+# define BYTE_ORDER BIG_ENDIAN
+#else
#define BIG_ENDIAN 4321
+#endif
+#ifndef BYTE_ORDER
#ifdef _LITTLE_ENDIAN
#define BYTE_ORDER 1234
#else
#define BYTE_ORDER 4321
#endif
-#endif
+#endif /* BYTE_ORDER */
+#endif /* PCI_OS_SUNOS */
#ifdef PCI_OS_WINDOWS
-#include <sys/param.h>
+#ifdef __MINGW32__
+ #include <sys/param.h>
+#else
+ #include <io.h>
+ #define BIG_ENDIAN 4321
+ #define LITTLE_ENDIAN 1234
+ #define BYTE_ORDER LITTLE_ENDIAN
+#endif
+#endif
+
+#ifdef PCI_OS_SYLIXOS
+#include <endian.h>
+#endif
+
+#ifdef PCI_OS_DJGPP
+ #define BIG_ENDIAN 4321
+ #define LITTLE_ENDIAN 1234
+ #define BYTE_ORDER LITTLE_ENDIAN
+#endif
+
+#if !defined(BYTE_ORDER)
+#error "BYTE_ORDER not defined for your platform"
#endif
#if BYTE_ORDER == BIG_ENDIAN