On 4/27/15 4:10 PM, Jens Rehsack wrote: > >> Am 24.04.2015 um 05:37 schrieb Aristotle Pagaltzis <pagalt...@gmx.de>: >> >> * David Golden <x...@xdg.me> [2015-04-23 17:40]: >> [...] >>> Please see https://rt.cpan.org/Ticket/Display.html?id=60340 for context. >>> >>> I think File::Temp needs to be able to work around File::Spec::Win32 >>> returning a non-writable directory. >>> >>> My proposal was to warn and fall back to ".". That's a small breaking >>> change, but I think doing something in a different place than >>> requested is better than failing entirely. >>> >>> Alternatively, it needs to validate the Win32 response and throw an error >>> early, before attempting to make the directory so that the error message is >>> more informative. >>> >>> Thoughts? >> >> Windows considers the current directory an implied part of %PATH%, > > True > >> has no concept like the executable bit of Unixoid OSes, > > Nope - it has such a concept, but it's in ACL's, not in attributes. History of > Windows was non-multi-user *shrug* - weird implementation, crummy supported ;) > This also depends on the filesystem, and isn't really the same concept.
>> nor does it allow >> unlinking files while they’re open. > > Depends on Filesystem ... > >> So I’d feel uncomfortable about just >> unexpectedly dropping junk into the current directory, announced or not. >> Therefore I’d tend toward the latter. > > Is there a reason not to tryout Win32 API function GetTempPath > (https://msdn.microsoft.com/en-us/library/windows/desktop/aa364992%28v=vs.85%29.aspx)? > I dunno how File::Spec/File::Temp on Unix behaves tmp points to a > non-writable directory (think r/o file-system). This uses the environment just like File::Spec->tmpdir does. The only important difference is that File::Temp checks for tainting. Switching to GetTempPath would be the same thing as removing the taint checks. > >> But someone with better instincts for Windows may be able to call this >> bunk. Mostly I didn’t want to leave the question warnocked. > > I agree - '.' is the worst choice one can make - and I intend to say 'start > again with TMP="."' or so. > The closest thing I can think of would be using the local application data directory. This is the same place that the user's temp directory lives. Win32::GetFolderPath(Win32::CSIDL_LOCAL_APPDATA)."\\Temp" should give you the current user's temp directory. It would probably be wrong for programs not running under a login user account, like daemons or CGI scripts. Those would likely want to fall back to C:\WINDOWS\Temp.