about summary refs log tree commit diff
path: root/library/stdarch/crates/std_detect/src/detect/cache.rs
diff options
context:
space:
mode:
authorAmanieu d'Antras <amanieu@gmail.com>2021-02-14 22:14:37 +0000
committerGitHub <noreply@github.com>2021-02-14 22:14:37 +0000
commitf32f7cb89967f211af8df3c8838755881d9f6408 (patch)
tree79572ddcb2d55cf6189cc06f45d49535e2562374 /library/stdarch/crates/std_detect/src/detect/cache.rs
parentb7acc2e1da6ce4ab09093ac5a7af5528c2a3fd06 (diff)
downloadrust-f32f7cb89967f211af8df3c8838755881d9f6408.tar.gz
rust-f32f7cb89967f211af8df3c8838755881d9f6408.zip
Turn std_detect into a no_std crate (#1005)
Diffstat (limited to 'library/stdarch/crates/std_detect/src/detect/cache.rs')
-rw-r--r--library/stdarch/crates/std_detect/src/detect/cache.rs17
1 files changed, 12 insertions, 5 deletions
diff --git a/library/stdarch/crates/std_detect/src/detect/cache.rs b/library/stdarch/crates/std_detect/src/detect/cache.rs
index e79c96dafaf..d01a5ea244d 100644
--- a/library/stdarch/crates/std_detect/src/detect/cache.rs
+++ b/library/stdarch/crates/std_detect/src/detect/cache.rs
@@ -3,9 +3,9 @@
 
 #![allow(dead_code)] // not used on all platforms
 
-use crate::sync::atomic::Ordering;
+use core::sync::atomic::Ordering;
 
-use crate::sync::atomic::AtomicUsize;
+use core::sync::atomic::AtomicUsize;
 
 /// Sets the `bit` of `x`.
 #[inline]
@@ -125,9 +125,16 @@ cfg_if::cfg_if! {
     if #[cfg(feature = "std_detect_env_override")] {
         #[inline]
         fn initialize(mut value: Initializer) -> Initializer {
-            if let Ok(disable) = crate::env::var("RUST_STD_DETECT_UNSTABLE") {
-                for v in disable.split(" ") {
-                    let _ = super::Feature::from_str(v).map(|v| value.unset(v as u32));
+            let env = unsafe {
+                libc::getenv(b"RUST_STD_DETECT_UNSTABLE\0".as_ptr() as *const libc::c_char)
+            };
+            if !env.is_null() {
+                let len = unsafe { libc::strlen(env) };
+                let env = unsafe { core::slice::from_raw_parts(env as *const u8, len) };
+                if let Ok(disable) = core::str::from_utf8(env) {
+                    for v in disable.split(" ") {
+                        let _ = super::Feature::from_str(v).map(|v| value.unset(v as u32));
+                    }
                 }
             }
             do_initialize(value);