From ece19bfc70b3742ebb8a2470accca7af96c5bc9a Mon Sep 17 00:00:00 2001 From: Steve Klabnik Date: Fri, 13 Feb 2015 14:57:55 -0500 Subject: [PATCH] Enhance static mut example in FFI chapter. Fixes #9980 --- src/doc/trpl/ffi.md | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/doc/trpl/ffi.md b/src/doc/trpl/ffi.md index 640f9cc388e..5375a8aa46b 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