| ... | ... | @@ -15,7 +15,7 @@ test "std.os" { |
| 15 | 15 | _ = @import("get_user_id.zig"); |
| 16 | 16 | _ = @import("linux/index.zig"); |
| 17 | 17 | _ = @import("path.zig"); |
| 18 | | _ = @import("test.zig"); |
| 18 | _ = @import("test.zig"); |
| 19 | 19 | _ = @import("time.zig"); |
| 20 | 20 | _ = @import("windows/index.zig"); |
| 21 | 21 | _ = @import("get_app_data_dir.zig"); |
| ... | ... | @@ -705,28 +705,26 @@ pub fn getEnvMap(allocator: *Allocator) !BufMap { |
| 705 | 705 | const ptr = windows.GetEnvironmentStringsW() orelse return error.OutOfMemory; |
| 706 | 706 | defer assert(windows.FreeEnvironmentStringsW(ptr) != 0); |
| 707 | 707 | |
| 708 | var buf: [100]u8 = undefined; |
| 709 | |
| 708 | 710 | var i: usize = 0; |
| 709 | 711 | while (true) { |
| 710 | 712 | if (ptr[i] == 0) return result; |
| 711 | 713 | |
| 712 | 714 | const key_start = i; |
| 715 | var fallocator = &std.heap.FixedBufferAllocator.init(buf[0..]).allocator; |
| 713 | 716 | |
| 714 | 717 | while (ptr[i] != 0 and ptr[i] != '=') : (i += 1) {} |
| 715 | 718 | |
| 716 | | const stack_var_len = 50; |
| 717 | 719 | const key_slice = ptr[key_start..i]; |
| 718 | 720 | var key: []u8 = undefined; |
| 719 | 721 | var heap_key = false; |
| 720 | 722 | |
| 721 | | /// revisit needing the "-@sizeof(usize)*2" |
| 722 | | /// after https://github.com/ziglang/zig/issues/1774 |
| 723 | | if (key_slice.len < stack_var_len-@sizeOf(usize)*2) { |
| 724 | | var buf = []u8{0} ** stack_var_len; |
| 725 | | var fallocator = &std.heap.FixedBufferAllocator.init(buf[0..]).allocator; |
| 726 | | key = try std.unicode.utf16leToUtf8Alloc(fallocator, key_slice); |
| 727 | | } else { |
| 723 | key = std.unicode.utf16leToUtf8Alloc(fallocator, key_slice) catch undefined; |
| 724 | |
| 725 | if (key.len == 0) { |
| 728 | 726 | key = try std.unicode.utf16leToUtf8Alloc(allocator, key_slice); |
| 729 | | heap_key = true; // key needs to outlive this scope, so we cannot defer |
| 727 | heap_key = true; |
| 730 | 728 | } |
| 731 | 729 | |
| 732 | 730 | if (ptr[i] == '=') i += 1; |
| ... | ... | @@ -738,15 +736,11 @@ pub fn getEnvMap(allocator: *Allocator) !BufMap { |
| 738 | 736 | var value: []u8 = undefined; |
| 739 | 737 | var heap_value = false; |
| 740 | 738 | |
| 741 | | /// revisit needing the "-@sizeof(usize)*2" |
| 742 | | /// after https://github.com/ziglang/zig/issues/1774 |
| 743 | | if (value_slice.len < stack_var_len-@sizeOf(usize)*2) { |
| 744 | | var buf = []u8{0} ** stack_var_len; |
| 745 | | var fallocator = &std.heap.FixedBufferAllocator.init(buf[0..]).allocator; |
| 746 | | value = try std.unicode.utf16leToUtf8Alloc(fallocator, value_slice); |
| 747 | | } else { |
| 739 | value = std.unicode.utf16leToUtf8Alloc(fallocator, value_slice) catch undefined; |
| 740 | |
| 741 | if (value.len == 0) { |
| 748 | 742 | value = try std.unicode.utf16leToUtf8Alloc(allocator, value_slice); |
| 749 | | heap_value = true; // value needs to outlive this scope, so we cannot defer |
| 743 | heap_value = true; |
| 750 | 744 | } |
| 751 | 745 | |
| 752 | 746 | i += 1; // skip over null byte |