intel/tinycbor

`json2cbor.c` doesn't compile on macOS/BSD libc

kkysen opened this issue · 0 comments

json2cbor.c doesn't compile on macOS/BSD libc with the following error:

tools/json2cbor/json2cbor.c:201:9: error: implicit declaration of function 'asprintf' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
      if (asprintf(&metadatakey, "%s%s", item->string, meta_data_marker) < 0 || metadatakey == NULL)
          ^
  1 error generated.

if (asprintf(&metadatakey, "%s%s", item->string, meta_data_marker) < 0 || metadatakey == NULL)

This happens because it defines #define _POSIX_C_SOURCE 200809L, which on some libcs, like macOS's and BSD's (I didn't test BSD, but I've seen similar issues saying the same thing), causes any non-POSIX functionality to not be declared. Thus, when #define _GNU_SOURCE is defined, which normally defines GNU extensions like asprintf, it is superseded by the #define _POSIX_C_SOURCE 200809L.

#define _POSIX_C_SOURCE 200809L
#define _GNU_SOURCE

Is the #define _POSIX_C_SOURCE 200809L needed? Without that define, I was able to compile everything. If it's not needed, I can submit a PR to remove it so it compiles on macOS and BSDs.