Right now you use tuples in safe wrappers instead of idiomatic `Result`s. Is there a reason for that? To be more efficient you can define `Errno` as `NonZeroU16`, so `Result<(), Errno>` would take strictly 2 bytes.