summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--mullvad-jni/src/lib.rs15
1 files changed, 11 insertions, 4 deletions
diff --git a/mullvad-jni/src/lib.rs b/mullvad-jni/src/lib.rs
index acced273a3..a82acd3628 100644
--- a/mullvad-jni/src/lib.rs
+++ b/mullvad-jni/src/lib.rs
@@ -17,7 +17,9 @@ use mullvad_daemon::{
DaemonCommandChannel, DaemonCommandSender, DaemonConfig,
};
use std::{
+ ffi::CString,
io,
+ os::unix::ffi::OsStrExt,
path::{Path, PathBuf},
sync::{Arc, Mutex, Once, OnceLock},
};
@@ -215,16 +217,21 @@ async fn spawn_daemon_inner(
fn start_logging(log_dir: &Path) -> Result<(), String> {
static LOGGER_RESULT: OnceLock<Result<(), String>> = OnceLock::new();
LOGGER_RESULT
- .get_or_init(|| start_logging_inner(log_dir).map_err(|e| e.display_chain()))
+ .get_or_init(|| start_logging_inner(log_dir))
.to_owned()
}
-fn start_logging_inner(log_dir: &Path) -> Result<(), logging::Error> {
+fn start_logging_inner(log_dir: &Path) -> Result<(), String> {
let log_file = log_dir.join(LOG_FILENAME);
- logging::init_logger(log::LevelFilter::Debug, Some(&log_file), true)?;
- exception_logging::enable();
+ logging::init_logger(log::LevelFilter::Debug, Some(&log_file), true)
+ .map_err(|e| e.display_chain())?;
log_panics::init();
+ exception_logging::set_log_file(
+ CString::new(log_file.as_os_str().as_bytes())
+ .map_err(|_| "Log file path contained interior null bytes: {log_file:?}")?,
+ );
+ exception_logging::enable();
Ok(())
}