diff --git a/src/solaris.rs b/src/solaris.rs index c96ae2a3..203000b0 100644 --- a/src/solaris.rs +++ b/src/solaris.rs @@ -22,12 +22,11 @@ pub fn getrandom_inner(dest: &mut [MaybeUninit]) -> Result<(), Error> { let ptr = chunk.as_mut_ptr().cast::(); let ret = unsafe { libc::getrandom(ptr, chunk.len(), libc::GRND_RANDOM) }; // In case the man page has a typo, we also check for negative ret. - if ret <= 0 { - return Err(last_os_error()); - } // If getrandom(2) succeeds, it should have completely filled chunk. - if (ret as usize) != chunk.len() { - return Err(Error::UNEXPECTED); + match usize::try_from(ret) { + Ok(ret) if ret == chunk.len() => {} // Good. Keep going. + Ok(0) => return Err(last_os_error()), // The syscall failed. + _ => return Err(Error::UNEXPECTED), } } Ok(())