From 00e9a5e0c7afcea3502e8627db7066cc14aa2536 Mon Sep 17 00:00:00 2001
From: WaluigiWare64 <68647953+WaluigiWare64@users.noreply.github.com>
Date: Tue, 5 Jan 2021 15:34:28 +0000
Subject: Allow melonDS to write the file

The directory wasn't created, so the file was not being written
---
 src/frontend/qt_sdl/ArchiveUtil.cpp | 19 +++++++++++++------
 src/frontend/qt_sdl/ArchiveUtil.h   |  2 --
 2 files changed, 13 insertions(+), 8 deletions(-)

(limited to 'src')

diff --git a/src/frontend/qt_sdl/ArchiveUtil.cpp b/src/frontend/qt_sdl/ArchiveUtil.cpp
index f7ca8e6..ba6e4b6 100644
--- a/src/frontend/qt_sdl/ArchiveUtil.cpp
+++ b/src/frontend/qt_sdl/ArchiveUtil.cpp
@@ -18,6 +18,11 @@
 
 #include "ArchiveUtil.h"
 
+#ifdef _WIN32
+    #include <direct.h>
+    #define mkdir(dir, mode) _mkdir(dir)
+#endif
+
 namespace Archive
 {
 
@@ -86,15 +91,17 @@ QVector<QString> ExtractFileFromArchive(const char* path, const char* wantedFile
         archiveBuffer.reset(nullptr);
         return QVector<QString> {"Err", archive_error_string(a)};
     }
-    
-    QString fileToWrite = QFileInfo(path).absolutePath() + "/" + QFileInfo(path).baseName() + "/" + archive_entry_pathname(entry);
-    
-    std::ofstream(fileToWrite.toUtf8().constData(), std::ofstream::binary).write((char*)archiveBuffer.get(), bytesToWrite);
-    
+    QString nameToWrite = QFileInfo(path).absolutePath() + "/" + QFileInfo(path).baseName() + "/" + archive_entry_pathname(entry);
+
+    mkdir(QFileInfo(path).baseName().toUtf8().constData(), 600); // Create directory otherwise fopen will not open the file
+    FILE* fileToWrite = fopen(nameToWrite.toUtf8().constData(), "wb");
+    fwrite((char*)archiveBuffer.get(), bytesToWrite, 1, fileToWrite);
+    fclose(fileToWrite);
+
     archiveBuffer.reset(nullptr);
     archive_read_close(a);
     archive_read_free(a);
-    return QVector<QString> {fileToWrite};
+    return QVector<QString> {nameToWrite};
 
 }
 
diff --git a/src/frontend/qt_sdl/ArchiveUtil.h b/src/frontend/qt_sdl/ArchiveUtil.h
index 5b03a59..a6f404a 100644
--- a/src/frontend/qt_sdl/ArchiveUtil.h
+++ b/src/frontend/qt_sdl/ArchiveUtil.h
@@ -4,8 +4,6 @@
 #include <stdio.h>
 
 #include <string>
-#include <iostream>
-#include <fstream>
 #include <memory>
 
 #include <QVector>
-- 
cgit v1.2.3