_(w)environ[] do have a distinct allocation chunk for each entry, so that _(w)environ[i] pointer and (pointed) string don't change when updating/deleting any other entry. Proposed implementation still differs from native: - allocation is done on process heap, while native uses msvcrt's heap - first ANSI allocated _environ[] doesn't have per entry allocation. This is only activated after a change (update/deletion) to _environ[] is made. -- v5: msvcrt: Fix getmainargs() family to return correct environment block. msvcrt: Use msvcrt heap for allocating envionment data. msvcrt: Test adding UNICODE env variables. msvcrt/tests: Add tests about intricating kernel32 and msvcrt env calls. msvcrt/tests: Add tests about allocation of environment entries. msvcrt: Improve environment tests (initial conditions). https://gitlab.winehq.org/wine/wine/-/merge_requests/4313