Skip to content

Commit

Permalink
PR json-c#336: since we can't use function overriding (due to problem…
Browse files Browse the repository at this point in the history
…s with it on

OSX) always include the _json_c_strerror function but only enable it with a flag
 during tests.
  • Loading branch information
hawicz committed Jul 15, 2017
1 parent 730ab7b commit fcad0ec
Show file tree
Hide file tree
Showing 6 changed files with 19 additions and 27 deletions.
8 changes: 1 addition & 7 deletions Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -51,14 +51,8 @@ libjson_c_la_SOURCES = \
json_visit.c \
linkhash.c \
printbuf.c \
random_seed.c

if ENABLE_STRERROR_OVERRIDE
libjson_cinclude_HEADERS+= \
strerror_override.h
libjson_c_la_SOURCES+= \
random_seed.c \
strerror_override.c
endif

distclean-local:
-rm -rf $(testsubdir)
Expand Down
16 changes: 0 additions & 16 deletions configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -23,22 +23,6 @@ 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])])

Expand Down
7 changes: 7 additions & 0 deletions strerror_override.c
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
#define STERROR_OVERRIDE_IMPL 1
#include "strerror_override.h"

/*
Expand Down Expand Up @@ -52,6 +53,9 @@ static struct {
{ 0, (char *)0 }
};

// Enabled during tests
int _json_c_strerror_enable = 0;

#define PREFIX "ERRNO="
static char errno_buf[128] = PREFIX;
char *_json_c_strerror(int errno_in)
Expand All @@ -60,6 +64,9 @@ char *_json_c_strerror(int errno_in)
char digbuf[20];
int ii, jj;

if (!_json_c_strerror_enable)
return strerror(errno_in);

// Avoid standard functions, so we don't need to include any
// headers, or guess at signatures.

Expand Down
9 changes: 5 additions & 4 deletions strerror_override.h
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
#ifndef __STRERROR_OVERRIDE_H__
#define __STRERROR_OVERRIDE_H__
#ifndef _json_strerror_override_h_
#define _json_strerror_override_h_

#include "config.h"
#include <errno.h>

#if ENABLE_STRERROR_OVERRIDE
char *_json_c_strerror(int errno_in);

#ifndef STRERROR_OVERRIDE_IMPL
#define strerror _json_c_strerror
#endif

#endif /* __STRERROR_OVERRIDE_H__ */
#endif /* _json_strerror_override_h_ */
3 changes: 3 additions & 0 deletions tests/test_json_pointer.c
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#include "strerror_override.h"
#include "strerror_override_private.h"
#include <assert.h>
#include <stdio.h>
#include <string.h>
Expand Down Expand Up @@ -280,6 +281,8 @@ static void test_wrong_inputs_set()

int main(int argc, char **argv)
{
_json_c_strerror_enable = 1;

test_example_get();
test_recursion_get();
test_wrong_inputs_get();
Expand Down
3 changes: 3 additions & 0 deletions tests/test_util_file.c
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#include "strerror_override.h"
#include "strerror_override_private.h"
#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
Expand Down Expand Up @@ -114,6 +115,8 @@ int main(int argc, char **argv)
// json_object_to_file(file, obj);
// json_object_to_file_ext(file, obj, flags);

_json_c_strerror_enable = 1;

const char *testdir;
if (argc < 2)
{
Expand Down

0 comments on commit fcad0ec

Please sign in to comment.