]> git.xonotic.org Git - xonotic/gmqcc.git/blobdiff - gmqcc.h
Resolve undefined functions to compiler builtins if they exist.
[xonotic/gmqcc.git] / gmqcc.h
diff --git a/gmqcc.h b/gmqcc.h
index 7ad9a28319dfe26b447320b3bb32cfa1fe9bc656..bf506fff895812040a49a4fe7abe2e2df0300e36 100644 (file)
--- a/gmqcc.h
+++ b/gmqcc.h
@@ -36,8 +36,8 @@
 #endif /*! _MSC_VER */
 
 #define GMQCC_VERSION_MAJOR 0
-#define GMQCC_VERSION_MINOR 4
-#define GMQCC_VERSION_PATCH 0
+#define GMQCC_VERSION_MINOR 3
+#define GMQCC_VERSION_PATCH 6
 #define GMQCC_VERSION_BUILD(J,N,P) (((J)<<16)|((N)<<8)|(P))
 #define GMQCC_VERSION \
     GMQCC_VERSION_BUILD(GMQCC_VERSION_MAJOR, GMQCC_VERSION_MINOR, GMQCC_VERSION_PATCH)
@@ -150,7 +150,7 @@ GMQCC_IND_STRING(GMQCC_VERSION_PATCH) \
 #    define GMQCC_NORETURN
 #endif /*! (defined(__GNUC__) && __GNUC__ >= 2) || defined (__CLANG__) */
 
-#if (defined(__GNUC__)) || defined(__CLANG__)
+#if defined(__GNUC__) || defined(__CLANG__)
 #   define GMQCC_LIKELY(X)   __builtin_expect((X), 1)
 #   define GMQCC_UNLIKELY(X) __builtin_expect((X), 0)
 #else
@@ -158,6 +158,14 @@ GMQCC_IND_STRING(GMQCC_VERSION_PATCH) \
 #   define GMQCC_UNLIKELY(X) (X)
 #endif
 
+#if defined(__GNUC__) || defined(__CLANG__)
+#   define GMQCC_RESTRICT __restrict__
+#elif defined(__MSC_VER)
+#   define GMQCC_RESTRICT __restrict
+#else
+#   define GMQCC_RESTRICT
+#endif
+
 #define GMQCC_ARRAY_COUNT(X) (sizeof(X) / sizeof((X)[0]))
 
 #ifndef _MSC_VER
@@ -256,14 +264,14 @@ GMQCC_IND_STRING(GMQCC_VERSION_PATCH) \
 /* stat.c */
 void  stat_info          (void);
 char *stat_mem_strdup    (const char *, size_t,         const char *, bool);
-void *stat_mem_reallocate(void *,       size_t, size_t, const char *);
+void *stat_mem_reallocate(void *,       size_t, size_t, const char *, const char *);
 void  stat_mem_deallocate(void *);
-void *stat_mem_allocate  (size_t, size_t, const char *);
+void *stat_mem_allocate  (size_t, size_t, const char *, const char *);
 
-#define mem_a(SIZE)              stat_mem_allocate  ((SIZE), __LINE__, __FILE__)
+#define mem_a(SIZE)              stat_mem_allocate  ((SIZE), __LINE__, __FILE__, #SIZE)
 #define mem_d(PTRN)              stat_mem_deallocate((void*)(PTRN))
-#define mem_r(PTRN, SIZE)        stat_mem_reallocate((void*)(PTRN), (SIZE), __LINE__, __FILE__)
-#define mem_af(SIZE, FILE, LINE) stat_mem_allocate  ((SIZE), (LINE), (FILE))
+#define mem_r(PTRN, SIZE)        stat_mem_reallocate((void*)(PTRN), (SIZE), __LINE__, __FILE__, #SIZE)
+#define mem_af(SIZE, FILE, LINE) stat_mem_allocate  ((SIZE), (LINE), (FILE), #SIZE)
 
 /* TODO: rename to mem variations */
 #define util_strdup(SRC)         stat_mem_strdup((char*)(SRC), __LINE__, __FILE__, false)
@@ -315,7 +323,6 @@ const char      *util_ctime    (const time_t *timer);
 typedef struct fs_file_s fs_file_t;
 
 bool             util_isatty(fs_file_t *);
-const char      *util_tmpnam(char *);
 
 /*
  * A flexible vector implementation: all vector pointers contain some