Browse Source

🧹 Move Storm code out of file_util

pull/1926/head
Gleb Mazovetskiy 5 years ago committed by Anders Jenbo
parent
commit
a3423cbc92
  1. 7
      Source/init.cpp
  2. 4
      Source/pfile.cpp
  3. 18
      Source/storm/storm.cpp
  4. 4
      Source/storm/storm.h
  5. 23
      Source/utils/file_util.cpp
  6. 7
      Source/utils/file_util.h

7
Source/init.cpp

@ -12,11 +12,10 @@
#include "dx.h"
#include "pfile.h"
#include "storm/storm.h"
#include "utils/file_util.h"
#include "utils/language.h"
#include "utils/log.hpp"
#include "utils/paths.h"
#include "utils/ui_fwd.h"
#include "utils/log.hpp"
#include "utils/language.h"
#ifdef __vita__
// increase default allowed heap size on Vita
@ -60,7 +59,7 @@ HANDLE init_test_access(const std::vector<std::string> &paths, const char *mpq_n
std::string mpq_abspath;
for (const auto &path : paths) {
mpq_abspath = path + mpq_name;
if (SFileOpenArchiveDiablo(mpq_abspath.c_str(), 0, MPQ_OPEN_READ_ONLY, &archive)) {
if (SFileOpenArchive(mpq_abspath.c_str(), 0, MPQ_OPEN_READ_ONLY, &archive)) {
LogVerbose(" Found: {} in {}", mpq_name, path);
SFileSetBasePath(path.c_str());
return archive;

4
Source/pfile.cpp

@ -15,8 +15,8 @@
#include "pack.h"
#include "storm/storm.h"
#include "utils/file_util.h"
#include "utils/paths.h"
#include "utils/language.h"
#include "utils/paths.h"
namespace devilution {
@ -195,7 +195,7 @@ static HANDLE pfile_open_save_archive(DWORD save_num)
{
HANDLE archive;
if (SFileOpenArchiveDiablo(GetSavePath(save_num).c_str(), 0, 0, &archive))
if (SFileOpenArchive(GetSavePath(save_num).c_str(), 0, 0, &archive))
return archive;
return nullptr;
}

18
Source/storm/storm.cpp

@ -10,10 +10,11 @@
#include "DiabloUI/diabloui.h"
#include "options.h"
#include "utils/paths.h"
#include "utils/stubs.h"
#include "utils/file_util.h"
#include "utils/log.hpp"
#include "utils/paths.h"
#include "utils/sdl_mutex.h"
#include "utils/stubs.h"
// Include Windows headers for Get/SetLastError.
#if defined(_WIN32)
@ -260,4 +261,17 @@ bool SFileEnableDirectAccess(bool enable)
directFileAccess = enable;
return true;
}
#if defined(_WIN64) || defined(_WIN32)
bool SFileOpenArchive(const char *szMpqName, DWORD dwPriority, DWORD dwFlags, HANDLE *phMpq)
{
const auto szMpqNameUtf16 = ToWideChar(szMpqName);
if (szMpqNameUtf16 == nullptr) {
LogError("UTF-8 -> UTF-16 conversion error code {}", ::GetLastError());
return false;
}
return SFileOpenArchive(szMpqNameUtf16.get(), dwPriority, dwFlags, phMpq);
}
#endif
} // namespace devilution

4
Source/storm/storm.h

@ -324,6 +324,10 @@ bool SFileEnableDirectAccess(bool enable);
}
// Additions to Storm API:
#if defined(_WIN64) || defined(_WIN32)
// On Windows, handles wchar conversion and calls the wchar version of SFileOpenArchive.
bool SFileOpenArchive(const char *szMpqName, DWORD dwPriority, DWORD dwFlags, HANDLE *phMpq);
#endif
// Locks ReadFile and CloseFile under a mutex.
// See https://github.com/ladislav-zezula/StormLib/issues/175

23
Source/utils/file_util.cpp

@ -1,12 +1,11 @@
#include "utils/file_util.h"
#include "utils/log.hpp"
#include <algorithm>
#include <string>
#include <SDL.h>
#include "utils/stdcompat/string_view.hpp"
#include "utils/log.hpp"
#ifdef USE_SDL1
#include "utils/sdl2_to_1_2_backports.h"
@ -31,12 +30,8 @@
#include <cstdio>
#endif
#include "storm/storm.h"
namespace devilution {
namespace {
#if defined(_WIN64) || defined(_WIN32)
std::unique_ptr<wchar_t[]> ToWideChar(string_view path)
{
@ -52,8 +47,6 @@ std::unique_ptr<wchar_t[]> ToWideChar(string_view path)
}
#endif
} // namespace
bool FileExists(const char *path)
{
#if defined(_WIN64) || defined(_WIN32)
@ -172,18 +165,4 @@ std::unique_ptr<std::fstream> CreateFileStream(const char *path, std::ios::openm
#endif
}
bool SFileOpenArchiveDiablo(const char *szMpqName, DWORD dwPriority, DWORD dwFlags, HANDLE *phMpq)
{
#if defined(_WIN64) || defined(_WIN32)
const auto szMpqNameUtf16 = ToWideChar(szMpqName);
if (szMpqNameUtf16 == nullptr) {
LogError("UTF-8 -> UTF-16 conversion error code {}", ::GetLastError());
return false;
}
return SFileOpenArchive(szMpqNameUtf16.get(), dwPriority, dwFlags, phMpq);
#else
return SFileOpenArchive(szMpqName, dwPriority, dwFlags, phMpq);
#endif
}
} // namespace devilution

7
Source/utils/file_util.h

@ -4,7 +4,7 @@
#include <fstream>
#include <memory>
#include "miniwin/miniwin.h"
#include "utils/stdcompat/string_view.hpp"
namespace devilution {
@ -13,6 +13,9 @@ bool GetFileSize(const char *path, std::uintmax_t *size);
bool ResizeFile(const char *path, std::uintmax_t size);
void RemoveFile(const char *lpFileName);
std::unique_ptr<std::fstream> CreateFileStream(const char *path, std::ios::openmode mode);
bool SFileOpenArchiveDiablo(const char *szMpqName, DWORD dwPriority, DWORD dwFlags, HANDLE *phMpq);
#if defined(_WIN64) || defined(_WIN32)
std::unique_ptr<wchar_t[]> ToWideChar(string_view path);
#endif
} // namespace devilution

Loading…
Cancel
Save