hotpatch_macros

Crates.iohotpatch_macros
lib.rshotpatch_macros
version0.3.0
sourcesrc
created_at2020-12-18 23:29:07.656074
updated_at2021-02-09 03:23:09.382268
descriptionMacros for hotpatch
homepage
repositoryhttps://github.com/Shizcow/hotpatch
max_upload_size
id324469
size21,326
Devin Pohl (Shizcow)

documentation

README

hotpatch

crates.io docs.rs

This crate is primarily used to load new function definitions from shared object files in an exceedingly easy way.

Key features:

  • Thread safe
  • Type safe
  • Works for functions of any signature
  • Namespace aware

Short Example

The following shows how dead-simple this crate is to use:

// main.rs
use hotpatch::*;

#[patchable]
fn foo() { }

fn main() -> Result<(), Box<dyn std::error::Error>> {
  foo(); // does nothing
  foo.hotpatch_lib("libsomething.so")?;
  foo(); // does something totally different!
  foo.hotpatch_fn(|| println!("Dyamic!"))?;
  foo(); // even more modification!
  Ok(())
}

Warning

Don't hotpatch the function you're currently in, or any of its parents.

Because hotpatch doesn't allow multiple function definitions to be in affect at the same time, this will cause a deadlock.

It is possible to do this with the force functions, however they are unsafe, as in a multithreaded enironment this could cause multiple function definitions to be in effect at once.

Docs

For more information, see the docs.

TODO

This crate is still has a long way to go before being "finished". Below are some items left to do. Submit an issue or PR to this section for feature requests!

  • no_std and use features to give the widest possible functionality
    • probably will need to move back to lazy_static
  • methods (in progress)
  • #[patchable] ||() to generate from a closure (is this even possible?)
  • lower compile times
    • include only necessary features for sub-dependencies
  • properly document nightly feature requirements
Commit count: 172

cargo fmt