relative

Crates.io Apache-2.0 licensed Build Status Build Status Build Status

Docs

A type to wrap &'static references such that they can be safely sent between other processes running the same binary.

References are adjusted relative to a base when (de)serialised, which accounts for binaries being dynamically loaded at different addresses under multiple invocations.

It being the same binary is checked by serialising the build_id alongside the relative pointer, which is validated at deserialisation.

Example

Local process

rust let x: &'static [u16;4] = &[2,3,5,8]; // unsafe as it's up to the user to ensure the reference is into static memory let relative = unsafe{Pointer::from(x)}; // send `relative` to remote...

Remote process

rust // receive `relative` println!("{:?}", relative.to()); // prints "[2, 3, 5, 8]"

Note

This currently requires Rust nightly.

License

Licensed under Apache License, Version 2.0, (LICENSE.txt or http://www.apache.org/licenses/LICENSE-2.0).

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be licensed as above, without any additional terms or conditions.