Vendor things
This commit is contained in:
parent
5deceec006
commit
977e3c17e5
19434 changed files with 10682014 additions and 0 deletions
49
third-party/vendor/backtrace/src/symbolize/gimli/mmap_unix.rs
vendored
Normal file
49
third-party/vendor/backtrace/src/symbolize/gimli/mmap_unix.rs
vendored
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
use super::mystd::fs::File;
|
||||
use super::mystd::os::unix::prelude::*;
|
||||
use core::ops::Deref;
|
||||
use core::ptr;
|
||||
use core::slice;
|
||||
|
||||
#[cfg(not(all(target_os = "linux", target_env = "gnu")))]
|
||||
use libc::mmap as mmap64;
|
||||
#[cfg(all(target_os = "linux", target_env = "gnu"))]
|
||||
use libc::mmap64;
|
||||
|
||||
pub struct Mmap {
|
||||
ptr: *mut libc::c_void,
|
||||
len: usize,
|
||||
}
|
||||
|
||||
impl Mmap {
|
||||
pub unsafe fn map(file: &File, len: usize) -> Option<Mmap> {
|
||||
let ptr = mmap64(
|
||||
ptr::null_mut(),
|
||||
len,
|
||||
libc::PROT_READ,
|
||||
libc::MAP_PRIVATE,
|
||||
file.as_raw_fd(),
|
||||
0,
|
||||
);
|
||||
if ptr == libc::MAP_FAILED {
|
||||
return None;
|
||||
}
|
||||
Some(Mmap { ptr, len })
|
||||
}
|
||||
}
|
||||
|
||||
impl Deref for Mmap {
|
||||
type Target = [u8];
|
||||
|
||||
fn deref(&self) -> &[u8] {
|
||||
unsafe { slice::from_raw_parts(self.ptr as *const u8, self.len) }
|
||||
}
|
||||
}
|
||||
|
||||
impl Drop for Mmap {
|
||||
fn drop(&mut self) {
|
||||
unsafe {
|
||||
let r = libc::munmap(self.ptr, self.len);
|
||||
debug_assert_eq!(r, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue