diff --git a/core/os/os2/env_windows.odin b/core/os/os2/env_windows.odin index f58922fac..105063343 100644 --- a/core/os/os2/env_windows.odin +++ b/core/os/os2/env_windows.odin @@ -65,7 +65,19 @@ _environ :: proc(allocator: runtime.Allocator) -> []string { } defer win32.FreeEnvironmentStringsW(envs) - r := make([dynamic]string, 0, 50, allocator) + n := 0 + for from, i, p := 0, 0, envs; true; i += 1 { + c := ([^]u16)(p)[i] + if c == 0 { + if i <= from { + break + } + n += 1 + from = i + 1 + } + } + + r := make([dynamic]string, 0, n, allocator) for from, i, p := 0, 0, envs; true; i += 1 { c := ([^]u16)(p)[i] if c == 0 {