unbreak tree for openbsd after #21787
- add `_SC_GETPW_R_SIZE_MAX` constant - declare `struct passwd` - convert `load_self` to `current_exe` Note: OpenBSD don't provide system function to return a valuable Path for `env::current_exe`. The implementation is currently based on the value of `argv[0]`, which couldn't be used when executable is called via PATH.
This commit is contained in:
parent
2bd8ec2d19
commit
5ad3488f29
3 changed files with 12 additions and 8 deletions
|
|
@ -74,6 +74,8 @@ pub const _SC_GETPW_R_SIZE_MAX: libc::c_int = 70;
|
|||
#[cfg(any(target_os = "macos",
|
||||
target_os = "freebsd"))]
|
||||
pub const _SC_GETPW_R_SIZE_MAX: libc::c_int = 71;
|
||||
#[cfg(target_os = "openbsd")]
|
||||
pub const _SC_GETPW_R_SIZE_MAX: libc::c_int = 101;
|
||||
#[cfg(target_os = "android")]
|
||||
pub const _SC_GETPW_R_SIZE_MAX: libc::c_int = 0x0048;
|
||||
|
||||
|
|
@ -91,7 +93,8 @@ pub struct passwd {
|
|||
|
||||
#[repr(C)]
|
||||
#[cfg(any(target_os = "macos",
|
||||
target_os = "freebsd"))]
|
||||
target_os = "freebsd",
|
||||
target_os = "openbsd"))]
|
||||
pub struct passwd {
|
||||
pub pw_name: *mut libc::c_char,
|
||||
pub pw_passwd: *mut libc::c_char,
|
||||
|
|
|
|||
|
|
@ -197,23 +197,23 @@ pub fn current_exe() -> IoResult<Path> {
|
|||
}
|
||||
|
||||
#[cfg(target_os = "openbsd")]
|
||||
pub fn load_self() -> Option<Vec<u8>> {
|
||||
pub fn current_exe() -> IoResult<Path> {
|
||||
use sync::{StaticMutex, MUTEX_INIT};
|
||||
|
||||
static LOCK: StaticMutex = MUTEX_INIT;
|
||||
|
||||
extern {
|
||||
fn rust_load_self() -> *const c_char;
|
||||
fn rust_current_exe() -> *const c_char;
|
||||
}
|
||||
|
||||
let _guard = LOCK.lock();
|
||||
|
||||
unsafe {
|
||||
let v = rust_load_self();
|
||||
let v = rust_current_exe();
|
||||
if v.is_null() {
|
||||
None
|
||||
Err(IoError::last_error())
|
||||
} else {
|
||||
Some(ffi::c_str_to_bytes(&v).to_vec())
|
||||
Ok(Path::new(ffi::c_str_to_bytes(&v).to_vec()))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -333,7 +333,8 @@ pub fn args() -> Args {
|
|||
#[cfg(any(target_os = "linux",
|
||||
target_os = "android",
|
||||
target_os = "freebsd",
|
||||
target_os = "dragonfly"))]
|
||||
target_os = "dragonfly",
|
||||
target_os = "openbsd"))]
|
||||
pub fn args() -> Args {
|
||||
use rt;
|
||||
let bytes = rt::args::clone().unwrap_or(Vec::new());
|
||||
|
|
|
|||
|
|
@ -204,7 +204,7 @@ int *__dfly_error(void) { return __error(); }
|
|||
#include <sys/sysctl.h>
|
||||
#include <limits.h>
|
||||
|
||||
const char * rust_load_self() {
|
||||
const char * rust_current_exe() {
|
||||
static char *self = NULL;
|
||||
|
||||
if (self == NULL) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue