diff --git a/Cargo.lock b/Cargo.lock index bb7273f6..929591cc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1292,6 +1292,7 @@ dependencies = [ "async-trait", "clap", "core-graphics", + "endi", "env_logger", "futures", "futures-core", diff --git a/Cargo.toml b/Cargo.toml index b0da6331..dda5c5a0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -35,6 +35,7 @@ once_cell = "1.19.0" num_enum = "0.7.2" hostname = "0.4.0" slab = "0.4.9" +endi = "1.1.0" [target.'cfg(unix)'.dependencies] libc = "0.2.148" diff --git a/src/frontend/gtk.rs b/src/frontend/gtk.rs index 9588fad8..a3dad8c4 100644 --- a/src/frontend/gtk.rs +++ b/src/frontend/gtk.rs @@ -11,6 +11,7 @@ use std::{ use crate::frontend::{gtk::window::Window, FrontendRequest}; use adw::Application; +use endi::{Endian, ReadBytes}; use gtk::{ gdk::Display, glib::clone, prelude::*, subclass::prelude::ObjectSubclassIsExt, IconTheme, }; @@ -85,16 +86,14 @@ fn build_ui(app: &Application) { gio::spawn_blocking(move || { match loop { // read length - let mut len = [0u8; 8]; - match rx.read_exact(&mut len) { - Ok(_) => (), + let len = match rx.read_u64(Endian::Big) { + Ok(l) => l, Err(e) if e.kind() == ErrorKind::UnexpectedEof => break Ok(()), Err(e) => break Err(e), }; - let len = usize::from_be_bytes(len); // read payload - let mut buf = vec![0u8; len]; + let mut buf = vec![0u8; len as usize]; match rx.read_exact(&mut buf) { Ok(_) => (), Err(e) if e.kind() == ErrorKind::UnexpectedEof => break Ok(()), diff --git a/src/frontend/gtk/window.rs b/src/frontend/gtk/window.rs index eef0e734..e3726a65 100644 --- a/src/frontend/gtk/window.rs +++ b/src/frontend/gtk/window.rs @@ -10,6 +10,7 @@ use std::net::TcpStream; use adw::prelude::*; use adw::subclass::prelude::*; +use endi::{Endian, WriteBytes}; use glib::{clone, Object}; use gtk::{ gio, @@ -265,8 +266,7 @@ impl Window { let mut stream = self.imp().stream.borrow_mut(); let stream = stream.as_mut().unwrap(); let bytes = json.as_bytes(); - let len = bytes.len().to_be_bytes(); - if let Err(e) = stream.write(&len) { + if let Err(e) = stream.write_u64(Endian::Big, bytes.len() as u64) { log::error!("error sending message: {e}"); }; if let Err(e) = stream.write(bytes) {