Mercurial > octave
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) {