]> git.tdb.fi Git - libs/datafile.git/commitdiff
Don't delete the temporary file while it's in use
authorMikko Rasa <tdb@tdb.fi>
Sat, 16 Sep 2023 09:50:22 +0000 (12:50 +0300)
committerMikko Rasa <tdb@tdb.fi>
Sat, 16 Sep 2023 09:50:22 +0000 (12:50 +0300)
That doesn't work on Windows.

tool/packer.cpp
tool/packer.h

index ae88ada2313f3aa5228d3eeb1b450d4203e57f0a..3f175d91e5fb8230f00dc73238e25965ca1dd88d 100644 (file)
@@ -14,10 +14,10 @@ using namespace Msp;
 
 Packer::Packer(DataTool &t):
        tool(t),
-       tmp_file(tempfile())
+       tmp_file(tempfile(tmp_path))
 { }
 
-IO::BufferedFile *Packer::tempfile()
+IO::BufferedFile *Packer::tempfile(FS::Path &out_fn)
 {
        FS::Path tmpdir = FS::get_temp_dir();
 
@@ -27,7 +27,7 @@ IO::BufferedFile *Packer::tempfile()
                {
                        FS::Path filename = tmpdir/format("mspdatatool.%d", i);
                        IO::BufferedFile *file = new IO::BufferedFile(filename.str(), IO::M_RDWR, IO::File::C_NEW);
-                       FS::unlink(filename.str());
+                       out_fn = filename;
                        return file;
                }
                catch(const IO::file_already_exists &)
@@ -40,6 +40,7 @@ IO::BufferedFile *Packer::tempfile()
 Packer::~Packer()
 {
        delete tmp_file;
+       FS::unlink(tmp_path);
 }
 
 void Packer::pack_file(const string &fn)
index b89f073fb902813ad3356477c522d3460e5d37f6..141a2a1058dc1323ec1d6fc63e35c9e8e5e69dbe 100644 (file)
@@ -20,6 +20,7 @@ private:
        typedef std::list<Object> ObjectList;
 
        DataTool &tool;
+       Msp::FS::Path tmp_path;
        Msp::IO::BufferedFile *tmp_file = nullptr;
        std::list<Msp::DataFile::Statement> directory;
        unsigned dir_alloc = 0;
@@ -27,7 +28,7 @@ private:
 public:
        Packer(DataTool &);
 private:
-       static Msp::IO::BufferedFile *tempfile();
+       static Msp::IO::BufferedFile *tempfile(Msp::FS::Path &);
 public:
        ~Packer();