From 489ade6eb8fc113368ec034efa340c157eb45629 Mon Sep 17 00:00:00 2001 From: Aram Drevekenin Date: Wed, 25 Nov 2020 17:08:43 +0100 Subject: [PATCH] hotfix(logging): atomically create tmp folders --- src/main.rs | 7 ++++++- src/utils/consts.rs | 3 ++- src/utils/logging.rs | 14 +++++++++++++- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/main.rs b/src/main.rs index 0126069b..04e5d8de 100644 --- a/src/main.rs +++ b/src/main.rs @@ -26,7 +26,10 @@ use crate::layout::Layout; use crate::os_input_output::{get_os_input, OsApi}; use crate::pty_bus::{PtyBus, PtyInstruction, VteEvent}; use crate::screen::{Screen, ScreenInstruction}; -use crate::utils::{consts::MOSAIC_IPC_PIPE, logging::*}; +use crate::utils::{ + consts::{MOSAIC_IPC_PIPE, MOSAIC_TMP_DIR, MOSAIC_TMP_LOG_DIR}, + logging::*, +}; #[derive(Serialize, Deserialize, Debug)] enum ApiCommand { @@ -84,6 +87,8 @@ pub fn main() { stream.write_all(&api_command).unwrap(); } else { let os_input = get_os_input(); + atomic_create_dir(MOSAIC_TMP_DIR).unwrap(); + atomic_create_dir(MOSAIC_TMP_LOG_DIR).unwrap(); start(Box::new(os_input), opts); } } diff --git a/src/utils/consts.rs b/src/utils/consts.rs index e0a6da9f..5aa6aab4 100644 --- a/src/utils/consts.rs +++ b/src/utils/consts.rs @@ -1,3 +1,4 @@ -pub const MOSAIC_TMP_LOG_FILE: &str = "/tmp/mosaic/mosaic-log/log.txt"; +pub const MOSAIC_TMP_DIR: &str = "/tmp/mosaic"; pub const MOSAIC_TMP_LOG_DIR: &str = "/tmp/mosaic/mosaic-log"; +pub const MOSAIC_TMP_LOG_FILE: &str = "/tmp/mosaic/mosaic-log/log.txt"; pub const MOSAIC_IPC_PIPE: &str = "/tmp/mosaic/ipc"; diff --git a/src/utils/logging.rs b/src/utils/logging.rs index 031813ed..4bd53743 100644 --- a/src/utils/logging.rs +++ b/src/utils/logging.rs @@ -7,10 +7,22 @@ use std::{ use crate::utils::consts::{MOSAIC_TMP_LOG_DIR, MOSAIC_TMP_LOG_FILE}; -fn atomic_create_file(file_name: &str) { +pub fn atomic_create_file(file_name: &str) { let _ = fs::OpenOptions::new().create(true).open(file_name); } +pub fn atomic_create_dir(dir_name: &str) -> io::Result<()> { + if let Err(e) = fs::create_dir(dir_name) { + if e.kind() == std::io::ErrorKind::AlreadyExists { + Ok(()) + } else { + Err(e) + } + } else { + Ok(()) + } +} + pub fn debug_log_to_file(message: String) -> io::Result<()> { atomic_create_file(MOSAIC_TMP_LOG_FILE); let mut file = fs::OpenOptions::new()