# HG changeset patch # User John W. Eaton # Date 1295345697 18000 # Node ID d531641cf1d10cc03103af5b5d47ae8feed61145 # Parent 1140bd9f9b213f76f801ffc6085fe57ed4346a6a try to get better value than \ for P_tmpdir on Windows systems diff --git a/src/ChangeLog b/src/ChangeLog --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2011-01-18 John W. Eaton + + * sysdep.cc (get_P_tmpdir): New function. + * file-io.cc (FP_tmpdir): Use it. + Bug #32158. + 2011-01-17 Jaroslav Hajek * DLD-FUNCTION/lookup.cc (Flookup): Validate option string. diff --git a/src/file-io.cc b/src/file-io.cc --- a/src/file-io.cc +++ b/src/file-io.cc @@ -2122,10 +2122,6 @@ return retval; } -#if ! defined (P_tmpdir) -#define P_tmpdir "/tmp" -#endif - DEFUNX ("P_tmpdir", FP_tmpdir, args, , "-*- texinfo -*-\n\ @deftypefn {Built-in Function} {} P_tmpdir ()\n\ @@ -2138,7 +2134,7 @@ int nargin = args.length (); if (nargin == 0) - retval = P_tmpdir; + retval = get_P_tmpdir (); else print_usage (); diff --git a/src/sysdep.cc b/src/sysdep.cc --- a/src/sysdep.cc +++ b/src/sysdep.cc @@ -470,6 +470,45 @@ return c; } +std::string +get_P_tmpdir (void) +{ +#if defined (__WIN32__) && ! defined (_POSIX_VERSION) + + std::string retval; + + // Apparently some versions of MinGW and MSVC either don't define + // P_tmpdir, or they define it to a single backslash, neither of which + // is particularly helpful. + + std::string tmp = P_tmpdir; + + if (tmp.empty () || tmp == "\\") + { + tmp = octave_env::getenv ("TEMP"); + + if (tmp.empty ()) + tmp = octave_env::getenv ("TMP"); + + if (tmp.empty ()) + tmp = "c:\\temp"; + } + else + retval = tmp; + + return retval; + +#elif defined (P_tmpdir) + + return P_tmpdir; + +#else + + return "/tmp"; + +#endif +} + DEFUN (clc, , , "-*- texinfo -*-\n\ @deftypefn {Built-in Function} {} clc ()\n\ diff --git a/src/sysdep.h b/src/sysdep.h --- a/src/sysdep.h +++ b/src/sysdep.h @@ -41,6 +41,8 @@ extern OCTINTERP_API int octave_kbhit (bool wait = true); +extern OCTINTERP_API std::string get_P_tmpdir (void); + extern void w32_set_quiet_shutdown (void); #if defined (__WIN32__) && ! defined (_POSIX_VERSION)