From 09ed64bd365bdb294a29e2e6b0149b0581a1fa81 Mon Sep 17 00:00:00 2001 From: Christian Duerr Date: Sun, 12 Jan 2020 01:24:56 +0100 Subject: Fix crash with invalid working directory --- alacritty_terminal/src/config/mod.rs | 14 ++------------ alacritty_terminal/src/tty/unix.rs | 2 +- alacritty_terminal/src/tty/windows/conpty.rs | 6 +++--- alacritty_terminal/src/tty/windows/winpty.rs | 2 +- 4 files changed, 7 insertions(+), 17 deletions(-) (limited to 'alacritty_terminal/src') diff --git a/alacritty_terminal/src/config/mod.rs b/alacritty_terminal/src/config/mod.rs index f3257b7b..d077190b 100644 --- a/alacritty_terminal/src/config/mod.rs +++ b/alacritty_terminal/src/config/mod.rs @@ -15,7 +15,7 @@ use std::borrow::Cow; use std::collections::HashMap; use std::fmt::Display; -use std::path::{Path, PathBuf}; +use std::path::PathBuf; use log::error; use serde::{Deserialize, Deserializer}; @@ -119,7 +119,7 @@ pub struct Config { /// Shell startup directory #[serde(default, deserialize_with = "option_explicit_none")] - working_directory: Option, + pub working_directory: Option, /// Debug options #[serde(default, deserialize_with = "failure_default")] @@ -207,16 +207,6 @@ impl Config { pub fn background_opacity(&self) -> f32 { self.background_opacity.0 } - - #[inline] - pub fn working_directory(&self) -> Option<&Path> { - self.working_directory.as_ref().map(|path_buf| path_buf.as_path()) - } - - #[inline] - pub fn set_working_directory(&mut self, working_directory: Option) { - self.working_directory = working_directory; - } } #[serde(default)] diff --git a/alacritty_terminal/src/tty/unix.rs b/alacritty_terminal/src/tty/unix.rs index ab34d33a..1b01af0f 100644 --- a/alacritty_terminal/src/tty/unix.rs +++ b/alacritty_terminal/src/tty/unix.rs @@ -208,7 +208,7 @@ pub fn new(config: &Config, size: &SizeInfo, window_id: Option) -> } // Handle set working directory option - if let Some(ref dir) = config.working_directory() { + if let Some(dir) = &config.working_directory { builder.current_dir(dir); } diff --git a/alacritty_terminal/src/tty/windows/conpty.rs b/alacritty_terminal/src/tty/windows/conpty.rs index 28cdf4c4..0bed412b 100644 --- a/alacritty_terminal/src/tty/windows/conpty.rs +++ b/alacritty_terminal/src/tty/windows/conpty.rs @@ -204,9 +204,9 @@ pub fn new(config: &Config, size: &SizeInfo, _window_id: Option) -> let cmdline = win32_string(&cmdline(&config)); let cwd = config - .working_directory() - .map(|dir| dir.canonicalize().unwrap()) - .map(|path| win32_string(&path)); + .working_directory + .as_ref() + .map(|pb| win32_string(&pb.as_path().canonicalize().unwrap())); let mut proc_info: PROCESS_INFORMATION = Default::default(); unsafe { diff --git a/alacritty_terminal/src/tty/windows/winpty.rs b/alacritty_terminal/src/tty/windows/winpty.rs index c56ad8f6..2eccecbf 100644 --- a/alacritty_terminal/src/tty/windows/winpty.rs +++ b/alacritty_terminal/src/tty/windows/winpty.rs @@ -42,7 +42,7 @@ pub fn new(config: &Config, size: &SizeInfo, _window_id: Option) -> let (conin, conout) = (agent.conin_name(), agent.conout_name()); let cmdline = cmdline(&config); - let cwd = config.working_directory().map(|dir| dir.canonicalize().unwrap()); + let cwd = config.working_directory.as_ref().map(|pb| pb.as_path().canonicalize().unwrap()); // Spawn process let spawnconfig = SpawnConfig::new( -- cgit