From be94bcf6aace55e319a203c6b60e31b1c204b0dc Mon Sep 17 00:00:00 2001 From: NIIBE Yutaka Date: Mon, 5 Dec 2022 11:49:47 +0900 Subject: Handle strerror_r failure on non-GNU systems. * src/strerror.c (system_strerror_r): Make sure to fill the buffer. -- Suggested-by: John Scott Signed-off-by: NIIBE Yutaka --- src/strerror.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/strerror.c b/src/strerror.c index fb1bebf..51e347b 100644 --- a/src/strerror.c +++ b/src/strerror.c @@ -96,7 +96,21 @@ system_strerror_r (int no, char *buf, size_t buflen) static int system_strerror_r (int no, char *buf, size_t buflen) { - return strerror_r (no, buf, buflen); + int saved_errno; + int r = strerror_r (no, buf, buflen); + + if (r) + { + if (r < 0) + saved_errno = errno; + else + saved_errno = r; + + snprintf (buf, buflen, "[errno=%i]\n", r); + return saved_errno; + } + + return 0; } #endif /* STRERROR_R_CHAR_P */ -- cgit v1.2.3