diff --git a/loader/launcher/windows/Updater.cpp b/loader/launcher/windows/Updater.cpp index 48820936..38bca094 100644 --- a/loader/launcher/windows/Updater.cpp +++ b/loader/launcher/windows/Updater.cpp @@ -1,24 +1,24 @@ #include <Windows.h> #include <iostream> #include <array> -#include <ghc/filesystem.hpp> +#include <filesystem> -ghc::filesystem::path workingDir; -ghc::filesystem::path geodeDir; -ghc::filesystem::path updatesDir; -ghc::filesystem::path resourcesDir; +std::filesystem::path workingDir; +std::filesystem::path geodeDir; +std::filesystem::path updatesDir; +std::filesystem::path resourcesDir; void showError(std::string const& error) { MessageBoxA(nullptr, error.c_str(), "Error Loading Geode", MB_ICONERROR); } -bool waitForFile(ghc::filesystem::path const& path) { +bool waitForFile(std::filesystem::path const& path) { if (!path.has_filename()) return false; int delay = 10; HANDLE hFile; - while ((hFile = CreateFile(path.string().c_str(), FILE_GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL)) == INVALID_HANDLE_VALUE) { + while ((hFile = CreateFileA(path.string().c_str(), FILE_GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL)) == INVALID_HANDLE_VALUE) { if (GetLastError() == ERROR_SHARING_VIOLATION) { Sleep(delay); // the delay would raise and go up to about 5 seconds, after which it will fail @@ -38,29 +38,29 @@ bool waitForFile(ghc::filesystem::path const& path) { } void updateFile(std::string const& name) { - auto error = std::error_code(); - if (!ghc::filesystem::exists(updatesDir / name, error) || error) + std::error_code error; + if (!std::filesystem::exists(updatesDir / name, error) || error) return; if (!waitForFile(workingDir / name)) return; - ghc::filesystem::rename(updatesDir / name, workingDir / name, error); + std::filesystem::rename(updatesDir / name, workingDir / name, error); if (error) { showError("Unable to update Geode: Unable to move " + name + " - " + error.message()); return; } } -void removePath(ghc::filesystem::path const& path) { - auto error = std::error_code(); - if (!ghc::filesystem::exists(path, error) || error) +void removePath(std::filesystem::path const& path) { + std::error_code error; + if (!std::filesystem::exists(path, error) || error) return; if (path.has_filename() && !waitForFile(path)) return; - if (ghc::filesystem::is_directory(path) && !ghc::filesystem::is_empty(path)) - ghc::filesystem::remove_all(path, error); - ghc::filesystem::remove(path, error); + if (std::filesystem::is_directory(path) && !std::filesystem::is_empty(path)) + std::filesystem::remove_all(path, error); + std::filesystem::remove(path, error); if (error) { if (path.has_filename()) showError("Unable to update Geode: Unable to remove " + path.filename().string() + " - " + error.message()); @@ -71,13 +71,13 @@ void removePath(ghc::filesystem::path const& path) { } void removeDirectory(std::string const& name) { - auto error = std::error_code(); - if (!ghc::filesystem::exists(workingDir / name, error) || error) + std::error_code error; + if (!std::filesystem::exists(workingDir / name, error) || error) return; if (!waitForFile(workingDir / name)) return; - ghc::filesystem::remove(workingDir / name, error); + std::filesystem::remove(workingDir / name, error); if (error) { showError("Unable to update Geode: Unable to remove " + name + " - " + error.message()); return; @@ -85,17 +85,17 @@ void removeDirectory(std::string const& name) { } void updateResources() { - auto error = std::error_code(); - if (!ghc::filesystem::exists(updatesDir / "resources", error) || error) + std::error_code error; + if (!std::filesystem::exists(updatesDir / "resources", error) || error) return; - ghc::filesystem::remove_all(resourcesDir / "geode.loader", error); + std::filesystem::remove_all(resourcesDir / "geode.loader", error); if (error) { showError("Unable to update Geode resources:" + error.message()); return; } - ghc::filesystem::rename(updatesDir / "resources", resourcesDir / "geode.loader", error); + std::filesystem::rename(updatesDir / "resources", resourcesDir / "geode.loader", error); if (error) { showError("Unable to update Geode resources: " + error.message()); return; @@ -103,12 +103,12 @@ void updateResources() { } int main(int argc, char* argv[]) { - workingDir = ghc::filesystem::current_path(); + workingDir = std::filesystem::current_path(); geodeDir = workingDir / "geode"; updatesDir = geodeDir / "update"; resourcesDir = geodeDir / "resources"; - if (ghc::filesystem::exists(geodeDir) && ghc::filesystem::exists(updatesDir)) { + if (std::filesystem::exists(geodeDir) && std::filesystem::exists(updatesDir)) { removePath(workingDir / "GeodeBootstrapper.dll"); updateFile("XInput9_1_0.dll"); updateFile("Geode.dll"); @@ -116,11 +116,10 @@ int main(int argc, char* argv[]) { removePath(updatesDir); } - if(argc < 2) + if (argc < 2) return 0; // restart gd using the provided path - ShellExecute(NULL, "open", (workingDir / argv[1]).string().c_str(), "", workingDir.string().c_str(), TRUE); - + ShellExecuteA(NULL, "open", (workingDir / argv[1]).string().c_str(), "", workingDir.string().c_str(), TRUE); return 0; }