| ... | ... | @@ -756,6 +756,44 @@ pub fn getEnvMap(allocator: *Allocator) !BufMap { |
| 756 | 756 | |
| 757 | 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 | var line_i: usize = 0; |
| 783 | while (ptr[line_i] != 0 and ptr[line_i] != '=') : (line_i += 1) {} |
| 784 | if (ptr[line_i] != '=') { |
| 785 | return error.Unexpected; |
| 786 | } |
| 787 | const key = ptr[0..line_i]; |
| 788 | |
| 789 | var end_i: usize = line_i; |
| 790 | while (ptr[end_i] != 0) : (end_i += 1) {} |
| 791 | const value = ptr[line_i + 1 .. end_i]; |
| 792 | |
| 793 | try result.set(key, value); |
| 794 | } |
| 795 | } |
| 796 | return result; |
| 759 | 797 | } else { |
| 760 | 798 | for (posix_environ_raw) |ptr| { |
| 761 | 799 | var line_i: usize = 0; |
| ... | ... | @@ -2190,7 +2228,7 @@ pub fn argsAlloc(allocator: *mem.Allocator) ![]const []u8 { |
| 2190 | 2228 | } |
| 2191 | 2229 | |
| 2192 | 2230 | var result_slice = try allocator.alloc([]u8, count); |
| 2193 | | |
| 2231 | |
| 2194 | 2232 | var i: usize = 0; |
| 2195 | 2233 | while (i < count) : (i += 1) { |
| 2196 | 2234 | result_slice[i] = mem.toSlice(u8, argv[i]); |