X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Ftmpdir.c;h=f159f16b452d3d34ba805daab1e8cdcbb27427d0;hb=0ac9362d3e63ada72bef1cb93bb20ef5b9d01e44;hp=c82952739533a7bb541ec3bee6f71c373e9ced62;hpb=441aa3044f43e5572f58c354f01e6bc070acd5c7;p=gnulib.git diff --git a/lib/tmpdir.c b/lib/tmpdir.c index c82952739..f159f16b4 100644 --- a/lib/tmpdir.c +++ b/lib/tmpdir.c @@ -1,4 +1,5 @@ -/* Copyright (C) 1999, 2001-2002, 2006 Free Software Foundation, Inc. +/* Copyright (C) 1999, 2001-2002, 2006, 2009-2011 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 @@ -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"))