Skip to content

Commit b11b862

Browse files
committed
Fall back to old (broken) env arg behavior if CompareStringOrdinal is not available
See rust-lang#85270 and rust-lang#87863
1 parent 1c445be commit b11b862

File tree

2 files changed

+32
-0
lines changed

2 files changed

+32
-0
lines changed

library/std/src/sys/pal/windows/c.rs

+16
Original file line numberDiff line numberDiff line change
@@ -649,3 +649,19 @@ compat_fn_with_fallback! {
649649
TRUE
650650
}
651651
}
652+
653+
#[cfg(target_vendor = "rust9x")]
654+
compat_fn_with_fallback! {
655+
pub static KERNEL32: &CStr = c"kernel32" => { load: false, unicows: false };
656+
// >= Vista / Server 2008
657+
// https://learn.microsoft.com/en-us/windows/win32/api/stringapiset/nf-stringapiset-comparestringordinal
658+
pub fn CompareStringOrdinal(
659+
lpstring1: PCWSTR,
660+
cchcount1: i32,
661+
lpstring2: PCWSTR,
662+
cchcount2: i32,
663+
bignorecase: BOOL,
664+
) -> COMPARESTRING_RESULT {
665+
unimplemented!()
666+
}
667+
}

library/std/src/sys/pal/windows/process.rs

+16
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,13 @@ impl EnvKey {
6969
// [4] https://docs.microsoft.com/en-us/windows/win32/api/stringapiset/nf-stringapiset-comparestringordinal
7070
impl Ord for EnvKey {
7171
fn cmp(&self, other: &Self) -> cmp::Ordering {
72+
#[cfg(target_vendor = "rust9x")]
73+
{
74+
if c::CompareStringOrdinal::available().is_none() {
75+
return self.os_string.cmp(&other.os_string);
76+
}
77+
}
78+
7279
unsafe {
7380
let result = c::CompareStringOrdinal(
7481
self.utf16.as_ptr(),
@@ -120,6 +127,15 @@ impl PartialEq<str> for EnvKey {
120127
// they are compared using a caseless string mapping.
121128
impl From<OsString> for EnvKey {
122129
fn from(k: OsString) -> Self {
130+
#[cfg(target_vendor = "rust9x")]
131+
{
132+
if c::CompareStringOrdinal::available().is_none() {
133+
let mut k = k;
134+
k.make_ascii_uppercase();
135+
return EnvKey { utf16: Vec::new(), os_string: k };
136+
}
137+
}
138+
123139
EnvKey { utf16: k.encode_wide().collect(), os_string: k }
124140
}
125141
}

0 commit comments

Comments
 (0)