Rust: Work around 'error[E0599]: no method named leak
found for struct std::string::String
in the current scope'
Compiling with Debian GNU/Linux 12 (bookworm) packages: $ apt-cache madison cargo rustc cargo | 0.66.0+ds1-1 | http://deb.debian.org/debian bookworm/main ppc64el Packages cargo | 0.66.0+ds1-1 | http://deb.debian.org/debian bookworm/main Sources rustc | 1.63.0+dfsg1-2 | http://deb.debian.org/debian bookworm/main ppc64el Packages rustc | 1.63.0+dfsg1-2 | http://deb.debian.org/debian bookworm/main Sources ..., we run into: Compiling libformat_parser v0.1.0 ([...]/source-gcc/libgrust/libformat_parser) error[E0599]: no method named `leak` found for struct `std::string::String` in the current scope --> src/lib.rs:396:18 | 396 | ptr: str.leak().as_ptr(), | ^^^^ method not found in `std::string::String` error[E0599]: no method named `leak` found for struct `std::string::String` in the current scope --> src/lib.rs:434:7 | 434 | s.leak(); | ^^^^ method not found in `std::string::String` error[E0599]: no method named `leak` found for struct `std::string::String` in the current scope --> src/lib.rs:439:23 | 439 | ptr: cloned_s.leak().as_ptr(), | ^^^^ method not found in `std::string::String` Locally replace 1.72.0+ method 'leak' for struct 'std::string::String'. libgrust/ * libformat_parser/src/lib.rs: Work around 'error[E0599]: no method named `leak` found for struct `std::string::String` in the current scope'.
This commit is contained in:
parent
85f81ba60e
commit
9e4a87ceb3
1 changed files with 10 additions and 3 deletions
|
@ -5,6 +5,13 @@
|
|||
|
||||
use std::ffi::CStr;
|
||||
|
||||
// Local replacement for 1.72.0+ method 'leak' for struct 'std::string::String',
|
||||
// <https://doc.rust-lang.org/1.72.0/src/alloc/string.rs.html#1853>
|
||||
fn leak_string<'a>(s: String) -> &'a mut str {
|
||||
let slice = s.into_bytes().leak();
|
||||
unsafe { std::str::from_utf8_unchecked_mut(slice) }
|
||||
}
|
||||
|
||||
trait IntoFFI<T> {
|
||||
fn into_ffi(self) -> T;
|
||||
}
|
||||
|
@ -393,7 +400,7 @@ pub extern "C" fn collect_pieces(
|
|||
let rust_string = RustString {
|
||||
len: str.len(),
|
||||
cap: str.capacity(),
|
||||
ptr: str.leak().as_ptr(),
|
||||
ptr: leak_string(str).as_ptr(),
|
||||
};
|
||||
|
||||
FormatArgsHandle(piece_slice, rust_string)
|
||||
|
@ -431,12 +438,12 @@ pub extern "C" fn clone_pieces(
|
|||
let cloned_s = s.clone();
|
||||
|
||||
// FIXME: Documentation
|
||||
s.leak();
|
||||
leak_string(s);
|
||||
|
||||
let rust_string = RustString {
|
||||
len: cloned_s.len(),
|
||||
cap: cloned_s.capacity(),
|
||||
ptr: cloned_s.leak().as_ptr(),
|
||||
ptr: leak_string(cloned_s).as_ptr(),
|
||||
};
|
||||
|
||||
FormatArgsHandle(piece_slice, rust_string)
|
||||
|
|
Loading…
Add table
Reference in a new issue