On 9/17/2020 5:07 PM, Kristian Ivarsson via Cygwin wrote:

Does anyone know the rational with this behaviour and what can be
done to get hold of the (real) Windows TMP/TEMP
environment-variable-values (in a
(hopefully) platform independent way) ?
so if you are making your custom tree, try to stick on that
expectation and have both directories.
In general, you are free to set TMP to a directory of your choice,
that's the purpose of that variable, no need to sync it with some root.
There is a comment in /etc/profile:
    # TMP and TEMP as defined in the Windows environment
    # can have unexpected consequences for cygwin apps, but it does not
explain what consequences that might be; probably some trouble with
ACL/access permissions for temporary files.
Nowadays that would be $LOCALAPPDATA/Temp, or if you really insist, the
content of /proc/registry/HKEY_CURRENT_USER/Environment/TMP (or TEMP),
after similarly expanding environment variable references found in that.

The fact that getting Windows' idea of the user's TEMP directory is not
immediately platform independent may well have been part of the rationale
for not even trying that.

Well, at least it's up to the user

If the user sets its TMP-variable to "C:\Jabba Dabba Dooo" or "/jabba dabba doo", I expect the 
value of getenv("TMP") should be just that and regardless of OS the value returned is whatever the variable 
is set to and not magically changed to "/tmp"
Of course and that's not happening, no worries. The issue was that TMP is set 
in /etc/profile and not inherited from the Windows environment.

Well, where my Cygwin-compiled-application is running, there’s no 
Cygwin-installation and thus no /etc/profile so it cannot be set there (if 
/etc/profile is not a built in resource in every executable), so there must be 
some text-value inside the compiled executables used in some manner somehow

There must be something going on in your environment that you haven't told us yet. I just tried the following test case:

#include <stdio.h>
#include <stdlib.h>
int
main ()
{
  printf ("The value of TMP is %s\n", getenv ("TMP"));
}

In a Cygwin bash shell I get

  The value of TMP is /tmp

Running the same executable under a Windows Command Prompt, I get

  The value of TMP is /c/Users/kbrown/AppData/Local/Temp

So Cygwin converts TMP to a Posix path [*], but it doesn't change it to "/tmp".

Ken

[*] See environ.cc:303 for a list of environment variables that Cygwin converts.
--
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

Reply via email to