Stop using static initialisation so that dcpomatic::write() can be called more than...
[dcpomatic.git] / src / lib / ext.cc
index 7853984cf28e2b4ff123078fe02dccae39c03eaf..5e2ff7d9cbd93a4463f4c5f05ae661a7f955b7b6 100644 (file)
@@ -27,6 +27,7 @@
 #include "exceptions.h"
 #include "ext.h"
 #include "nanomsg.h"
+#include <dcp/file.h>
 
 #ifdef DCPOMATIC_LINUX
 #include <linux/fs.h>
@@ -72,7 +73,7 @@ using std::vector;
 
 
 /* Use quite a big block size here, as ext4's fwrite() has quite a bit of overhead */
-static uint64_t const block_size = 4096 * 4096;
+uint64_t constexpr block_size = 4096 * 4096;
 
 
 static
@@ -284,12 +285,26 @@ try
 {
        ext4_dmask_set (DEBUG_ALL);
 
-       /* We rely on static initialization for these */
-       static struct ext4_fs fs;
-       static struct ext4_mkfs_info info;
+       struct ext4_fs fs;
+       fs.read_only = false;
+       fs.bdev = nullptr;
+       fs.last_inode_bg_id = 0;
+       fs.jbd_fs = nullptr;
+       fs.jbd_journal = nullptr;
+       fs.curr_trans = nullptr;
+       struct ext4_mkfs_info info;
+       info.len = 0;
        info.block_size = 4096;
+       info.blocks_per_group = 0;
        info.inode_size = 128;
+       info.inodes = 0;
+       info.journal_blocks = 0;
+       info.dsc_size = 0;
+       for (int i = 0; i < UUID_SIZE; ++i) {
+               info.uuid[i] = rand() & 0xff;
+       }
        info.journal = false;
+       info.label = nullptr;
 
 #ifdef WIN32
        file_windows_name_set(device.c_str());