use std::{
env,
os::{fd::AsRawFd, unix::process::CommandExt},
process::Command,
};
use nix::{fcntl::OFlag, sys::stat::Mode};
use syd::path::XPathBuf;
#[cfg(all(
not(target_os = "android"),
not(target_arch = "loongarch64"),
not(target_arch = "riscv64"),
target_page_size_4k,
target_pointer_width = "64"
))]
#[global_allocator]
static GLOBAL: hardened_malloc::HardenedMalloc = hardened_malloc::HardenedMalloc;
syd::main! {
syd::set_sigpipe_dfl()?;
let home = match env::var_os("HOME") {
Some(home) => XPathBuf::from(home),
None => XPathBuf::try_from("/var/empty")?,
};
let conf = home.try_join(b".emacs.d")?.try_join(b"init.syd-3")?;
let mut cmd = Command::new("syd");
let mut buf = itoa::Buffer::new();
let logf = home.try_join(b".emacs.d/syd.log")?;
#[expect(clippy::disallowed_methods)]
let file = nix::fcntl::open(
&logf,
OFlag::O_CREAT | OFlag::O_APPEND,
Mode::from_bits_truncate(0o600),
)?;
cmd.env("SYD_LOG_FD", buf.format(file.as_raw_fd()));
let argv: Vec<String> = env::args().skip(1).collect();
if conf.exists(true) {
cmd.arg("-P");
cmd.arg(conf);
} else {
cmd.arg("-plib");
}
cmd.args(["--", "emacs", "--load=/dev/syd.el"]);
cmd.args(&argv);
Err(cmd.exec().into())
}