This changes all the extern C functions in `hyper::ffi` to check passed pointer arguments for being `NULL` before trying to use them. Before, we would just assume the programmer had passed a good pointer, which could result in segmentation faults. Now: - In debug builds, it will assert they aren't null, and so if they are, a message identifying the argument name will be printed and then the process will crash. - In release builds, it will still check for null, but if found, it will return early, with a return value indicating failure if the return type allows (such as returning NULL, or `HYPERE_INVALID_ARG`). Closes #2620
C API for hyper
This provides auxiliary pieces for a C API to use the hyper library.
Unstable
The C API of hyper is currently unstable, which means it's not part of the semver contract as the rest of the Rust API is.
Because of that, it's only accessible if --cfg hyper_unstable_ffi is passed to rustc when compiling. The easiest way to do that is setting the RUSTFLAGS environment variable.
Building
The C API is part of the Rust library, but isn't compiled by default. Using cargo, it can be compiled with the following command:
RUSTFLAGS="--cfg hyper_unstable_ffi" cargo build --features client,http1,http2,ffi