Supporters update.
[dcpomatic.git] / src / lib / scoped_temporary.cc
index 4043caf3d28ee91c6224651fa9ca6e1103dc3191..fec938cb136ef2e3c75c5405f1736d73f44117c0 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2012-2014 Carl Hetherington <cth@carlh.net>
+    Copyright (C) 2012-2021 Carl Hetherington <cth@carlh.net>
 
     This file is part of DCP-o-matic.
 
 
 */
 
+
+#include "cross.h"
+#include "exceptions.h"
 #include "scoped_temporary.h"
+#include <dcp/filesystem.h>
+
 
 /** Construct a ScopedTemporary.  A temporary filename is decided but the file is not opened
  *  until open() is called.
  */
 ScopedTemporary::ScopedTemporary ()
-       : _open (0)
 {
-       _file = boost::filesystem::temp_directory_path() / boost::filesystem::unique_path ();
+       _path = boost::filesystem::temp_directory_path() / boost::filesystem::unique_path();
 }
 
+
 /** Close and delete the temporary file */
 ScopedTemporary::~ScopedTemporary ()
 {
-       close ();
+       if (_file) {
+               _file->close();
+       }
        boost::system::error_code ec;
-       boost::filesystem::remove (_file, ec);
+       dcp::filesystem::remove(_path, ec);
 }
 
+
 /** @return temporary filename */
 char const *
 ScopedTemporary::c_str () const
 {
-       return _file.string().c_str ();
+       return _path.string().c_str();
 }
 
+
 /** Open the temporary file.
  *  @return File's FILE pointer.
  */
-FILE*
+dcp::File&
 ScopedTemporary::open (char const * params)
 {
-       close ();
-       _open = fopen (c_str(), params);
-       return _open;
-}
-
-/** Close the file */
-void
-ScopedTemporary::close ()
-{
-       if (_open) {
-               fclose (_open);
-               _open = 0;
+       if (_file) {
+               _file->close();
        }
+       _file = dcp::File(_path, params);
+       if (!*_file) {
+               throw FileError ("Could not open scoped temporary", _path);
+       }
+       return *_file;
 }
+