use private mapping (otherwise permission error on KDE)

This commit is contained in:
Ferdinand Schober
2023-02-14 00:49:50 +01:00
parent f1a510ec36
commit 6aa525c960
2 changed files with 7 additions and 6 deletions

View File

@@ -3,7 +3,7 @@ use crate::{
request, request,
}; };
use memmap::Mmap; use memmap::MmapOptions;
use std::{ use std::{
fs::File, fs::File,
@@ -461,7 +461,8 @@ impl Dispatch<wl_keyboard::WlKeyboard, ()> for App {
fd, fd,
size: _, size: _,
} => { } => {
let mmap = unsafe { Mmap::map(&File::from_raw_fd(fd.as_raw_fd())).unwrap() }; let fd = unsafe { &File::from_raw_fd(fd.as_raw_fd()) };
let mmap = unsafe { MmapOptions::new().map_copy(fd).unwrap() };
app.server.offer_data(request::Request::KeyMap, mmap); app.server.offer_data(request::Request::KeyMap, mmap);
} }
_ => (), _ => (),

View File

@@ -7,7 +7,7 @@ use std::{
thread::{self, JoinHandle}, fmt::Display, thread::{self, JoinHandle}, fmt::Display,
}; };
use memmap::Mmap; use memmap::MmapMut;
#[derive(Copy, Clone, PartialEq, Eq, Hash)] #[derive(Copy, Clone, PartialEq, Eq, Hash)]
pub enum Request { pub enum Request {
@@ -30,7 +30,7 @@ impl TryFrom<[u8; 4]> for Request {
#[derive(Clone)] #[derive(Clone)]
pub struct Server { pub struct Server {
data: Arc<RwLock<HashMap<Request, Mmap>>>, data: Arc<RwLock<HashMap<Request, MmapMut>>>,
} }
impl Server { impl Server {
@@ -58,7 +58,7 @@ impl Server {
} }
pub fn listen(port: u16) -> Result<(Server, JoinHandle<()>), Box<dyn Error>> { pub fn listen(port: u16) -> Result<(Server, JoinHandle<()>), Box<dyn Error>> {
let data: Arc<RwLock<HashMap<Request, Mmap>>> = Arc::new(RwLock::new(HashMap::new())); let data: Arc<RwLock<HashMap<Request, MmapMut>>> = Arc::new(RwLock::new(HashMap::new()));
let listen_addr = SocketAddr::new("0.0.0.0".parse().unwrap(), port); let listen_addr = SocketAddr::new("0.0.0.0".parse().unwrap(), port);
let server = Server { data }; let server = Server { data };
let server_copy = server.clone(); let server_copy = server.clone();
@@ -78,7 +78,7 @@ impl Server {
Ok((server_copy, thread)) Ok((server_copy, thread))
} }
pub fn offer_data(&self, req: Request, d: Mmap) { pub fn offer_data(&self, req: Request, d: MmapMut) {
self.data.write().unwrap().insert(req, d); self.data.write().unwrap().insert(req, d);
} }
} }