[Mammoth] Add a call for listing a directory.
This commit is contained in:
parent
d0a3bf3936
commit
e0bf7a9a1c
|
@ -1,5 +1,6 @@
|
||||||
#include "file/file.h"
|
#include "file/file.h"
|
||||||
|
|
||||||
|
#include <glacier/string/str_split.h>
|
||||||
#include <victoriafalls/victoriafalls.yunq.client.h>
|
#include <victoriafalls/victoriafalls.yunq.client.h>
|
||||||
#include <yellowstone/yellowstone.yunq.client.h>
|
#include <yellowstone/yellowstone.yunq.client.h>
|
||||||
#include <zglobal.h>
|
#include <zglobal.h>
|
||||||
|
@ -11,12 +12,8 @@ namespace {
|
||||||
|
|
||||||
VFSClient* gVfsClient = nullptr;
|
VFSClient* gVfsClient = nullptr;
|
||||||
|
|
||||||
} // namespace
|
void GetVfsClientIfNeeded() {
|
||||||
|
if (gVfsClient == nullptr) {
|
||||||
void SetVfsCap(z_cap_t vfs_cap) { gVfsClient = new VFSClient(vfs_cap); }
|
|
||||||
|
|
||||||
File File::Open(glcr::StringView path) {
|
|
||||||
if (gVfsClient == 0) {
|
|
||||||
YellowstoneClient client(gInitEndpointCap);
|
YellowstoneClient client(gInitEndpointCap);
|
||||||
|
|
||||||
GetEndpointRequest yreq;
|
GetEndpointRequest yreq;
|
||||||
|
@ -26,6 +23,14 @@ File File::Open(glcr::StringView path) {
|
||||||
|
|
||||||
gVfsClient = new VFSClient(yresp.endpoint());
|
gVfsClient = new VFSClient(yresp.endpoint());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace
|
||||||
|
|
||||||
|
void SetVfsCap(z_cap_t vfs_cap) { gVfsClient = new VFSClient(vfs_cap); }
|
||||||
|
|
||||||
|
File File::Open(glcr::StringView path) {
|
||||||
|
GetVfsClientIfNeeded();
|
||||||
|
|
||||||
OpenFileRequest req;
|
OpenFileRequest req;
|
||||||
req.set_path(path);
|
req.set_path(path);
|
||||||
|
@ -44,4 +49,20 @@ uint8_t* File::byte_ptr() {
|
||||||
return reinterpret_cast<uint8_t*>(file_data_.vaddr());
|
return reinterpret_cast<uint8_t*>(file_data_.vaddr());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
glcr::ErrorOr<glcr::Vector<glcr::String>> ListDirectory(glcr::StringView path) {
|
||||||
|
GetVfsClientIfNeeded();
|
||||||
|
|
||||||
|
GetDirectoryRequest req;
|
||||||
|
req.set_path(path);
|
||||||
|
Directory dir;
|
||||||
|
RET_ERR(gVfsClient->GetDirectory(req, dir));
|
||||||
|
|
||||||
|
auto file_views = glcr::StrSplit(dir.filenames(), ',');
|
||||||
|
glcr::Vector<glcr::String> files;
|
||||||
|
for (uint64_t i = 0; i < file_views.size(); i++) {
|
||||||
|
files.PushBack(file_views[i]);
|
||||||
|
}
|
||||||
|
return files;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace mmth
|
} // namespace mmth
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <glacier/container/vector.h>
|
||||||
#include <glacier/memory/move.h>
|
#include <glacier/memory/move.h>
|
||||||
|
#include <glacier/status/error_or.h>
|
||||||
|
#include <glacier/string/string.h>
|
||||||
#include <glacier/string/string_view.h>
|
#include <glacier/string/string_view.h>
|
||||||
|
|
||||||
#include "mammoth/util/memory_region.h"
|
#include "mammoth/util/memory_region.h"
|
||||||
|
@ -29,4 +32,7 @@ class File {
|
||||||
: file_data_(glcr::Move(file)), size_(size) {}
|
: file_data_(glcr::Move(file)), size_(size) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// TODO: Move this to a separate file.
|
||||||
|
glcr::ErrorOr<glcr::Vector<glcr::String>> ListDirectory(glcr::StringView path);
|
||||||
|
|
||||||
} // namespace mmth
|
} // namespace mmth
|
||||||
|
|
Loading…
Reference in New Issue