From 6e8861776238b71b78649764fc069f370dfa4b92 Mon Sep 17 00:00:00 2001 From: Peter Limkilde Svendsen Date: Wed, 12 Jun 2019 23:47:11 +0200 Subject: [PATCH 1/3] Use fallible conversion in getpagesize() --- src/header/unistd/mod.rs | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/header/unistd/mod.rs b/src/header/unistd/mod.rs index 012153d454..d5ea3f4c1c 100644 --- a/src/header/unistd/mod.rs +++ b/src/header/unistd/mod.rs @@ -1,5 +1,6 @@ //! unistd implementation for Redox, following http://pubs.opengroup.org/onlinepubs/7908799/xsh/unistd.h.html +use core::convert::TryFrom; use core::{mem, ptr, slice}; use c_str::CStr; @@ -334,7 +335,21 @@ pub extern "C" fn getlogin_r(name: *mut c_char, namesize: size_t) -> c_int { #[no_mangle] pub extern "C" fn getpagesize() -> c_int { - sysconf(_SC_PAGESIZE) as c_int + match c_int::try_from(sysconf(_SC_PAGESIZE)) { + Ok(page_size) => page_size, + Err(_) => { + /* Behavior not specified by POSIX for this case. The -1 + * value mimics sysconf()'s behavior, though. + * + * As specified for the limits.h header, the minimum + * acceptable value for {PAGESIZE} is 1. The -1 value thus + * cannot be mistaken for an acceptable value. + * + * POSIX does not specify any possible errors for this + * function, hence no errno setting. */ + -1 + } + } } // #[no_mangle] From 3b06380738deb3ee9686c3d57a49db223c8b0327 Mon Sep 17 00:00:00 2001 From: Peter Limkilde Svendsen Date: Fri, 14 Jun 2019 00:06:11 +0200 Subject: [PATCH 2/3] Add test for getpagesize() --- tests/Makefile | 1 + tests/unistd/getpagesize.c | 14 ++++++++++++++ 2 files changed, 15 insertions(+) create mode 100644 tests/unistd/getpagesize.c diff --git a/tests/Makefile b/tests/Makefile index 31421c63ce..bde3fddb9e 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -112,6 +112,7 @@ NAMES=\ unistd/getcwd \ unistd/gethostname \ unistd/getid \ + unistd/getpagesize \ unistd/link \ unistd/pathconf \ unistd/setid \ diff --git a/tests/unistd/getpagesize.c b/tests/unistd/getpagesize.c new file mode 100644 index 0000000000..f26f7be21c --- /dev/null +++ b/tests/unistd/getpagesize.c @@ -0,0 +1,14 @@ +#include +#include +#include + +#include "test_helpers.h" + +int main(void) { + errno = 0; + int getpagesize_result = getpagesize(); + int getpagesize_errno = errno; + + printf("getpagesize(): %d, errno: %d = %s\n", getpagesize_result, + getpagesize_errno, strerror(getpagesize_errno)); +} From 8b975877e6817c38c8074b07d070c6669d8c984f Mon Sep 17 00:00:00 2001 From: Peter Limkilde Svendsen Date: Fri, 14 Jun 2019 00:07:36 +0200 Subject: [PATCH 3/3] Formatting --- src/header/unistd/mod.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/header/unistd/mod.rs b/src/header/unistd/mod.rs index d5ea3f4c1c..b39328aecc 100644 --- a/src/header/unistd/mod.rs +++ b/src/header/unistd/mod.rs @@ -340,11 +340,11 @@ pub extern "C" fn getpagesize() -> c_int { Err(_) => { /* Behavior not specified by POSIX for this case. The -1 * value mimics sysconf()'s behavior, though. - * + * * As specified for the limits.h header, the minimum * acceptable value for {PAGESIZE} is 1. The -1 value thus * cannot be mistaken for an acceptable value. - * + * * POSIX does not specify any possible errors for this * function, hence no errno setting. */ -1