Skip to content

Commit

Permalink
Rollup merge of rust-lang#22295 - steveklabnik:gh9980, r=alexcrichton
Browse files Browse the repository at this point in the history
  • Loading branch information
steveklabnik committed Feb 15, 2015
2 parents 51abc97 + ece19bf commit a3a1f86
Showing 1 changed file with 11 additions and 4 deletions.
15 changes: 11 additions & 4 deletions src/doc/trpl/ffi.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down

0 comments on commit a3a1f86

Please sign in to comment.