From 1b6a04ca5504955c571d1c97504fb45ea0befee4 Mon Sep 17 00:00:00 2001
From: Valentin Popov <valentin@popov.link>
Date: Mon, 8 Jan 2024 01:21:28 +0400
Subject: Initial vendor packages

Signed-off-by: Valentin Popov <valentin@popov.link>
---
 vendor/backtrace/src/symbolize/gimli/mmap_unix.rs | 49 +++++++++++++++++++++++
 1 file changed, 49 insertions(+)
 create mode 100644 vendor/backtrace/src/symbolize/gimli/mmap_unix.rs

(limited to 'vendor/backtrace/src/symbolize/gimli/mmap_unix.rs')

diff --git a/vendor/backtrace/src/symbolize/gimli/mmap_unix.rs b/vendor/backtrace/src/symbolize/gimli/mmap_unix.rs
new file mode 100644
index 0000000..261ffc1
--- /dev/null
+++ b/vendor/backtrace/src/symbolize/gimli/mmap_unix.rs
@@ -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);
+        }
+    }
+}
-- 
cgit v1.2.3