mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-03-30 07:20:13 +00:00
Implemented fs::file::get_handle
This commit is contained in:
parent
a68983b551
commit
d0e171784c
@ -772,7 +772,7 @@ fs::file::file(const std::string& path, bs_t<open_mode> mode)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
class windows_file final : public file_base
|
class windows_file final : public file_base, public get_native_handle
|
||||||
{
|
{
|
||||||
const HANDLE m_handle;
|
const HANDLE m_handle;
|
||||||
|
|
||||||
@ -879,6 +879,11 @@ fs::file::file(const std::string& path, bs_t<open_mode> mode)
|
|||||||
|
|
||||||
return size.QuadPart;
|
return size.QuadPart;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
native_handle get() override
|
||||||
|
{
|
||||||
|
return m_handle;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
m_file = std::make_unique<windows_file>(handle);
|
m_file = std::make_unique<windows_file>(handle);
|
||||||
@ -902,7 +907,7 @@ fs::file::file(const std::string& path, bs_t<open_mode> mode)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
class unix_file final : public file_base
|
class unix_file final : public file_base, public get_native_handle
|
||||||
{
|
{
|
||||||
const int m_fd;
|
const int m_fd;
|
||||||
|
|
||||||
@ -991,6 +996,11 @@ fs::file::file(const std::string& path, bs_t<open_mode> mode)
|
|||||||
|
|
||||||
return file_info.st_size;
|
return file_info.st_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
native_handle get() override
|
||||||
|
{
|
||||||
|
return m_fd;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
m_file = std::make_unique<unix_file>(fd);
|
m_file = std::make_unique<unix_file>(fd);
|
||||||
@ -1066,6 +1076,20 @@ fs::file::file(const void* ptr, std::size_t size)
|
|||||||
m_file = std::make_unique<memory_stream>(ptr, size);
|
m_file = std::make_unique<memory_stream>(ptr, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fs::native_handle fs::file::get_handle() const
|
||||||
|
{
|
||||||
|
if (auto getter = dynamic_cast<get_native_handle*>(m_file.get()))
|
||||||
|
{
|
||||||
|
return getter->get();
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
return INVALID_HANDLE_VALUE;
|
||||||
|
#else
|
||||||
|
return -1;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
void fs::dir::xnull() const
|
void fs::dir::xnull() const
|
||||||
{
|
{
|
||||||
fmt::throw_exception<std::logic_error>("fs::dir is null");
|
fmt::throw_exception<std::logic_error>("fs::dir is null");
|
||||||
|
@ -10,6 +10,12 @@
|
|||||||
|
|
||||||
namespace fs
|
namespace fs
|
||||||
{
|
{
|
||||||
|
#ifdef _WIN32
|
||||||
|
using native_handle = void*;
|
||||||
|
#else
|
||||||
|
using native_handle = int;
|
||||||
|
#endif
|
||||||
|
|
||||||
// File open mode flags
|
// File open mode flags
|
||||||
enum class open_mode : u32
|
enum class open_mode : u32
|
||||||
{
|
{
|
||||||
@ -55,6 +61,12 @@ namespace fs
|
|||||||
s64 ctime;
|
s64 ctime;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Native handle getter
|
||||||
|
struct get_native_handle
|
||||||
|
{
|
||||||
|
virtual native_handle get() = 0;
|
||||||
|
};
|
||||||
|
|
||||||
// File handle base
|
// File handle base
|
||||||
struct file_base
|
struct file_base
|
||||||
{
|
{
|
||||||
@ -347,6 +359,9 @@ namespace fs
|
|||||||
if (seek(0), !read(result)) xfail();
|
if (seek(0), !read(result)) xfail();
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Get native handle if available
|
||||||
|
native_handle get_handle() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
class dir final
|
class dir final
|
||||||
|
Loading…
x
Reference in New Issue
Block a user