Skip to content

Commit 0420960

Browse files
authored
Fix strerror_r error test (#88)
`man 3 strerror_r` says: The XSI-compliant strerror_r() function returns 0 on success. On error, a (positive) error number is returned (since glibc 2.13), or -1 is returned and errno is set to indicate the error (glibc versions before 2.13).
1 parent dfd2144 commit 0420960

File tree

2 files changed

+10
-4
lines changed

2 files changed

+10
-4
lines changed

src/unix.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,13 @@ where
3030
{
3131
let mut buf = [0u8; 1024];
3232
let c_str = unsafe {
33-
if strerror_r(err.0, buf.as_mut_ptr() as *mut _, buf.len() as size_t) < 0 {
34-
let fm_err = errno();
33+
let rc = strerror_r(err.0, buf.as_mut_ptr() as *mut _, buf.len() as size_t);
34+
if rc != 0 {
35+
// Handle negative return codes for compatibility with glibc < 2.13
36+
let fm_err = match rc < 0 {
37+
true => errno(),
38+
false => Errno(rc),
39+
};
3540
if fm_err != Errno(libc::ERANGE) {
3641
return callback(Err(fm_err));
3742
}

src/wasi.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,9 @@ where
3030
{
3131
let mut buf = [0u8; 1024];
3232
let c_str = unsafe {
33-
if strerror_r(err.0, buf.as_mut_ptr() as *mut _, buf.len() as size_t) < 0 {
34-
let fm_err = errno();
33+
let rc = strerror_r(err.0, buf.as_mut_ptr() as *mut _, buf.len() as size_t);
34+
if rc != 0 {
35+
let fm_err = Errno(rc);
3536
if fm_err != Errno(libc::ERANGE) {
3637
return callback(Err(fm_err));
3738
}

0 commit comments

Comments
 (0)