shadPS4/src/common/io_file.h

46 lines
1.5 KiB
C
Raw Normal View History

2024-02-23 22:32:32 +01:00
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
2024-01-26 17:01:27 +01:00
#pragma once
#include <cstdint>
#include <filesystem>
#include <optional>
class IOFile {
FILE* handle = nullptr;
static inline std::filesystem::path appData =
""; // Directory for holding app data. AppData on Windows
2024-01-26 17:01:27 +01:00
public:
IOFile() : handle(nullptr) {}
IOFile(FILE* handle) : handle(handle) {}
IOFile(const std::filesystem::path& path, const char* permissions = "rb");
bool isOpen() {
return handle != nullptr;
}
bool open(const std::filesystem::path& path, const char* permissions = "rb");
bool open(const char* filename, const char* permissions = "rb");
void close();
std::pair<bool, std::size_t> read(void* data, std::size_t length, std::size_t dataSize);
std::pair<bool, std::size_t> readBytes(void* data, std::size_t count);
std::pair<bool, std::size_t> write(const void* data, std::size_t length, std::size_t dataSize);
std::pair<bool, std::size_t> writeBytes(const void* data, std::size_t count);
std::optional<std::uint64_t> size();
bool seek(std::int64_t offset, int origin = SEEK_SET);
bool rewind();
bool flush();
FILE* getHandle();
static void setAppDataDir(const std::filesystem::path& dir);
static std::filesystem::path getAppData() {
return appData;
}
// Sets the size of the file to "size" and returns whether it succeeded or not
bool setSize(std::uint64_t size);
2024-02-23 22:32:32 +01:00
};