| ... | ... | @@ -2007,14 +2007,18 @@ pub fn getenv(key: []const u8) ?[:0]const u8 { |
| 2007 | 2007 | if (native_os == .windows) { |
| 2008 | 2008 | @compileError("std.posix.getenv is unavailable for Windows because environment strings are in WTF-16 format. See std.process.getEnvVarOwned for a cross-platform API or std.process.getenvW for a Windows-specific API."); |
| 2009 | 2009 | } |
| 2010 | if (mem.indexOfScalar(u8, key, '=') != null) { |
| 2011 | return null; |
| 2012 | } |
| 2010 | 2013 | if (builtin.link_libc) { |
| 2011 | 2014 | var ptr = std.c.environ; |
| 2012 | 2015 | while (ptr[0]) |line| : (ptr += 1) { |
| 2013 | 2016 | var line_i: usize = 0; |
| 2014 | | while (line[line_i] != 0 and line[line_i] != '=') : (line_i += 1) {} |
| 2015 | | const this_key = line[0..line_i]; |
| 2016 | | |
| 2017 | | if (!mem.eql(u8, this_key, key)) continue; |
| 2017 | while (line[line_i] != 0) : (line_i += 1) { |
| 2018 | if (line_i == key.len) break; |
| 2019 | if (line[line_i] != key[line_i]) break; |
| 2020 | } |
| 2021 | if ((line_i != key.len) or (line[line_i] != '=')) continue; |
| 2018 | 2022 | |
| 2019 | 2023 | return mem.sliceTo(line + line_i + 1, 0); |
| 2020 | 2024 | } |
| ... | ... | @@ -2028,9 +2032,11 @@ pub fn getenv(key: []const u8) ?[:0]const u8 { |
| 2028 | 2032 | // TODO see https://github.com/ziglang/zig/issues/4524 |
| 2029 | 2033 | for (std.os.environ) |ptr| { |
| 2030 | 2034 | var line_i: usize = 0; |
| 2031 | | while (ptr[line_i] != 0 and ptr[line_i] != '=') : (line_i += 1) {} |
| 2032 | | const this_key = ptr[0..line_i]; |
| 2033 | | if (!mem.eql(u8, key, this_key)) continue; |
| 2035 | while (ptr[line_i] != 0) : (line_i += 1) { |
| 2036 | if (line_i == key.len) break; |
| 2037 | if (ptr[line_i] != key[line_i]) break; |
| 2038 | } |
| 2039 | if ((line_i != key.len) or (ptr[line_i] != '=')) continue; |
| 2034 | 2040 | |
| 2035 | 2041 | return mem.sliceTo(ptr + line_i + 1, 0); |
| 2036 | 2042 | } |