Move NtCreateFile/NtOpenFile to VFS, implement (mostly) for real.
Progress on #305.
This commit is contained in:
@@ -16,10 +16,10 @@
|
||||
namespace xe {
|
||||
namespace kernel {
|
||||
|
||||
XFile::XFile(KernelState* kernel_state, vfs::Mode mode, vfs::Entry* entry)
|
||||
XFile::XFile(KernelState* kernel_state, uint32_t file_access, vfs::Entry* entry)
|
||||
: XObject(kernel_state, kTypeFile),
|
||||
entry_(entry),
|
||||
mode_(mode),
|
||||
file_access_(file_access),
|
||||
position_(0),
|
||||
find_index_(0) {
|
||||
async_event_ = new XEvent(kernel_state);
|
||||
|
||||
@@ -81,6 +81,7 @@ class XFile : public XObject {
|
||||
|
||||
vfs::Device* device() const { return entry_->device(); }
|
||||
vfs::Entry* entry() const { return entry_; }
|
||||
uint32_t file_access() const { return file_access_; }
|
||||
|
||||
const std::string& path() const { return entry_->path(); }
|
||||
const std::string& name() const { return entry_->name(); }
|
||||
@@ -102,7 +103,7 @@ class XFile : public XObject {
|
||||
virtual void* GetWaitHandle();
|
||||
|
||||
protected:
|
||||
XFile(KernelState* kernel_state, vfs::Mode mode, vfs::Entry* entry);
|
||||
XFile(KernelState* kernel_state, uint32_t file_access, vfs::Entry* entry);
|
||||
virtual X_STATUS ReadSync(void* buffer, size_t buffer_length,
|
||||
size_t byte_offset, size_t* out_bytes_read) = 0;
|
||||
virtual X_STATUS WriteSync(const void* buffer, size_t buffer_length,
|
||||
@@ -112,7 +113,7 @@ class XFile : public XObject {
|
||||
|
||||
private:
|
||||
vfs::Entry* entry_;
|
||||
vfs::Mode mode_;
|
||||
uint32_t file_access_;
|
||||
XEvent* async_event_;
|
||||
|
||||
// TODO(benvanik): create flags, open state, etc.
|
||||
|
||||
@@ -57,9 +57,9 @@ X_STATUS XUserModule::LoadFromFile(std::string path) {
|
||||
std::vector<uint8_t> buffer(fs_entry->size());
|
||||
|
||||
// Open file for reading.
|
||||
XFile* file_ptr = nullptr;
|
||||
result = fs_entry->Open(kernel_state(), vfs::Mode::READ, false, &file_ptr);
|
||||
object_ref<XFile> file(file_ptr);
|
||||
object_ref<XFile> file;
|
||||
result =
|
||||
fs_entry->Open(kernel_state(), vfs::FileAccess::kGenericRead, &file);
|
||||
if (result) {
|
||||
return result;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user