On Jan 27 09:08, john daintree via Cygwin wrote:
> Hi Audrey.
>
> Here's an example of what's going on:
>
> >>: export TMPDIR=/cygdrive/c/tmp/jd
> >>: export TMPDIR2=/cygdrive/c/tmp/jd2
> >>: cmd.exe
> Microsoft Windows [Version 10.0.22621.1105]
> (c) Microsoft Corporation. All rights reserved.
>
> C:\>echo %TMPDIR%
> C:\tmp\jd
>
> C:\>echo %TMPDIR2%
> /cygdrive/c/tmp/jd2
>
> So, if I set TMPDIR and TMPDIR2 in bash, and then call cmd.exe then TMPDIR
> is changed to c:\tmp\jd but TMPDIR2 is left as /cygdrive/c/tmp/jd2
>
> I was hoping that there's something I can do to get the following in
> cmd.exe:
>
> C:\>echo %TMPDIR2%
> C:\tmp\jd2 # TMPDIR2 "mapped"
> to c:\.... in the same way that TMPDIR is
>
> I hope that's a clearer example.
>
> Note that the actual use case is calling other Win32 programs, and the
> environment variable name is different, but the above example is an attempt
> to simplify the repro.
> $PATH is mapped in a similar way. So I assume that there is a list of names
> which are mapped. I'd like to be able to add my own names to that list.
Easy: Don't call the affected Win32 executable directly. Call it
through a child process.
Two scenarios:
- Starting the nativ executable from a shell or a Makefile:
Create a wrapper script which calls
TMPDIR2="$(cygpath -wa ${TMPDIR2})
before calling your native app.
- Starting the nativ executable from your own process:
After fork(), call
const char *tmpdir2_old;
char *tmpdir2_new;
tmpdir2_old = getenv ("TMPDIR2");
tmpdir2_new = (char *) cygwin_create_path (CCP_POSIX_TO_WIN_A,
tmpdir2_old);
setenv ("TMPDIR2", tmpdir2_new, 1);
free (tmpdir2_new);
Then call execve or friends. Alternatively you can construct the
new environment like the above for any exec call taking an
environment as argument, i.e, execve, execle, execvpe.
Corinna
--
Problem reports: https://cygwin.com/problems.html
FAQ: https://cygwin.com/faq/
Documentation: https://cygwin.com/docs.html
Unsubscribe info: https://cygwin.com/ml/#unsubscribe-simple