Skip to content

Commit 704161d

Browse files
authored
[WasmFS] Make the memory backend public (#18250)
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`.
1 parent b1aaca8 commit 704161d

File tree

5 files changed

+24
-14
lines changed

5 files changed

+24
-14
lines changed

system/include/emscripten/wasmfs.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ backend_t wasmfs_create_js_file_backend(void);
4040
// A function that receives a void* and returns a backend.
4141
typedef backend_t (*backend_constructor_t)(void*);
4242

43+
backend_t wasmfs_create_memory_backend(void);
44+
4345
backend_t wasmfs_create_fetch_backend(const char* base_url);
4446

4547
backend_t wasmfs_create_node_backend(const char* root);

system/lib/wasmfs/backends/memory_backend.cpp

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,15 @@
1313

1414
namespace wasmfs {
1515

16-
ssize_t MemoryFile::write(const uint8_t* buf, size_t len, off_t offset) {
16+
ssize_t MemoryDataFile::write(const uint8_t* buf, size_t len, off_t offset) {
1717
if (offset + len > buffer.size()) {
1818
buffer.resize(offset + len);
1919
}
2020
std::memcpy(&buffer[offset], buf, len);
2121
return len;
2222
}
2323

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

93-
class MemoryFileBackend : public Backend {
93+
class MemoryBackend : public Backend {
9494
public:
9595
std::shared_ptr<DataFile> createFile(mode_t mode) override {
96-
return std::make_shared<MemoryFile>(mode, this);
96+
return std::make_shared<MemoryDataFile>(mode, this);
9797
}
9898
std::shared_ptr<Directory> createDirectory(mode_t mode) override {
9999
return std::make_shared<MemoryDirectory>(mode, this);
@@ -103,8 +103,14 @@ class MemoryFileBackend : public Backend {
103103
}
104104
};
105105

106-
backend_t createMemoryFileBackend() {
107-
return wasmFS.addBackend(std::make_unique<MemoryFileBackend>());
106+
backend_t createMemoryBackend() {
107+
return wasmFS.addBackend(std::make_unique<MemoryBackend>());
108108
}
109109

110+
extern "C" {
111+
112+
backend_t wasmfs_create_memory_backend() { return createMemoryBackend(); }
113+
114+
} // extern "C"
115+
110116
} // namespace wasmfs

system/lib/wasmfs/memory_backend.h

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
namespace wasmfs {
1818
// This class describes a file that lives in Wasm Memory.
19-
class MemoryFile : public DataFile {
19+
class MemoryDataFile : public DataFile {
2020
std::vector<uint8_t> buffer;
2121

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

3333
public:
34-
MemoryFile(mode_t mode, backend_t backend) : DataFile(mode, backend) {}
34+
MemoryDataFile(mode_t mode, backend_t backend) : DataFile(mode, backend) {}
3535

3636
class Handle : public DataFile::Handle {
3737

38-
std::shared_ptr<MemoryFile> getFile() { return file->cast<MemoryFile>(); }
38+
std::shared_ptr<MemoryDataFile> getFile() {
39+
return file->cast<MemoryDataFile>();
40+
}
3941

4042
public:
4143
Handle(std::shared_ptr<File> dataFile) : DataFile::Handle(dataFile) {}
@@ -111,6 +113,6 @@ class MemorySymlink : public Symlink {
111113
: Symlink(backend), target(target) {}
112114
};
113115

114-
backend_t createMemoryFileBackend();
116+
backend_t createMemoryBackend();
115117

116118
} // namespace wasmfs

system/lib/wasmfs/wasmfs.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,12 +71,12 @@ WasmFS::~WasmFS() {
7171
}
7272

7373
std::shared_ptr<Directory> WasmFS::initRootDirectory() {
74-
74+
7575
#ifdef WASMFS_CASE_INSENSITIVE
7676
auto rootBackend =
77-
createIgnoreCaseBackend([]() { return createMemoryFileBackend(); });
77+
createIgnoreCaseBackend([]() { return createMemoryBackend(); });
7878
#else
79-
auto rootBackend = createMemoryFileBackend();
79+
auto rootBackend = createMemoryBackend();
8080
#endif
8181
auto rootDirectory =
8282
rootBackend->createDirectory(S_IRUGO | S_IXUGO | S_IWUGO);

test/wasmfs/get_backend.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

1616
static backend_t get_backend() {
1717
#ifdef WASMFS_MEMORY_BACKEND
18-
return NULL;
18+
return wasmfs_create_memory_backend();
1919
#else
2020
#ifdef WASMFS_NODE_BACKEND
2121
return wasmfs_create_node_backend(".");

0 commit comments

Comments
 (0)