]> git.ipfire.org Git - thirdparty/json-c.git/commitdiff
Improved support for IBM operating systems 606/head
authorDavid McCann <mccannd@uk.ibm.com>
Wed, 13 May 2020 14:57:54 +0000 (15:57 +0100)
committerDavid McCann <mccannd@uk.ibm.com>
Thu, 14 May 2020 14:39:35 +0000 (15:39 +0100)
Fix compiler errors and warnings when building on IBM operating systems such as AIX and IBM i.

json_c_version.h
json_object.c
json_tokener.c
json_visit.h
strerror_override.c
tests/test_json_pointer.c
tests/test_parse.c
tests/test_util_file.c

index c0385c402a2ee0d47f408530d0f4e6255715160d..84b6b3eb8e3a0be10dffc5b1970334028145d5b6 100644 (file)
 #ifndef _json_c_version_h_
 #define _json_c_version_h_
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #define JSON_C_MAJOR_VERSION 0
 #define JSON_C_MINOR_VERSION 14
 #define JSON_C_MICRO_VERSION 99
@@ -44,4 +48,8 @@ JSON_EXPORT const char *json_c_version(void); /* Returns JSON_C_VERSION */
  */
 JSON_EXPORT int json_c_version_num(void); /* Returns JSON_C_VERSION_NUM */
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif
index d5ac465880a5a004c2ecc9a9d71dc23f40a40872..527cd3106078a89b541f4a166c9831ea475f2b56 100644 (file)
@@ -58,6 +58,8 @@ static json_object_to_json_string_fn _json_object_userdata_to_json_string;
 #ifndef JSON_NORETURN
 #if defined(_MSC_VER)
 #define JSON_NORETURN __declspec(noreturn)
+#elif defined(__OS400__)
+#define JSON_NORETURN
 #else
 /* 'cold' attribute is for optimization, telling the computer this code
  * path is unlikely.
@@ -901,11 +903,15 @@ static int json_object_double_to_json_string_format(struct json_object *jso, str
         * ECMA 262 section 9.8.1 defines
         * how to handle these cases as strings
         */
+#ifdef HAVE_DECL_ISNAN
        if (isnan(jso->o.c_double))
        {
                size = snprintf(buf, sizeof(buf), "NaN");
        }
