Mercurial > hg > octave-kai > gnulib-hg
changeset 15534:3ef509e539a1
tmpdir: Use a good default directory on native Windows.
* lib/tmpdir.c: Include <windows.h>, pathmax.h.
(P_tmpdir): Default to _P_tmpdir on native Windows.
(path_search): On native Windows, try the value returned by GetTempPath
before trying P_tmpdir.
* modules/tmpdir (Depends-on): Add pathmax.
Suggested by John Darrington <john@darrington.wattle.id.au>.
author | Bruno Haible <bruno@clisp.org> |
---|---|
date | Tue, 23 Aug 2011 08:40:27 +0200 |
parents | 2f6d5aa97b64 |
children | 3cc3d6318f76 |
files | ChangeLog lib/tmpdir.c modules/tmpdir |
diffstat | 3 files changed, 36 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2011-08-23 Bruno Haible <bruno@clisp.org> + + tmpdir: Use a good default directory on native Windows. + * lib/tmpdir.c: Include <windows.h>, pathmax.h. + (P_tmpdir): Default to _P_tmpdir on native Windows. + (path_search): On native Windows, try the value returned by GetTempPath + before trying P_tmpdir. + * modules/tmpdir (Depends-on): Add pathmax. + Suggested by John Darrington <john@darrington.wattle.id.au>. + 2011-08-20 Reuben Thomas <rrt@sc3d.org> doc: fix typo in README-release
--- a/lib/tmpdir.c +++ b/lib/tmpdir.c @@ -33,11 +33,22 @@ #include <stdio.h> #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 <sys/stat.h> +#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ +# define WIN32_LEAN_AND_MEAN /* avoid including junk */ +# include <windows.h> +#endif + +#include "pathmax.h" + #if _LIBC # define struct_stat64 struct stat64 #else @@ -106,6 +117,19 @@ } 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"))