]> granicus.if.org Git - json-c/commitdiff
build: make `strerror()` override-able
authorAlexandru Ardelean <ardeleanalex@gmail.com>
Thu, 13 Jul 2017 07:11:15 +0000 (10:11 +0300)
committerAlexandru Ardelean <ardeleanalex@gmail.com>
Thu, 13 Jul 2017 07:27:24 +0000 (10:27 +0300)
If we want to override `strerror()` in libjson-c
to make tests consistent across platforms, we
need to do it build-wide as configure/build
option.

Apple linkers make it really hard to override functions
at link-time, and this seems to be locked down on travis-ci.org
[ for security reasons I assume ].
While I got it to work locally, it did not work
when running on travis.

Signed-off-by: Alexandru Ardelean <ardeleanalex@gmail.com>
Makefile.am
configure.ac
json_object.c
json_pointer.c
json_util.c
random_seed.c
strerror_override.c [moved from tests/strerror_override.c with 96% similarity]
strerror_override.h [new file with mode: 0644]
tests/Makefile.am
tests/test_json_pointer.c
tests/test_util_file.c

index 126ceeb625e7f3f4f458dfbae21764d13155bb73..6f8652502f01d80ac7bffca7bf0e716eb206bf5b 100644 (file)
@@ -53,6 +53,12 @@ libjson_c_la_SOURCES = \
        printbuf.c \
        random_seed.c
 
+if ENABLE_STRERROR_OVERRIDE
+libjson_cinclude_HEADERS+= \
+       strerror_override.h
+libjson_c_la_SOURCES+= \
+       strerror_override.c
+endif
 
 distclean-local:
        -rm -rf $(testsubdir)
index bbaacf51964c1bf29d779603df02f6b60d49aef3..7af60bf5552ad3f4202c18a9e6169583948e74ef 100644 (file)
@@ -23,6 +23,22 @@ else
   AC_MSG_RESULT([RDRAND Hardware RNG Hash Seed disabled. Use --enable-rdrand to enable])
 fi
 
+AC_ARG_ENABLE(strerror-override,
+ AS_HELP_STRING([--enable-strerror-override],
+   [Override strerror() function with internal version.]),
+[if test x$enableval = xyes; then
+  enable_strerror_override=yes
+  AC_DEFINE(ENABLE_STRERROR_OVERRIDE, 1, [Override strerror() with internal version])
+fi])
+
+AM_CONDITIONAL([ENABLE_STRERROR_OVERRIDE], [test "x$enable_strerror_override" = "xyes"])
+
+if test "x$enable_strerror_override" = "xyes"; then
+  AC_MSG_RESULT([Overriding `strerror()` function with internal version])
+else
+  AC_MSG_RESULT([Using libc's `strerror()` function])
+fi
+
 # enable silent build by default
 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
 
index ddc96bc1902581204e5cb143909b1c67b24eb33f..8c80426fa9e7f78c50f6397f5c1dbb26ef441638 100644 (file)
 
 #include "config.h"
 
+#include "strerror_override.h"
+
 #include <assert.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <stddef.h>
 #include <string.h>
 #include <math.h>
-#include <errno.h>
 
 #include "debug.h"
 #include "printbuf.h"
index d106e9e9caf8e7883a28f1c38a88552b0e8975f5..2b2a9ef50732d5797c71915eb984fb4b6ba7dff3 100644 (file)
@@ -8,10 +8,11 @@
 
 #include "config.h"
 
+#include "strerror_override.h"
+
 #include <stdarg.h>
 #include <stdio.h>
 #include <stdlib.h>
-#include <errno.h>
 #include <string.h>
 #include <ctype.h>
 
index 9a2f9ff5b67eae5faf7cf6da57b8b73c15310d8c..3a717b7994e70aa5a2c8678ff97ec2a32cd7aae5 100644 (file)
 #include "config.h"
 #undef realloc
 
+#include "strerror_override.h"
+
 #include <stdarg.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <stddef.h>
 #include <limits.h>
 #include <string.h>
-#include <errno.h>
 #include <ctype.h>
 
 #ifdef HAVE_SYS_TYPES_H
index 3b61b770e83892aaedaca508f8c5bf37a32f6b3f..cb086d3b95c789e347871faf50e3fc6c6d7973ee 100644 (file)
@@ -9,6 +9,7 @@
  *
  */
 
+#include "strerror_override.h"
 #include <stdio.h>
 #include "config.h"
 #include "random_seed.h"
@@ -128,7 +129,6 @@ retry:
 #include <string.h>
 #include <fcntl.h>
 #include <unistd.h>
-#include <errno.h>
 #include <stdlib.h>
 #include <sys/stat.h>
 
similarity index 96%
rename from tests/strerror_override.c
rename to strerror_override.c
index 980cbb9c600e3b537c69afb9af6a199dff09677b..6cad0c09e3bde092e47028b77aa6d9a288a4ec9f 100644 (file)
@@ -1,4 +1,4 @@
-#include <errno.h>
+#include "strerror_override.h"
 
 /*
  * Override strerror() to get consistent output across platforms.
@@ -54,7 +54,7 @@ static struct {
 
 #define PREFIX "ERRNO="
 static char errno_buf[128] = PREFIX;
-char *strerror(int errno_in)
+char *_json_c_strerror(int errno_in)
 {
        int start_idx;
        char digbuf[20];
diff --git a/strerror_override.h b/strerror_override.h
new file mode 100644 (file)
index 0000000..96e6bc6
--- /dev/null
@@ -0,0 +1,12 @@
+#ifndef __STRERROR_OVERRIDE_H__
+#define __STRERROR_OVERRIDE_H__
+
+#include "config.h"
+#include <errno.h>
+
+#if ENABLE_STRERROR_OVERRIDE
+char *_json_c_strerror(int errno_in);
+#define strerror       _json_c_strerror
+#endif
+
+#endif /* __STRERROR_OVERRIDE_H__ */ 
index 824ed3044896c70690dbcf605c59600ceb3d7b2e..917d20f679029aacc66d32f645ce427b38becfcb 100644 (file)
@@ -52,7 +52,7 @@ EXTRA_DIST+= test2Formatted_plain.expected
 EXTRA_DIST+= test2Formatted_pretty.expected
 EXTRA_DIST+= test2Formatted_spaced.expected
 
-test_util_file_SOURCES = test_util_file.c strerror_override.c
+test_util_file_SOURCES = test_util_file.c
 
 testsubdir=testSubDir
 TESTS_ENVIRONMENT       = top_builddir=$(top_builddir)
index c3733dea339d75e33a234dd505c64de6e7cd36a5..cc96ab93b88c02210f1413f4ef13a8a43bd4b0b4 100644 (file)
@@ -1,4 +1,4 @@
-#include <errno.h>
+#include "strerror_override.h"
 #include <assert.h>
 #include <stdio.h>
 #include <string.h>
index 5dbdb4774b416df99943a32d7f8583081eee1848..b4918bee57f7aa90b3e4bee424e7841d686ba385 100644 (file)
@@ -1,4 +1,4 @@
-#include <errno.h>
+#include "strerror_override.h"
 #include <stdio.h>
 #include <stdlib.h>
 #include <stddef.h>