changeset 24662:276eca875721

Clear environment variables affecting tmpdir before running BIST tests (bug #52627) * file-io.cc (Ftempname), unpack.m: Save, clear, and restore environment variables TMPDIR and TMP when running BIST tests.
author Rik <rik@octave.org>
date Wed, 31 Jan 2018 17:24:05 -0800
parents 02989d7d68dc
children ca416267c65f
files libinterp/corefcn/file-io.cc scripts/miscellaneous/unpack.m
diffstat 2 files changed, 59 insertions(+), 44 deletions(-) [+]
line wrap: on
line diff
--- a/libinterp/corefcn/file-io.cc	Wed Jan 31 17:15:47 2018 -0800
+++ b/libinterp/corefcn/file-io.cc	Wed Jan 31 17:24:05 2018 -0800
@@ -2815,19 +2815,17 @@
 
 /*
 %!test
-%! if (ispc ())
-%!   envname = "TMP";
-%! else
+%! envvar = {"TMPDIR", "TMP"};
+%! envdir = cellfun (@(x) getenv (x), envvar, "uniformoutput", false);
+%! unwind_protect
+%!   cellfun (@(x) unsetenv (x), envvar);
 %!   envname = "TMPDIR";
-%! endif
-%! envdir = getenv (envname);
-%! unsetenv (envname);
-%! ## Strip trailing file separators from P_tmpdir
-%! def_tmpdir = P_tmpdir;
-%! while (length (def_tmpdir) > 2 && strfind (filesep ("all"), def_tmpdir(end)))
-%!   def_tmpdir(end) = [];
-%! endwhile
-%! unwind_protect
+%!   def_tmpdir = P_tmpdir;
+%!   ## Strip trailing file separators from P_tmpdir
+%!   while (length (def_tmpdir) > 2 && any (def_tmpdir(end) == filesep ("all")))
+%!     def_tmpdir(end) = [];
+%!   endwhile
+%!
 %!   ## Test 0-argument form
 %!   fname = tempname ();
 %!   [tmpdir, tmpfname] = fileparts (fname);
@@ -2858,11 +2856,13 @@
 %!   assert (tmpfname (1:4), "file");
 %! unwind_protect_cleanup
 %!   rmdir (tmp_tmpdir);
-%!   if (isempty (envdir))
-%!     unsetenv (envname);
-%!   else
-%!     setenv (envname, envdir);
-%!   endif
+%!   for i = 1:numel (envvar)
+%!     if (isempty (envdir{i}))
+%!       unsetenv (envvar{i});
+%!     else
+%!       setenv (envvar{i}, envdir{i});
+%!     endif
+%!   endfor
 %! end_unwind_protect
 */
 
--- a/scripts/miscellaneous/unpack.m	Wed Jan 31 17:15:47 2018 -0800
+++ b/scripts/miscellaneous/unpack.m	Wed Jan 31 17:24:05 2018 -0800
@@ -311,37 +311,52 @@
 
 
 %!testif HAVE_ZLIB
-%! ## Create temporary directory and file for packing and unpacking
-%! dirname = tempname ();
-%! assert (mkdir (dirname));
-%! filename = tempname ();
-%! fid = fopen (filename, "wt");
-%! assert (fid >= 0);
-%! fprintf (fid, "Hello World\n");
-%! fprintf (fid, "123 456 789\n");
-%! fclose (fid);
+%! envvar = {"TMPDIR", "TMP"};
+%! envdir = cellfun (@(x) getenv (x), envvar, "uniformoutput", false);
 %! unwind_protect
-%!   copyfile (filename, [filename ".orig"]);
-%!   gzip (filename, dirname);
-%!   [~, f] = fileparts (filename);
-%!   filelist = unpack (fullfile (dirname, [f ".gz"]), tempdir);
-%!   assert (filelist{1}, filename);
-%!   fid = fopen ([filename ".orig"], "rb");
-%!   assert (fid >= 0);
-%!   orig_data = fread (fid);
-%!   fclose (fid);
-%!   fid = fopen (filename, "rb");
+%!   cellfun (@(x) unsetenv (x), envvar);
+%!   ## Create temporary directory and file for packing and unpacking
+%!   dirname = tempname ();
+%!   assert (mkdir (dirname));
+%!   filename = tempname ();
+%!   fid = fopen (filename, "wt");
 %!   assert (fid >= 0);
-%!   new_data = fread (fid);
+%!   fprintf (fid, "Hello World\n");
+%!   fprintf (fid, "123 456 789\n");
 %!   fclose (fid);
-%!   if (orig_data != new_data)
-%!     error ("unpack: Unpacked file does not equal original");
-%!   endif
+%!
+%!   unwind_protect
+%!     copyfile (filename, [filename ".orig"]);
+%!     gzip (filename, dirname);
+%!     [~, f] = fileparts (filename);
+%!     filelist = unpack (fullfile (dirname, [f ".gz"]), tempdir);
+%!     assert (filelist{1}, filename);
+%!     fid = fopen ([filename ".orig"], "rb");
+%!     assert (fid >= 0);
+%!     orig_data = fread (fid);
+%!     fclose (fid);
+%!     fid = fopen (filename, "rb");
+%!     assert (fid >= 0);
+%!     new_data = fread (fid);
+%!     fclose (fid);
+%!     if (orig_data != new_data)
+%!       error ("unpack: Unpacked file does not equal original");
+%!     endif
+%!   unwind_protect_cleanup
+%!     unlink (filename);
+%!     unlink ([filename ".orig"]);
+%!     confirm_recursive_rmdir (false, "local");
+%!     rmdir (dirname, "s");
+%!   end_unwind_protect
 %! unwind_protect_cleanup
-%!   unlink (filename);
-%!   unlink ([filename ".orig"]);
-%!   confirm_recursive_rmdir (false, "local");
-%!   rmdir (dirname, "s");
+%!   ## Restore environment variables TMPDIR, TMP
+%!   for i = 1:numel (envvar)
+%!     if (isempty (envdir{i}))
+%!       unsetenv (envvar{i});
+%!     else
+%!       setenv (envvar{i}, envdir{i});
+%!     endif
+%!   endfor
 %! end_unwind_protect
 
 ## Test input validation