mirror of
https://github.com/alacritty/alacritty.git
synced 2024-11-18 13:55:23 -05:00
Fix crash with invalid working directory
This commit is contained in:
parent
a82df6ac43
commit
09ed64bd36
6 changed files with 14 additions and 21 deletions
|
@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||
|
||||
- Pressing additional modifiers for mouse bindings will no longer trigger them
|
||||
- Renamed `WINIT_HIDPI_FACTOR` environment variable to `WINIT_X11_SCALE_FACTOR`
|
||||
- Print an error instead of crashing, when startup working directory is invalid
|
||||
|
||||
### Fixed
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@ use std::cmp::max;
|
|||
use std::path::PathBuf;
|
||||
|
||||
use clap::{crate_authors, crate_description, crate_name, crate_version, App, Arg};
|
||||
use log::{self, LevelFilter};
|
||||
use log::{self, error, LevelFilter};
|
||||
|
||||
use alacritty_terminal::config::{Delta, Dimensions, Shell, DEFAULT_NAME};
|
||||
use alacritty_terminal::index::{Column, Line};
|
||||
|
@ -260,12 +260,14 @@ impl Options {
|
|||
}
|
||||
|
||||
pub fn into_config(self, mut config: Config) -> Config {
|
||||
match self.working_dir.or_else(|| config.working_directory.take()) {
|
||||
Some(ref wd) if !wd.is_dir() => error!("Unable to set working directory to {:?}", wd),
|
||||
wd => config.working_directory = wd,
|
||||
}
|
||||
|
||||
if let Some(lcr) = self.live_config_reload {
|
||||
config.set_live_config_reload(lcr);
|
||||
}
|
||||
if let Some(wd) = self.working_dir {
|
||||
config.set_working_directory(Some(wd));
|
||||
}
|
||||
config.shell = self.command.or(config.shell);
|
||||
|
||||
config.hold = self.hold;
|
||||
|
|
|
@ -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<T> {
|
|||
|
||||
/// Shell startup directory
|
||||
#[serde(default, deserialize_with = "option_explicit_none")]
|
||||
working_directory: Option<PathBuf>,
|
||||
pub working_directory: Option<PathBuf>,
|
||||
|
||||
/// Debug options
|
||||
#[serde(default, deserialize_with = "failure_default")]
|
||||
|
@ -207,16 +207,6 @@ impl<T> Config<T> {
|
|||
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<PathBuf>) {
|
||||
self.working_directory = working_directory;
|
||||
}
|
||||
}
|
||||
|
||||
#[serde(default)]
|
||||
|
|
|
@ -208,7 +208,7 @@ pub fn new<C>(config: &Config<C>, size: &SizeInfo, window_id: Option<usize>) ->
|
|||
}
|
||||
|
||||
// Handle set working directory option
|
||||
if let Some(ref dir) = config.working_directory() {
|
||||
if let Some(dir) = &config.working_directory {
|
||||
builder.current_dir(dir);
|
||||
}
|
||||
|
||||
|
|
|
@ -204,9 +204,9 @@ pub fn new<C>(config: &Config<C>, size: &SizeInfo, _window_id: Option<usize>) ->
|
|||
|
||||
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 {
|
||||
|
|
|
@ -42,7 +42,7 @@ pub fn new<C>(config: &Config<C>, size: &SizeInfo, _window_id: Option<usize>) ->
|
|||
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(
|
||||
|
|
Loading…
Reference in a new issue