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(coverage),
not(feature = "prof"),
not(target_os = "android"),
not(target_arch = "riscv64"),
target_page_size_4k,
target_pointer_width = "64"
))]
#[global_allocator]
static GLOBAL: hardened_malloc::HardenedMalloc = hardened_malloc::HardenedMalloc;
#[cfg(feature = "prof")]
#[global_allocator]
static GLOBAL: tcmalloc::TCMalloc = tcmalloc::TCMalloc;
syd::main! {
syd::set_sigpipe_dfl()?;
let home = env::var_os("HOME")
.map(XPathBuf::from)
.unwrap_or_else(|| "/var/empty".into());
let conf = home.join(b".emacs.d").join(b"init.syd-3");
let mut cmd = Command::new("syd");
let mut buf = itoa::Buffer::new();
let logf = home.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())
}