std: use libc version of _NSGetArgc/_NSGetArgv

This commit is contained in:
joboet 2026-02-15 17:06:36 +01:00
parent f21b4c0888
commit bd523647a4
No known key found for this signature in database
GPG key ID: 704E0149B0194B3C

View file

@ -164,7 +164,7 @@ mod imp {
// of this used `[[NSProcessInfo processInfo] arguments]`.
#[cfg(target_vendor = "apple")]
mod imp {
use crate::ffi::{c_char, c_int};
use crate::ffi::c_char;
pub unsafe fn init(_argc: isize, _argv: *const *const u8) {
// No need to initialize anything in here, `libdyld.dylib` has already
@ -172,12 +172,6 @@ mod imp {
}
pub fn argc_argv() -> (isize, *const *const c_char) {
unsafe extern "C" {
// These functions are in crt_externs.h.
fn _NSGetArgc() -> *mut c_int;
fn _NSGetArgv() -> *mut *mut *mut c_char;
}
// SAFETY: The returned pointer points to a static initialized early
// in the program lifetime by `libdyld.dylib`, and as such is always
// valid.
@ -187,9 +181,9 @@ mod imp {
// doesn't exist a lock that we can take. Instead, it is generally
// expected that it's only modified in `main` / before other code
// runs, so reading this here should be fine.
let argc = unsafe { _NSGetArgc().read() };
let argc = unsafe { libc::_NSGetArgc().read() };
// SAFETY: Same as above.
let argv = unsafe { _NSGetArgv().read() };
let argv = unsafe { libc::_NSGetArgv().read() };
// Cast from `*mut *mut c_char` to `*const *const c_char`
(argc as isize, argv.cast())