-       else if (isinf(jso->o.c_double))
+       else
+#endif
+#ifdef HAVE_DECL_ISINF
+       if (isinf(jso->o.c_double))
        {
                if (jso->o.c_double > 0)
                        size = snprintf(buf, sizeof(buf), "Infinity");
@@ -913,6 +919,7 @@ static int json_object_double_to_json_string_format(struct json_object *jso, str
                        size = snprintf(buf, sizeof(buf), "-Infinity");
        }
        else
+#endif
        {
                const char *std_format = "%.17g";
                int format_drops_decimals = 0;
index 40933ff430518f04c14ea07bd31e25fdeb1c044c..0373d6f7a68690af62970761a846941894553e1b 100644 (file)
@@ -40,6 +40,9 @@
 #ifdef HAVE_XLOCALE_H
 #include <xlocale.h>
 #endif
+#ifdef HAVE_STRINGS_H
+#include <strings.h>
+#endif /* HAVE_STRINGS_H */
 
 #define jt_hexdigit(x) (((x) <= '9') ? (x) - '0' : ((x)&7) + 9)
 
index de6582adf6b8b7d3ae5465d092fb4efbdbb42526..35c46f5b1839117387c42629579b5ce9181714a6 100644 (file)
@@ -8,6 +8,10 @@
  */
 #include "json_object.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 typedef int(json_c_visit_userfunc)(json_object *jso, int flags, json_object *parent_jso,
                                    const char *jso_key, size_t *jso_index, void *userarg);
 
@@ -90,4 +94,8 @@ JSON_EXPORT int json_c_visit(json_object *jso, int future_flags, json_c_visit_us
  */
 #define JSON_C_VISIT_RETURN_ERROR -1
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif /* _json_c_json_visit_h_ */
index 041bd92ff27a00067ad4db1d6135bc50523bc6c2..a93be38fc782a64fed24e975c8bb458ab13e58d2 100644 (file)
@@ -20,7 +20,9 @@ static struct
        ENTRY(EIO),
        ENTRY(ENXIO),
        ENTRY(E2BIG),
+#ifdef ENOEXEC
        ENTRY(ENOEXEC),
+#endif
        ENTRY(EBADF),
        ENTRY(ECHILD),
        ENTRY(EDEADLK),
index 7ad9905256db34226f7145960f75034ad2af6404..34fa2026c6909e7399d059bd51da881b7235b28b 100644 (file)
@@ -60,7 +60,7 @@ static const char *rec_input_json_str =
 /* clang-format on */
 
 /* Example from RFC */
-static void test_example_get()
+static void test_example_get(void)
 {
        int i;
        struct json_object *jo1, *jo2, *jo3;
@@ -126,7 +126,7 @@ static void test_example_get()
 }
 
 /* I'm not too happy with the RFC example to test the recusion of the json_pointer_get() function */
-static void test_recursion_get()
+static void test_recursion_get(void)
 {
        struct json_object *jo2, *jo1 = json_tokener_parse(rec_input_json_str);
 
@@ -161,7 +161,7 @@ static void test_recursion_get()
        json_object_put(jo1);
 }
 
-static void test_wrong_inputs_get()
+static void test_wrong_inputs_get(void)
 {
        struct json_object *jo2, *jo1 = json_tokener_parse(input_json_str);
 
@@ -231,7 +231,7 @@ static void test_wrong_inputs_get()
        json_object_put(jo1);
 }
 
-static void test_example_set()
+static void test_example_set(void)
 {
        struct json_object *jo2, *jo1 = json_tokener_parse(input_json_str);
 
@@ -272,7 +272,7 @@ static void test_example_set()
        json_object_put(jo1);
 }
 
-static void test_wrong_inputs_set()
+static void test_wrong_inputs_set(void)
 {
        struct json_object *jo2, *jo1 = json_tokener_parse(input_json_str);
 
index 895f97196830f794c8fdcfbb837b43609932e936..6014ac1b977aa88feccb26dd72f09c6fc7bd8dd3 100644 (file)
@@ -149,8 +149,8 @@ static void test_utf8_parse()
        // json_tokener_parse doesn't support checking for byte order marks.
        // It's the responsibility of the caller to detect and skip a BOM.
        // Both of these checks return null.
-       char utf8_bom[] = {0xEF, 0xBB, 0xBF, 0x00};
-       char utf8_bom_and_chars[] = {0xEF, 0xBB, 0xBF, '{', '}', 0x00};
+       char* utf8_bom = "\xEF\xBB\xBF";
+       char* utf8_bom_and_chars = "\xEF\xBB\xBF{}";
        single_basic_parse(utf8_bom, 0);
        single_basic_parse(utf8_bom_and_chars, 0);
 }
@@ -446,7 +446,7 @@ static void test_incremental_parse()
                json_tokener_set_flags(tok, step->tok_flags);
 
                if (length == -1)
-                       length = strlen(step->string_to_parse);
+                       length = (int)strlen(step->string_to_parse);
                if (step->char_offset == -1)
                        expected_char_offset = length;
                else
index 2f8f8b5fc3e6b59f533403a2ae4564ec1539818e..9d5066375acae3f43bf703d13babdff8fbbbf9f8 100644 (file)
 
 static void test_read_valid_with_fd(const char *testdir);
 static void test_read_valid_nested_with_fd(const char *testdir);
-static void test_read_nonexistant();
+static void test_read_nonexistant(void);
 static void test_read_closed(void);
 
-static void test_write_to_file();
+static void test_write_to_file(void);
 static void stat_and_cat(const char *file);
 static void test_read_fd_equal(const char *testdir);