diff --git a/netbsd/CMakeLists.txt b/netbsd/CMakeLists.txt index 3b3e4d04..f76006d5 100644 --- a/netbsd/CMakeLists.txt +++ b/netbsd/CMakeLists.txt @@ -10,6 +10,16 @@ find_package(Threads REQUIRED) target_link_libraries(hidapi_netbsd PRIVATE Threads::Threads) +# check for error: "conflicting types for 'iconv'" +include(CheckCSourceCompiles) +check_c_source_compiles("#include + extern size_t iconv (iconv_t cd, const char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft); + int main() {}" +HIDAPI_ICONV_CONST) +if(HIDAPI_ICONV_CONST) + target_compile_definitions(hidapi_netbsd PRIVATE "ICONV_CONST=const") +endif() + set_target_properties(hidapi_netbsd PROPERTIES EXPORT_NAME "netbsd" diff --git a/netbsd/hid.c b/netbsd/hid.c index 56242143..6188a15e 100644 --- a/netbsd/hid.c +++ b/netbsd/hid.c @@ -30,6 +30,10 @@ #include #include #include +#ifndef ICONV_CONST +#define ICONV_CONST +#endif + #include /* NetBSD */ @@ -1087,7 +1091,7 @@ int HID_API_EXPORT_CALL hid_get_indexed_string(hid_device *dev, int string_index struct usb_string_desc usd; usb_string_descriptor_t *str; iconv_t ic; - const char *src; + ICONV_CONST char *src; size_t srcleft; char *dst; size_t dstleft; @@ -1131,7 +1135,7 @@ int HID_API_EXPORT_CALL hid_get_indexed_string(hid_device *dev, int string_index return -1; } - src = (const char *) str->bString; + src = (ICONV_CONST char *)str->bString; srcleft = str->bLength - 2; dst = (char *) string; dstleft = sizeof(wchar_t[maxlen]);