diff options
| author | Ryan Liptak <squeek502@hotmail.com> | 2023-09-17 02:13:14 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2023-09-17 11:05:06 -0700 |
| commit | bc626e8b896bee26f565a271da7e60b2564ee341 (patch) | |
| tree | 6ff887213006e4780180a018eab249d11cddd3b1 /lib/std | |
| parent | c1e94b28a370bdfe40e8e767b82535e248318aa7 (diff) | |
| download | zig-bc626e8b896bee26f565a271da7e60b2564ee341.tar.gz zig-bc626e8b896bee26f565a271da7e60b2564ee341.zip | |
Make `std.os.getenv` always a compile error on Windows
The _environ variable that is populated when linking libc on Windows does not support Unicode keys/values (or, at least, the encoding is not necessarily UTF-8). So, for Unicode support, _wenviron would need to be used instead. However, this means that the keys/values would be encoded as UTF-16, so they would need to be converted to UTF-8 before being returned by `os.getenv`. This would require allocation which is not part of the `os.getenv` API, so `os.getenv` is not implementable on Windows even when linking libc.
Closes https://github.com/ziglang/zig/issues/8456
Diffstat (limited to 'lib/std')
| -rw-r--r-- | lib/std/os.zig | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/lib/std/os.zig b/lib/std/os.zig index daf485c49e..a58ca5333b 100644 --- a/lib/std/os.zig +++ b/lib/std/os.zig @@ -1893,6 +1893,9 @@ pub fn execvpeZ( /// Get an environment variable. /// See also `getenvZ`. pub fn getenv(key: []const u8) ?[:0]const u8 { + if (builtin.os.tag == .windows) { + @compileError("std.os.getenv is unavailable for Windows because environment strings are in WTF-16 format. See std.process.getEnvVarOwned for a cross-platform API or std.os.getenvW for a Windows-specific API."); + } if (builtin.link_libc) { var ptr = std.c.environ; while (ptr[0]) |line| : (ptr += 1) { @@ -1906,9 +1909,7 @@ pub fn getenv(key: []const u8) ?[:0]const u8 { } return null; } - if (builtin.os.tag == .windows) { - @compileError("std.os.getenv is unavailable for Windows because environment string is in WTF-16 format. See std.process.getEnvVarOwned for cross-platform API or std.os.getenvW for Windows-specific API."); - } else if (builtin.os.tag == .wasi) { + if (builtin.os.tag == .wasi) { @compileError("std.os.getenv is unavailable for WASI. See std.process.getEnvMap or std.process.getEnvVarOwned for a cross-platform API."); } // The simplified start logic doesn't populate environ. |
