commit 9a02f8b79138972ddde059e5683108d07b409289 from: Stefan Sperling date: Mon Dec 21 12:59:27 2020 UTC switch to strerror_r(3) in error.c for thread-safety commit - c884fd0a8efbd1c76504f46ddb5b688134983a3a commit + 9a02f8b79138972ddde059e5683108d07b409289 blob - a41a721678814c6e3adef116e9e6445a894d022a blob + 72e00488bedc8ea49b3e20af7eb76ec82839bfa3 --- lib/error.c +++ lib/error.c @@ -87,9 +87,10 @@ got_error_from_errno(const char *prefix) { struct got_custom_error *cerr = get_custom_err(); struct got_error *err = &cerr->err; + char strerr[128]; - snprintf(cerr->msg, sizeof(cerr->msg), "%s: %s", prefix, - strerror(errno)); + strerror_r(errno, strerr, sizeof(strerr)); + snprintf(cerr->msg, sizeof(cerr->msg), "%s: %s", prefix, strerr); err->code = GOT_ERR_ERRNO; err->msg = cerr->msg; @@ -101,9 +102,11 @@ got_error_from_errno2(const char *prefix, const char * { struct got_custom_error *cerr = get_custom_err(); struct got_error *err = &cerr->err; + char strerr[128]; + strerror_r(errno, strerr, sizeof(strerr)); snprintf(cerr->msg, sizeof(cerr->msg), "%s: %s: %s", prefix, prefix2, - strerror(errno)); + strerr); err->code = GOT_ERR_ERRNO; err->msg = cerr->msg; @@ -116,9 +119,11 @@ got_error_from_errno3(const char *prefix, const char * { struct got_custom_error *cerr = get_custom_err(); struct got_error *err = &cerr->err; + char strerr[128]; + strerror_r(errno, strerr, sizeof(strerr)); snprintf(cerr->msg, sizeof(cerr->msg), "%s: %s: %s: %s", prefix, - prefix2, prefix3, strerror(errno)); + prefix2, prefix3, strerr); err->code = GOT_ERR_ERRNO; err->msg = cerr->msg; @@ -131,13 +136,15 @@ got_error_from_errno_fmt(const char *fmt, ...) struct got_custom_error *cerr = get_custom_err(); struct got_error *err = &cerr->err; char buf[PATH_MAX * 4]; + char strerr[128]; va_list ap; va_start(ap, fmt); vsnprintf(buf, sizeof(buf), fmt, ap); va_end(ap); - snprintf(cerr->msg, sizeof(cerr->msg), "%s: %s", buf, strerror(errno)); + strerror_r(errno, strerr, sizeof(strerr)); + snprintf(cerr->msg, sizeof(cerr->msg), "%s: %s", buf, strerr); err->code = GOT_ERR_ERRNO; err->msg = cerr->msg;