Win32 specific!
Use of SetEnvironmentVariable() by an extension or an application that embeds Tcl, puts the libc maintained environ list out-of-sync. This in turn puts Tcl's env array out-of-sync as well.
Logged In: YES user_id=72656
This is why Tcl has the Tcl_PutEnv compatibility procedure for extension authors to use to keep in sync.
Logged In: YES user_id=7549
but in places where this is out of your control, GetEnvironmentStrings() more accurately represents what the OS maintains.
This is not fixed, nor invalid. reopening.
writing sync problems:
% tsetenv FOO baz % wgetenv FOO baz % set env(FOO) baz % getenv FOO <- blank return % wsetenv FOO pickle % set env(FOO) baz % getenv FOO %
reading sync prolems:
% set env(TEST) first first % load test % set env(TEST) second second % getenv TEST first % wgetenv TEST second % tgetenv TEST second
test extension that shows the problems.
Just this, and everyone has the wrong answer:
% getenv FOO % setenv FOO qwe % set env(FOO) baz % wgetenv FOO qwe % tgetenv FOO baz % wsetenv FOO asd <- system % tgetenv FOO baz <- tcl % getenv FOO qwe <- c-runtime %
Hmmm, I just corrected this for unix with 979640. I'm not sure how related they are, as we rely on putenv solely for Windows.
Logged In: YES
user_id=72656
This is why Tcl has the Tcl_PutEnv compatibility procedure
for extension authors to use to keep in sync.
Logged In: YES
user_id=7549
but in places where this is out of your control,
GetEnvironmentStrings() more accurately represents what the
OS maintains.
Logged In: YES
user_id=7549
This is not fixed, nor invalid. reopening.
Logged In: YES
user_id=7549
writing sync problems:
% tsetenv FOO baz
% wgetenv FOO
baz
% set env(FOO)
baz
% getenv FOO <- blank return
% wsetenv FOO pickle
% set env(FOO)
baz
% getenv FOO
%
reading sync prolems:
% set env(TEST) first
first
% load test
% set env(TEST) second
second
% getenv TEST
first
% wgetenv TEST
second
% tgetenv TEST
second
test extension that shows the problems.
Logged In: YES
user_id=7549
Just this, and everyone has the wrong answer:
% getenv FOO
% setenv FOO qwe
% set env(FOO)
baz
% wgetenv FOO
qwe
% tgetenv FOO
baz
% wsetenv FOO asd <- system
% tgetenv FOO
baz <- tcl
% getenv FOO
qwe <- c-runtime
%
Logged In: YES
user_id=72656
Hmmm, I just corrected this for unix with 979640. I'm not
sure how related they are, as we rely on putenv solely for
Windows.