diff --git a/src/xpdev/genwrap.c b/src/xpdev/genwrap.c index 0292cfb6a1237976eb688c03e77449368d04e667..0ad7defb8cec7b85c057915f102a78820f50c445 100644 --- a/src/xpdev/genwrap.c +++ b/src/xpdev/genwrap.c @@ -1123,16 +1123,16 @@ bool terminate_pid(pid_t pid) /****************************************************************************/ char* safe_strerror(int errnum, char *buf, size_t buflen) { - strncpy(buf, "Unknown error", buflen); - buf[buflen - 1] = 0; + snprintf(buf, buflen, "Unknown error: %d", errnum); #if defined(_MSC_VER) strerror_s(buf, buflen, errnum); #elif defined(_WIN32) || defined(__EMSCRIPTEN__) - strncpy(buf, strerror(errnum), buflen); - buf[buflen - 1] = 0; + strlcpy(buf, strerror(errnum), buflen); #elif defined(_GNU_SOURCE) - buf = strerror_r(errnum, buf, buflen); + char* ret = strerror_r(errnum, buf, buflen); + if (ret != buf) + strlcpy(buf, ret, buflen); #else strerror_r(errnum, buf, buflen); #endif