X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Ftmpdir.c;h=f159f16b452d3d34ba805daab1e8cdcbb27427d0;hb=0ba19fcc5ff43167939e465af4b93f965fffcc8c;hp=5590ac3babfe2e5b5474dbcc3d34ef00be46a3a3;hpb=d60f3b0c6b0f93a601acd1cfd3923f94ca05abb0;p=gnulib.git diff --git a/lib/tmpdir.c b/lib/tmpdir.c index 5590ac3ba..f159f16b4 100644 --- a/lib/tmpdir.c +++ b/lib/tmpdir.c @@ -33,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 @@ -106,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"))