From ebfb38ebb2dff3dcb353b9d8cd01d41d9abf486e Mon Sep 17 00:00:00 2001 From: Ben Bridle Date: Tue, 30 Jul 2024 18:30:46 +1200 Subject: Update file device to compile on Windows Construction of OsStrings is handled differently between Windows and Unix, using platform-specific APIs. The method OsStr::as_bytes was also changed to OsStr::as_encoded_bytes at some point between Rust versions 1.69 and 1.80. --- src/devices/file/circular_path_buffer.rs | 9 +++------ src/devices/file/directory_listing.rs | 12 +++--------- 2 files changed, 6 insertions(+), 15 deletions(-) (limited to 'src/devices/file') diff --git a/src/devices/file/circular_path_buffer.rs b/src/devices/file/circular_path_buffer.rs index f828f73..e5d903b 100644 --- a/src/devices/file/circular_path_buffer.rs +++ b/src/devices/file/circular_path_buffer.rs @@ -1,6 +1,4 @@ -use std::ffi::OsString; -use std::os::unix::ffi::OsStringExt; -use std::path::PathBuf; +use super::*; pub struct CircularPathBuffer { buffer: [u8; 256], @@ -52,10 +50,9 @@ impl CircularPathBuffer { pub fn push_byte(&mut self, value: u8) -> Option { if value == 0x00 { let pointer = self.pointer as usize; - let vec = self.buffer[..pointer].to_vec(); + let path = bytes_to_path(&self.buffer[..pointer]); self.clear(); - let os_string: OsString = OsStringExt::from_vec(vec); - Some(os_string.into()) + Some(path) } else { let pointer = self.pointer as usize; self.pointer = self.pointer.wrapping_add(1); diff --git a/src/devices/file/directory_listing.rs b/src/devices/file/directory_listing.rs index 0709fc3..6d669e5 100644 --- a/src/devices/file/directory_listing.rs +++ b/src/devices/file/directory_listing.rs @@ -1,10 +1,5 @@ use super::*; -use std::ffi::OsString; -use std::os::unix::ffi::{OsStrExt, OsStringExt}; -use std::path::{Component, Path, PathBuf}; - - pub struct DirectoryListing { children: Vec, length: u32, @@ -26,7 +21,7 @@ impl DirectoryListing { }; let entry = continue_on_err!(entry_result); let path = continue_on_err!(remove_base(&entry.path(), &base)); - let byte_path = path.as_os_str().as_bytes(); + let byte_path = path.as_os_str().as_encoded_bytes(); if byte_path.len() > 255 { continue; }; @@ -87,8 +82,7 @@ impl DirectoryListing { pub fn child_path(&self) -> Option { self.selected.and_then(|s| self.get(s).and_then(|i| { - let os_string: OsString = OsStringExt::from_vec(i.byte_path.clone()); - Some(os_string.into()) + Some(bytes_to_path(&i.byte_path)) })) } } @@ -113,7 +107,7 @@ pub fn remove_base(absolute_path: &Path, base_path: &Path) -> Result bool { - let bytes = path.as_os_str().as_bytes(); + let bytes = path.as_os_str().as_encoded_bytes(); // Find position of final forward-slash byte. let mut final_slash = None; for (i, byte) in bytes.iter().enumerate() { -- cgit v1.2.3-70-g09d2