mirror of
https://github.com/rust-lang/rust.git
synced 2025-04-28 02:57:37 +00:00
Rollup merge of #107866 - sunfishcode:sunfishcode/wasi-lazy-environ, r=workingjubilee
Allow wasi-libc to initialize its environment variables lazily. Use `__wasilibc_get_environ()` to read the environment variable list from wasi-libc instead of using `environ`. `environ` is a global variable which effectively requires wasi-libc to initialize the environment variables eagerly, and `__wasilibc_get_environ()` is specifically designed to be an alternative that lets wasi-libc intiailize its environment variables lazily. This should have the side effect of fixing at least some of the cases of #107635.
This commit is contained in:
commit
a4c64b9c0e
@ -21,6 +21,7 @@ mod libc {
|
||||
extern "C" {
|
||||
pub fn getcwd(buf: *mut c_char, size: size_t) -> *mut c_char;
|
||||
pub fn chdir(dir: *const c_char) -> c_int;
|
||||
pub fn __wasilibc_get_environ() -> *mut *mut c_char;
|
||||
}
|
||||
}
|
||||
|
||||
@ -161,7 +162,12 @@ impl Iterator for Env {
|
||||
pub fn env() -> Env {
|
||||
unsafe {
|
||||
let _guard = env_read_lock();
|
||||
let mut environ = libc::environ;
|
||||
|
||||
// Use `__wasilibc_get_environ` instead of `environ` here so that we
|
||||
// don't require wasi-libc to eagerly initialize the environment
|
||||
// variables.
|
||||
let mut environ = libc::__wasilibc_get_environ();
|
||||
|
||||
let mut result = Vec::new();
|
||||
if !environ.is_null() {
|
||||
while !(*environ).is_null() {
|
||||
|
Loading…
Reference in New Issue
Block a user