diff --git a/src/doc/trpl/ffi.md b/src/doc/trpl/ffi.md index 640f9cc388ef0..5375a8aa46b30 100644 --- a/src/doc/trpl/ffi.md +++ b/src/doc/trpl/ffi.md @@ -420,7 +420,7 @@ fn main() { ``` Alternatively, you may need to alter global state provided by a foreign -interface. To do this, statics can be declared with `mut` so rust can mutate +interface. To do this, statics can be declared with `mut` so we can mutate them. ```no_run @@ -436,12 +436,19 @@ extern { fn main() { let prompt = CString::from_slice(b"[my-awesome-shell] $"); - unsafe { rl_prompt = prompt.as_ptr(); } - // get a line, process it - unsafe { rl_prompt = ptr::null(); } + unsafe { + rl_prompt = prompt.as_ptr(); + + println!("{}", rl_prompt); + + rl_prompt = ptr::null(); + } } ``` +Note that all interaction with a `static mut` is unsafe, both reading and +writing. Dealing with global mutable state requires a great deal of care. + # Foreign calling conventions Most foreign code exposes a C ABI, and Rust uses the platform's C calling convention by default when