diff liboctave/system/lo-sysdep.cc @ 30881:1921d9d0e62b

Unify detection of temporary directory (bug #62215). Instead of using differing implementations of detecting the temporary directory in multiple functions, use "sys::env::get_temp_directory" (in some of them). * libinterp/corefcn/file-io.cc (Ftempdir): Add implementation wrapping around "sys::env::get_temp_directory" replacing tempdir.m. (Ftempname): Remove local check of environment variable "TMPDIR". (Ftmpfile): Create temporary file in directory given by "sys::env::get_temp_directory". * libinterp/corefcn/gl2ps-print.cc (gl2ps_renderer::draw): Use Octave's functions for opening temporary file. * liboctave/system/oct-env.cc (sys::env::do_get_temp_directory): Check environment variable "TMPDIR" on all platforms. * liboctave/system/lo-sysdep.h, lo-sysdep.cc (sys::fopen_tmp): Add new function to open temporary file that deletes automatically after use. * scripts/miscellaneous/tempdir.m: Remove file that is replaced by DEFUN. * scripts/miscellaneous/module.mk: Remove deleted file from list. * bootstrap.conf, liboctave/wrappers/tmpfile-wrapper.h, tmpfile-wrapper.c, liboctave/wrappers/module.mk: Remove unused module "tmpfile".
author Markus Mützel <markus.muetzel@gmx.de>
date Sun, 03 Apr 2022 12:38:19 +0200
parents 83f9f8bda883
children e88a07dec498
line wrap: on
line diff
--- a/liboctave/system/lo-sysdep.cc	Fri Apr 01 14:39:54 2022 -0700
+++ b/liboctave/system/lo-sysdep.cc	Sun Apr 03 12:38:19 2022 +0200
@@ -382,6 +382,30 @@
 #endif
     }
 
+    std::FILE *
+    fopen_tmp (const std::string& name, const std::string& mode)
+    {
+#if defined (OCTAVE_USE_WINDOWS_API)
+
+      // Append "D" to the mode string to indicate that this is a temporary
+      // file that should be deleted when the last open handle is closed.
+      std::string tmp_mode = mode + "D";
+
+      return std::fopen (name.c_str (), tmp_mode.c_str ());
+
+#else
+
+      std::FILE *fptr = std::fopen (name.c_str (), mode.c_str ());
+
+      // From gnulib: This relies on the Unix semantics that a file is not
+      // really removed until it is closed.
+      octave_unlink_wrapper (name.c_str ());
+
+      return fptr;
+
+#endif
+    }
+
     std::fstream
     fstream (const std::string& filename, const std::ios::openmode mode)
     {