MINGW = $(findstring MINGW32, $(UNAME))
CC ?= clang
-CFLAGS += -Wall -Wextra -I. -pedantic-errors -std=gnu99
+CFLAGS += -Wall -Wextra -I. -pedantic-errors
#turn on tons of warnings if clang is present
# but also turn off the STUPID ONES
ifeq ($(CC), clang)
* + some other things likewise.
*/
#ifndef _WIN32
-#include <unistd.h>
+# include <unistd.h>
+#else
+# include <io.h>
+ /*
+ * Windows and it's posix underscore bullshit. We simply fix this
+ * with yay, another macro :P
+ */
+# define isatty _isatty
#endif
#define GMQCC_IS_STDOUT(X) ((FILE*)((void*)X) == stdout)
#define STDERR_FILENO 2
#define STDOUT_FILENO 1
-/*
- * Windows and it's posix underscore bullshit. We simply fix this
- * with yay, another macro :P
- */
-#define isatty _isatty
-
enum {
RESET = 0,
BOLD = 1,
# define GMQCC_NORETURN
#endif
-/* no stdint.h in < C99 */
-#if __STDC_VERSION__ < 199901L
-# if CHAR_MIN == -128
- typedef unsigned char uint8_t; /* same as below */
-# elif SCHAR_MIN == -128
- typedef unsigned char uint8_t; /* same as above */
-# endif
-# if SHRT_MAX == 0x7FFF
- typedef short int16_t;
- typedef unsigned short uint16_t;
-# elif INT_MAX == 0x7FFF
- typedef int int16_t;
- typedef unsigned int uint16_t;
-# endif
-# if INT_MAX == 0x7FFFFFFF
- typedef int int32_t;
- typedef unsigned int uint32_t;
-# elif LONG_MAX == 0x7FFFFFFF
- typedef long int32_t;
- typedef unsigned long uint32_t;
-# endif
-
-# if defined(__GNUC__) || defined (__CLANG__)
- typedef int int64_t __attribute__((__mode__(__DI__)));
- typedef unsigned int uint64_t __attribute__((__mode__(__DI__)));
-# elif defined(_MSC_VER)
- typedef __int64 int64_t;
- typedef unsigned __int64 uint64_t;
-# else
- /*
- * Incorrectly size the types so static assertions below will
- * fail. There is no valid way to get a 64bit type at this point
- * without making assumptions of too many things.
- */
- typedef struct { char _fail : 0; } int64_t;
- typedef struct { char _fail : 0; } uint64_t;
-# endif
- /* Ensure type sizes are correct: */
- typedef char uint8_size_is_correct [sizeof(uint8_t) == 1?1:-1];
- typedef char uint16_size_is_correct [sizeof(uint16_t) == 2?1:-1];
- typedef char uint32_size_is_correct [sizeof(uint32_t) == 4?1:-1];
- typedef char uint64_size_is_correct [sizeof(uint64_t) == 8?1:-1];
- typedef char int16_size_if_correct [sizeof(int16_t) == 2?1:-1];
- typedef char int32_size_is_correct [sizeof(int32_t) == 4?1:-1];
- typedef char int64_size_is_correct [sizeof(int64_t) >= 8?1:-1];
-#else
+/* TODO: visual studiblows work around */
+#ifndef _MSC_VER
# include <stdint.h>
#endif
* below. These should be autovectorized by gcc.
*/
#ifdef __x86_64__
-static GMQCC_INLINE uint32_t util_hthashfunc(hash_table_t *ht, const char *key, size_t seed) {
+GMQCC_INLINE uint32_t util_hthashfunc(hash_table_t *ht, const char *key, size_t seed) {
const uint64_t mix = 0xC6A4A7935BD1E995UL;
const int rot = 47;
size_t size = strlen(key);
}
#else
-static GMQCC_INLINE uint32_t util_hthashfunc(hash_table_t *ht, const char *key, size_t seed) {
+GMQCC_INLINE uint32_t util_hthashfunc(hash_table_t *ht, const char *key, size_t seed) {
const uint32_t mix = 0x5BD1E995;
const uint32_t rot = 24;
size_t size = strlen(key);