delorie.com/archives/browse.cgi | search |
X-Recipient: | archive-cygwin AT delorie DOT com |
DKIM-Filter: | OpenDKIM Filter v2.11.0 sourceware.org CA83D3861867 |
DKIM-Signature: | v=1; a=rsa-sha256; c=relaxed/relaxed; d=cygwin.com; |
s=default; t=1600675033; | |
bh=db32F3/KouEiQJ7/z59cgrf250MyR8kB7s9avc+8MVE=; | |
h=To:References:In-Reply-To:Subject:Date:List-Id:List-Unsubscribe: | |
List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: | |
From; | |
b=Ngo7xdC+dQMm+WCSpDwl7TEPJX0cU2r8p3r2xtXPRdGTb125TbOJSYWToVeiOiOj/ | |
RXuvpWCvC/+QNK1lbfkL5+7Fl4AlCALELYu95yLNq0Q/QHUGJcDjtzKhDDv5svDa/U | |
wQgmJFdTGdzz/MKCNKMkOkuE9yC+rA+6dlV8fYI8= | |
X-Original-To: | cygwin AT cygwin DOT com |
Delivered-To: | cygwin AT cygwin DOT com |
DMARC-Filter: | OpenDMARC Filter v1.3.2 sourceware.org D2B9A3857C5B |
X-Google-DKIM-Signature: | v=1; a=rsa-sha256; c=relaxed/relaxed; |
d=1e100.net; s=20161025; | |
h=x-gm-message-state:from:to:references:in-reply-to:subject:date | |
:message-id:mime-version:content-transfer-encoding:thread-index | |
:content-language; | |
bh=AZm0chQC72b475Rkif3ICx7fEcV3c+fiReGCRY4DGCA=; | |
b=i7gyqQFS/chp655NLS9RpanyLnee1tSmbj7AU2XVG4GkWEF6pqdsmZl8XB1ATJHodN | |
rnDS8nb+/V3CwxOCOspn+oVRAkCs2WmkTqf5U8aQabkNB6qUc3HG6cwRVRN1BVszkodT | |
llTvMrS7gFaPovgUWtwjFbqAbNWa4n62/W/1aihBF2KqenjLxGRGlFDTm6qVJLxk8Ayj | |
G3W73kX5uYyPA+0m5On6+AwrljK+7TddSpUh/xA5SW7EKlIJJW6VIb4NyaqDyJuAiygI | |
6JwbeUrneUizKcs5ebi3vqzV7+2LjX/H1UNS3ZmE84j2V2WiLz10RLvOYrElMTGgBeXC | |
mPyw== | |
X-Gm-Message-State: | AOAM531B5QpiMqxkqv1ihK3RBMfuOxB+1/RGSaZ9upaX6Nx2ksMfaP59 |
klRmyhOj/vvx/8LPAxCuxFqmhNC3itg= | |
X-Google-Smtp-Source: | ABdhPJzjsSyYG3CpiBIOXIy0Ry+pAzdUUBO2/PNJfXsq/QhHtKkF4iIL8FqqAc4iUF7/FoYHygWPvw== |
X-Received: | by 2002:a2e:6c03:: with SMTP id h3mr14387948ljc.212.1600675027307; |
Mon, 21 Sep 2020 00:57:07 -0700 (PDT) | |
To: | <cygwin AT cygwin DOT com> |
References: | <423c729e-4c66-dd5e-73c0-4c636089ea35 AT cornell DOT edu> |
<EA51058C-D017-4CCE-B207-C5EFD8CCC088 AT gmail DOT com> | |
<26bcd00c-683e-1c0c-4543-a37db10f9a3e AT SystematicSw DOT ab DOT ca> | |
In-Reply-To: | <26bcd00c-683e-1c0c-4543-a37db10f9a3e@SystematicSw.ab.ca> |
Subject: | Sv: TMP/TEMP environment variable and /tmp |
Date: | Mon, 21 Sep 2020 09:57:06 +0200 |
Message-ID: | <003201d68fec$ccf15470$66d3fd50$@gmail.com> |
MIME-Version: | 1.0 |
X-Mailer: | Microsoft Outlook 16.0 |
Thread-Index: | AQHkSIEitcCt6KiIlwKkTxtCDttpVQG4MuEGAZ4QYr+pPJUPAA== |
X-Spam-Status: | No, score=-2.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, |
DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, RCVD_IN_DNSWL_NONE, | |
SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 | |
X-Spam-Checker-Version: | SpamAssassin 3.4.2 (2018-09-13) on |
server2.sourceware.org | |
X-BeenThere: | cygwin AT cygwin DOT com |
X-Mailman-Version: | 2.1.29 |
List-Id: | General Cygwin discussions and problem reports <cygwin.cygwin.com> |
List-Archive: | <https://cygwin.com/pipermail/cygwin/> |
List-Post: | <mailto:cygwin AT cygwin DOT com> |
List-Help: | <mailto:cygwin-request AT cygwin DOT com?subject=help> |
List-Subscribe: | <https://cygwin.com/mailman/listinfo/cygwin>, |
<mailto:cygwin-request AT cygwin DOT com?subject=subscribe> | |
From: | Kristian Ivarsson via Cygwin <cygwin AT cygwin DOT com> |
Reply-To: | sten DOT kristian DOT ivarsson AT gmail DOT com |
Sender: | "Cygwin" <cygwin-bounces AT cygwin DOT com> |
X-MIME-Autoconverted: | from base64 to 8bit by delorie.com id 08L7vesP015590 |
Thanx all who helped out with this The reason to why we thought it worked in mysterious ways was a coincidence of how it worked in cygwin shell (due to /etc/profile etc) and that we didn't realize/investigate that the variable was NULL at this moment and that we fell back to our own default-value ("/tmp")), that is; cygwin-built-applications works as expected regarding TMP/TEMP-environment variables Keep up the good work, Kristian > >>>>>>>>> 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. > > > > Hmm, you’re right Ken > > > > I tried this before taking off for a vacation and the > > Windows-TMP-variable is extracted > > > > I now suspect that we maybe do have some logic that falls back to /tmp > if the TMP-variable is NULL and perhaps the variable is NULL because we > launch the process with CreateProcess and perhaps the environment- > variables doesn’t get inherited then ? > > > > The reason why we use CreateProcess from within a cygwin-application > > to create another cygwin-application (instead of fork or such) might > > seem weird, but it has its reasons > > > > I need to confirm this after the vacation-trip or if someone already > know if environment-variables “dissapear” if things such as CreateProcess > are used ? > > Programmer optional - same applies for CreateProcessA/W/AsUserA/W: > > https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf- > processthreadsapi-createprocessa > > "lpEnvironment > > A pointer to the environment block for the new process. If this parameter > is NULL, the new process uses the environment of the calling process. > > An environment block consists of a null-terminated block of null- > terminated strings. Each string is in the following form: > > name=value\0 > > Because the equal sign is used as a separator, it must not be used in the > name of an environment variable. > > An environment block can contain either Unicode or ANSI characters. If the > environment block pointed to by lpEnvironment contains Unicode characters, > be sure that dwCreationFlags includes CREATE_UNICODE_ENVIRONMENT. If this > parameter is NULL and the environment block of the parent process contains > Unicode characters, you must also ensure that dwCreationFlags includes > CREATE_UNICODE_ENVIRONMENT. > > The ANSI version of this function, CreateProcessA fails if the total size > of the environment block for the process exceeds 32,767 characters. > > Note that an ANSI environment block is terminated by two zero bytes: one > for the last string, one more to terminate the block. A Unicode > environment block is terminated by four zero bytes: two for the last > string, two more to terminate the block." > > Note that when MS say "Unicode" they usually mean UTF16LE, which only some > programs support, depending on the I/O functions they use. > > -- > Take care. Thanks, Brian Inglis, Calgary, Alberta, Canada > > This email may be disturbing to some readers as it contains too much > technical detail. Reader discretion is advised. > [Data in IEC units and prefixes, physical quantities in SI.] > -- > 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 -- 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
webmaster | delorie software privacy |
Copyright 2019 by DJ Delorie | Updated Jul 2019 |