X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Ftmpdir.c;h=6ae7c4284182e84d6cf5cd6032a453f2cfd4f4e5;hb=141e296490e776bb758ee88616dae79aed0b4006;hp=22d3e84b1ce025e7f8c53f64f6f48ba4b4a43d47;hpb=3030c5b5e0a5199e16b05927da72c43c42f211c3;p=gnulib.git diff --git a/lib/tmpdir.c b/lib/tmpdir.c index 22d3e84b1..6ae7c4284 100644 --- a/lib/tmpdir.c +++ b/lib/tmpdir.c @@ -1,4 +1,5 @@ -/* Copyright (C) 1999, 2001-2002, 2006, 2009 Free Software Foundation, Inc. +/* Copyright (C) 1999, 2001-2002, 2006, 2009-2012 Free Software Foundation, + Inc. This file is part of the GNU C Library. This program is free software: you can redistribute it and/or modify @@ -32,11 +33,22 @@ #include #ifndef P_tmpdir -# define P_tmpdir "/tmp" +# ifdef _P_tmpdir /* native Windows */ +# define P_tmpdir _P_tmpdir +# else +# define P_tmpdir "/tmp" +# endif #endif #include +#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ +# define WIN32_LEAN_AND_MEAN /* avoid including junk */ +# include +#endif + +#include "pathmax.h" + #if _LIBC # define struct_stat64 struct stat64 #else @@ -52,7 +64,7 @@ ISSLASH(C) tests whether C is a directory separator character. */ #if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__ - /* Win32, Cygwin, OS/2, DOS */ + /* Native Windows, Cygwin, OS/2, DOS */ # define ISSLASH(C) ((C) == '/' || (C) == '\\') #else /* Unix */ @@ -105,6 +117,19 @@ path_search (char *tmpl, size_t tmpl_len, const char *dir, const char *pfx, } if (dir == NULL) { +#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + char dirbuf[PATH_MAX]; + DWORD retval; + + /* Find Windows temporary file directory. + We try this before P_tmpdir because Windows defines P_tmpdir to "\\" + and will therefore try to put all temporary files in the root + directory (unless $TMPDIR is set). */ + retval = GetTempPath (PATH_MAX, dirbuf); + if (retval > 0 && retval < PATH_MAX && direxists (dirbuf)) + dir = dirbuf; + else +#endif if (direxists (P_tmpdir)) dir = P_tmpdir; else if (strcmp (P_tmpdir, "/tmp") != 0 && direxists ("/tmp"))