Mark 'Clipboard::new' as 'unsafe'

Since this call takes raw pointer it's generally unsafe.
This commit is contained in:
Kirill Chibisov 2020-09-30 19:13:15 +03:00 committed by GitHub
parent eef2ca9f2e
commit 0577a468c3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 15 additions and 8 deletions

View file

@ -3,6 +3,7 @@
## Unreleased ## Unreleased
- Updated smithay-client-toolkit to 0.12 - Updated smithay-client-toolkit to 0.12
- **Breaking** `Clipboard::new` is now marked with `unsafe`
## 0.5.2 -- 2020-08-30 ## 0.5.2 -- 2020-08-30

View file

@ -172,7 +172,7 @@ fn main() {
sctk::WaylandSource::new(queue).quick_insert(event_loop.handle()).unwrap(); sctk::WaylandSource::new(queue).quick_insert(event_loop.handle()).unwrap();
let clipboard = Clipboard::new(display.get_display_ptr() as *mut _); let clipboard = unsafe { Clipboard::new(display.get_display_ptr() as *mut _) };
let mut dispatch_data = DispatchData::new(clipboard); let mut dispatch_data = DispatchData::new(clipboard);
loop { loop {

View file

@ -3,6 +3,7 @@
//! Provides access to the Wayland clipboard for gui applications. The user should have surface //! Provides access to the Wayland clipboard for gui applications. The user should have surface
//! around. //! around.
#![deny(clippy::all, clippy::if_not_else, clippy::enum_glob_use, clippy::wrong_pub_self_convention)]
use std::ffi::c_void; use std::ffi::c_void;
use std::io::Result; use std::io::Result;
use std::sync::mpsc::{self, Receiver, Sender}; use std::sync::mpsc::{self, Receiver, Sender};
@ -23,8 +24,13 @@ pub struct Clipboard {
impl Clipboard { impl Clipboard {
/// Creates new clipboard which will be running on its own thread with its own event queue to /// Creates new clipboard which will be running on its own thread with its own event queue to
/// handle clipboard requests. /// handle clipboard requests.
pub fn new(display: *mut c_void) -> Self { ///
let display = unsafe { Display::from_external_display(display as *mut _) }; /// # Safety
///
/// `display` must be a valid `*mut wl_display` pointer, and it must remain
/// valid for as long as `Clipboard` object is alive.
pub unsafe fn new(display: *mut c_void) -> Self {
let display = Display::from_external_display(display as *mut _);
// Create channel to send data to clipboard thread. // Create channel to send data to clipboard thread.
let (request_sender, clipboard_request_receiver) = mpsc::channel(); let (request_sender, clipboard_request_receiver) = mpsc::channel();

View file

@ -211,11 +211,11 @@ fn worker_impl(display: Display, request_rx: Receiver<Command>, reply_tx: Sender
// Reset the time we're sleeping. // Reset the time we're sleeping.
sa_tracker.reset_sleep(); sa_tracker.reset_sleep();
if queue.sync_roundtrip(&mut dispatch_data, |_, _, _| unimplemented!()).is_err() { if queue.sync_roundtrip(&mut dispatch_data, |_, _, _| unimplemented!()).is_err()
if request == Command::LoadPrimary || request == Command::Load { && (request == Command::LoadPrimary || request == Command::Load)
handlers::reply_error(&reply_tx, "primary clipboard is not available."); {
break; handlers::reply_error(&reply_tx, "primary clipboard is not available.");
} break;
} }
// Get latest observed seat and serial. // Get latest observed seat and serial.