summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNIIBE Yutaka <gniibe@fsij.org>2022-12-05 11:49:47 +0900
committerNIIBE Yutaka <gniibe@fsij.org>2022-12-05 11:49:47 +0900
commitbe94bcf6aace55e319a203c6b60e31b1c204b0dc (patch)
tree3cdac1f9fff966ed08d797b7d8116a98346c943e
parent3f812a0f5df8aaa82372ea0c40573703119ed83d (diff)
downloadlibgpg-error-be94bcf6aace55e319a203c6b60e31b1c204b0dc.tar.gz
Handle strerror_r failure on non-GNU systems.
* src/strerror.c (system_strerror_r): Make sure to fill the buffer. -- Suggested-by: John Scott <jscott@posteo.net> Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
-rw-r--r--src/strerror.c16
1 files changed, 15 insertions, 1 deletions
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 */