Skip to content

Commit

Permalink
[WasmFS] Make the memory backend public (#18250)
Browse files Browse the repository at this point in the history
Add `wasmfs_create_memory_backend` to the public header, use it in tests, and
update the internal name of the backend to be `MemoryBackend` rather than
`MemoryFileBackend`.
  • Loading branch information
tlively committed Nov 24, 2022
1 parent b1aaca8 commit 704161d
Show file tree
Hide file tree
Showing 5 changed files with 24 additions and 14 deletions.
2 changes: 2 additions & 0 deletions system/include/emscripten/wasmfs.h
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@ backend_t wasmfs_create_js_file_backend(void);
// A function that receives a void* and returns a backend.
typedef backend_t (*backend_constructor_t)(void*);

backend_t wasmfs_create_memory_backend(void);

backend_t wasmfs_create_fetch_backend(const char* base_url);

backend_t wasmfs_create_node_backend(const char* root);
Expand Down
18 changes: 12 additions & 6 deletions system/lib/wasmfs/backends/memory_backend.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,15 @@

namespace wasmfs {

ssize_t MemoryFile::write(const uint8_t* buf, size_t len, off_t offset) {
ssize_t MemoryDataFile::write(const uint8_t* buf, size_t len, off_t offset) {
if (offset + len > buffer.size()) {
buffer.resize(offset + len);
}
std::memcpy(&buffer[offset], buf, len);
return len;
}

ssize_t MemoryFile::read(uint8_t* buf, size_t len, off_t offset) {
ssize_t MemoryDataFile::read(uint8_t* buf, size_t len, off_t offset) {
if (offset >= buffer.size()) {
len = 0;
} else if (offset + len >= buffer.size()) {
Expand Down Expand Up @@ -90,10 +90,10 @@ std::string MemoryDirectory::getName(std::shared_ptr<File> file) {
return "";
}

class MemoryFileBackend : public Backend {
class MemoryBackend : public Backend {
public:
std::shared_ptr<DataFile> createFile(mode_t mode) override {
return std::make_shared<MemoryFile>(mode, this);
return std::make_shared<MemoryDataFile>(mode, this);
}
std::shared_ptr<Directory> createDirectory(mode_t mode) override {
return std::make_shared<MemoryDirectory>(mode, this);
Expand All @@ -103,8 +103,14 @@ class MemoryFileBackend : public Backend {
}
};

backend_t createMemoryFileBackend() {
return wasmFS.addBackend(std::make_unique<MemoryFileBackend>());
backend_t createMemoryBackend() {
return wasmFS.addBackend(std::make_unique<MemoryBackend>());
}

extern "C" {

backend_t wasmfs_create_memory_backend() { return createMemoryBackend(); }

} // extern "C"

} // namespace wasmfs
10 changes: 6 additions & 4 deletions system/lib/wasmfs/memory_backend.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

namespace wasmfs {
// This class describes a file that lives in Wasm Memory.
class MemoryFile : public DataFile {
class MemoryDataFile : public DataFile {
std::vector<uint8_t> buffer;

int open(oflags_t) override { return 0; }
Expand All @@ -31,11 +31,13 @@ class MemoryFile : public DataFile {
}

public:
MemoryFile(mode_t mode, backend_t backend) : DataFile(mode, backend) {}
MemoryDataFile(mode_t mode, backend_t backend) : DataFile(mode, backend) {}

class Handle : public DataFile::Handle {

std::shared_ptr<MemoryFile> getFile() { return file->cast<MemoryFile>(); }
std::shared_ptr<MemoryDataFile> getFile() {
return file->cast<MemoryDataFile>();
}

public:
Handle(std::shared_ptr<File> dataFile) : DataFile::Handle(dataFile) {}
Expand Down Expand Up @@ -111,6 +113,6 @@ class MemorySymlink : public Symlink {
: Symlink(backend), target(target) {}
};

backend_t createMemoryFileBackend();
backend_t createMemoryBackend();

} // namespace wasmfs
6 changes: 3 additions & 3 deletions system/lib/wasmfs/wasmfs.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -71,12 +71,12 @@ WasmFS::~WasmFS() {
}

std::shared_ptr<Directory> WasmFS::initRootDirectory() {

#ifdef WASMFS_CASE_INSENSITIVE
auto rootBackend =
createIgnoreCaseBackend([]() { return createMemoryFileBackend(); });
createIgnoreCaseBackend([]() { return createMemoryBackend(); });
#else
auto rootBackend = createMemoryFileBackend();
auto rootBackend = createMemoryBackend();
#endif
auto rootDirectory =
rootBackend->createDirectory(S_IRUGO | S_IXUGO | S_IWUGO);
Expand Down
2 changes: 1 addition & 1 deletion test/wasmfs/get_backend.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

static backend_t get_backend() {
#ifdef WASMFS_MEMORY_BACKEND
return NULL;
return wasmfs_create_memory_backend();
#else
#ifdef WASMFS_NODE_BACKEND
return wasmfs_create_node_backend(".");
Expand Down

0 comments on commit 704161d

Please sign in to comment.