>From be21e1a1d3ffa0b3baa073bdb4b04c80af7f7bee
From: Ori Bernstein <o...@eigenstate.org>
Date: Sun, 22 Mar 2020 18:08:23 -0700
Subject: [PATCH] portability fixes for plan9


this fixes 3 issues:
- First off, the plan 9 C compilers don't handle GNU style varargs,
  so we switch over to c99 style.
- Second, the __attribute((format, printf) is a GNU C extension,
  so we only define it for GNU C. For plan 9, we use the varargck
  pragma to do the same thing.
- Third, 0 length arrays aren't portable, so we use C99 flexible
  array members.
diff -urN a/include/nslog/nslog.h b/include/nslog/nslog.h
--- a/include/nslog/nslog.h     Sun Feb 23 01:49:32 2020
+++ b/include/nslog/nslog.h     Sun Mar 22 18:08:23 2020
@@ -17,6 +17,13 @@
 
 #include <stdarg.h>
 
+#if defined(__GNUC__)
+#    define PRINTF(fmt, args) __attribute__ ((format (printf, 2, 3)))
+#elif defined(_PLAN9)
+#    pragma varargck nslog__log argpos 2
+#    define PRINTF(pos, args)
+#endif
+
 /**
  * Log levels
  *
@@ -181,7 +188,7 @@
  * \param logmsg The log message itself (printf format string)
  * \param args The arguments for the log message
  */
-#define NSLOG(catname, level, logmsg, args...)                         \
+#define NSLOG(catname, level, ...)                             \
        do {                                                            \
                if (NSLOG_LEVEL_##level >= NSLOG_COMPILED_MIN_LEVEL) {  \
                        static nslog_entry_context_t _nslog_ctx = {     \
@@ -193,7 +200,7 @@
                                sizeof(__PRETTY_FUNCTION__) - 1,        \
                                __LINE__,                               \
                        };                                              \
-                       nslog__log(&_nslog_ctx, logmsg, ##args);        \
+                       nslog__log(&_nslog_ctx, __VA_ARGS__);   \
                }                                                       \
        } while(0)
 
@@ -209,7 +216,7 @@
  */
 void nslog__log(nslog_entry_context_t *ctx,
                const char *pattern,
-               ...) __attribute__ ((format (printf, 2, 3)));
+               ...) PRINTF(2, 3);
 
 /**
  * Log error types
diff -urN a/src/core.c b/src/core.c
--- a/src/core.c        Sun Feb 23 01:49:32 2020
+++ b/src/core.c        Sun Mar 22 18:08:23 2020
@@ -19,7 +19,7 @@
 static struct nslog_cork_chain {
        struct nslog_cork_chain *next;
        nslog_entry_context_t context;
-       char message[0]; /* NUL terminated */
+       char message[]; /* NUL terminated */
 } *nslog__cork_chain = NULL, *nslog__cork_chain_last = NULL;
 
 static nslog_callback nslog__cb = NULL;


Reply via email to