diff options
author | NIIBE Yutaka <gniibe@fsij.org> | 2022-12-05 11:49:47 +0900 |
---|---|---|
committer | NIIBE Yutaka <gniibe@fsij.org> | 2022-12-05 11:49:47 +0900 |
commit | be94bcf6aace55e319a203c6b60e31b1c204b0dc (patch) | |
tree | 3cdac1f9fff966ed08d797b7d8116a98346c943e | |
parent | 3f812a0f5df8aaa82372ea0c40573703119ed83d (diff) | |
download | libgpg-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.c | 16 |
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 */ |