| ... | @@ -756,6 +756,37 @@ pub fn getEnvMap(allocator: *Allocator) !BufMap { | ... | @@ -756,6 +756,37 @@ pub fn getEnvMap(allocator: *Allocator) !BufMap { |
| 756 | | 756 | |
| 757 | try result.setMove(key, value); | 757 | try result.setMove(key, value); |
| 758 | } | 758 | } |
| | 759 | } else if (builtin.os == Os.wasi) { |
| | 760 | var environ_count: usize = undefined; |
| | 761 | var environ_buf_size: usize = undefined; |
| | 762 | |
| | 763 | const environ_sizes_get_ret = std.os.wasi.environ_sizes_get(&environ_count, &environ_buf_size); |
| | 764 | if (environ_sizes_get_ret != os.wasi.ESUCCESS) { |
| | 765 | return unexpectedErrorPosix(environ_sizes_get_ret); |
| | 766 | } |
| | 767 | |
| | 768 | // TODO: Verify that the documentation is incorrect |
| | 769 | // https://github.com/WebAssembly/WASI/issues/27 |
| | 770 | var environ = try allocator.alloc(?[*]u8, environ_count + 1); |
| | 771 | defer allocator.free(environ); |
| | 772 | var environ_buf = try std.heap.wasm_allocator.alloc(u8, environ_buf_size); |
| | 773 | defer allocator.free(environ_buf); |
| | 774 | |
| | 775 | const environ_get_ret = std.os.wasi.environ_get(environ.ptr, environ_buf.ptr); |
| | 776 | if (environ_get_ret != os.wasi.ESUCCESS) { |
| | 777 | return unexpectedErrorPosix(environ_get_ret); |
| | 778 | } |
| | 779 | |
| | 780 | for (environ) |env| { |
| | 781 | if (env) |ptr| { |
| | 782 | const pair = mem.toSlice(u8, ptr); |
| | 783 | var parts = mem.separate(pair, "="); |
| | 784 | const key = parts.next().?; |
| | 785 | const value = parts.next().?; |
| | 786 | try result.set(key, value); |
| | 787 | } |
| | 788 | } |
| | 789 | return result; |
| 759 | } else { | 790 | } else { |
| 760 | for (posix_environ_raw) |ptr| { | 791 | for (posix_environ_raw) |ptr| { |
| 761 | var line_i: usize = 0; | 792 | var line_i: usize = 0; |
| ... | @@ -2190,7 +2221,7 @@ pub fn argsAlloc(allocator: *mem.Allocator) ![]const []u8 { | ... | @@ -2190,7 +2221,7 @@ pub fn argsAlloc(allocator: *mem.Allocator) ![]const []u8 { |
| 2190 | } | 2221 | } |
| 2191 | | 2222 | |
| 2192 | var result_slice = try allocator.alloc([]u8, count); | 2223 | var result_slice = try allocator.alloc([]u8, count); |
| 2193 | | 2224 | |
| 2194 | var i: usize = 0; | 2225 | var i: usize = 0; |
| 2195 | while (i < count) : (i += 1) { | 2226 | while (i < count) : (i += 1) { |
| 2196 | result_slice[i] = mem.toSlice(u8, argv[i]); | 2227 | result_slice[i] = mem.toSlice(u8, argv[i]); |