single-instance: fix cwd in single instance on macOS (#2609)

* single-instance: fix `cwd` in single instance on macOS

which was the `cwd` of the first instance, instead of the second how it should be and is  on windows and linux.

also add rustfmt.toml to enforce the correct formatting (4 spaces for indent)

* use split_once

* remove rustfmt

* fix indentation

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.app>
This commit is contained in:
Simon Laux
2025-04-18 13:14:52 +00:00
committed by GitHub
parent ff384cbabe
commit dc84f8d8bb
3 changed files with 20 additions and 13 deletions
@@ -77,6 +77,13 @@ fn socket_cleanup(socket: &PathBuf) {
fn notify_singleton(socket: &PathBuf) -> Result<(), Error> {
let stream = UnixStream::connect(socket)?;
let mut bf = BufWriter::new(&stream);
let cwd = std::env::current_dir()
.unwrap_or_default()
.to_str()
.unwrap_or_default()
.to_string();
bf.write_all(cwd.as_bytes())?;
bf.write_all(b"\0\0")?;
let args_joined = std::env::args().collect::<Vec<String>>().join("\0");
bf.write_all(args_joined.as_bytes())?;
bf.flush()?;
@@ -91,12 +98,6 @@ fn listen_for_other_instances<A: Runtime>(
) {
match UnixListener::bind(socket) {
Ok(listener) => {
let cwd = std::env::current_dir()
.unwrap_or_default()
.to_str()
.unwrap_or_default()
.to_string();
tauri::async_runtime::spawn(async move {
for stream in listener.incoming() {
match stream {
@@ -104,9 +105,10 @@ fn listen_for_other_instances<A: Runtime>(
let mut s = String::new();
match stream.read_to_string(&mut s) {
Ok(_) => {
let (cwd, args) = s.split_once("\0\0").unwrap_or_default();
let args: Vec<String> =
s.split('\0').map(String::from).collect();
cb(app.app_handle(), args, cwd.clone());
args.split('\0').map(String::from).collect();
cb(app.app_handle(), args, cwd.to_string());
}
Err(e) => {
tracing::debug!("single_instance failed to be notified: {e}")