Define qu and llu in str.h and _Static_assert that they're 64 bits.
authorEmil Mikulic <emikulic@gmail.com>
Sat, 25 Jan 2014 08:02:18 +0000 (19:02 +1100)
committerEmil Mikulic <emikulic@gmail.com>
Sat, 25 Jan 2014 14:07:28 +0000 (01:07 +1100)
cdefs.h
daylog.c
str.h

diff --git a/cdefs.h b/cdefs.h
index a0405eb..32bad88 100644 (file)
--- a/cdefs.h
+++ b/cdefs.h
@@ -26,7 +26,7 @@
 #endif
 
 #if !defined(__STDC_VERSION__) || __STDC_VERSION__ < 199901
-#define restrict __restrict
+# define restrict __restrict
 #endif
 
 #ifndef MAX
 # define MIN(a,b) ((a) < (b) ? (a) : (b))
 #endif
 
+#if !defined(__STDC_VERSION__) || __STDC_VERSION__ < 201112L
+# ifdef __COUNTER__
+#  define _Static_assert(x, y)    __Static_assert(x, __COUNTER__)
+# else
+#  define _Static_assert(x, y)    __Static_assert(x, __LINE__)
+# endif
+# define __Static_assert(x, y)   ___Static_assert(x, y)
+# define ___Static_assert(x, y)  typedef char __assert_ ## y[(x) ? 1 : -1]
+#endif
+
 /* vim:set ts=3 sw=3 tw=78 expandtab: */
index 4d5bed5..eb1a1a6 100644 (file)
--- a/daylog.c
+++ b/daylog.c
@@ -27,9 +27,6 @@ static const char *daylog_fn = NULL;
 static time_t today_real, tomorrow_real;
 static uint64_t bytes_in, bytes_out, pkts_in, pkts_out;
 
-typedef long long unsigned int qu; /* as in appendf("%qu") */
-typedef long long unsigned int llu; /* as in printf("%llu") */
-
 #define DAYLOG_DATE_LEN 26 /* strlen("1900-01-01 00:00:00 +1234") + 1 */
 static char datebuf[DAYLOG_DATE_LEN];
 
diff --git a/str.h b/str.h
index 80e9e23..24a8ce1 100644 (file)
--- a/str.h
+++ b/str.h
 
 #include <sys/types.h>
 #include <stdarg.h>
+#include <stdint.h>  /* for uint64_t */
+
+typedef long long unsigned int qu; /* as in appendf("%qu") */
+typedef long long unsigned int llu; /* as in printf("%llu") */
+
+_Static_assert(sizeof(qu) == sizeof(uint64_t), "qu must be uint64_t");
+_Static_assert(sizeof(llu) == sizeof(uint64_t), "llu must be uint64_t");
 
 /* Note: the contents are 8-bit clean and not zero terminated! */