I don't have that much experience wrapping c libs, so there might be some corner cases I'm not seeing, but I would quarantine that kind of behaviour as much as possible. So, expose rust types of fixed width and cast it (maybe with range checking) to the c type behind the wrapper.
As a rust programmer and potential user of a lib that uses a c lib behind the scenes, I don't want to think about platform dependent behaviour of C types.
If the maximum value returned by the C function is known, then I'd use specific type size in Rust like i32. I'd add an assert!() or debug_assert!() verifying that assumption.
Allow me to add that the "pure FFI" is usually implemented as a separate crate, usually named "<wrapped-lib>-sys".
The rustic wrapper around this is then named just "<wrapped-lib>".
This is correct. Adding on: most users would only use the Rustic library. The pure FFI library exists as an escape hatch in the case that some pattern is not provided for in the Rustic library.
This is usually why interface libraries often come with both a low-level, bare-bones layer that exposes c_long for what it is, and a high-level interface that just disguises them as i64 for convenience.