7
7
// See https://github.com/emscripten-core/emscripten/issues/15041.
8
8
9
9
#include < emscripten/html5.h>
10
+ #include < unistd.h>
10
11
#include < vector>
11
12
#include < wasi/api.h>
12
13
@@ -113,6 +114,31 @@ class StderrFile : public WritingStdFile {
113
114
StderrFile () {}
114
115
};
115
116
117
+ class RandomFile : public DataFile {
118
+ void open (oflags_t ) override {}
119
+ void close () override {}
120
+
121
+ ssize_t write (const uint8_t * buf, size_t len, off_t offset) override {
122
+ return -__WASI_ERRNO_INVAL;
123
+ }
124
+
125
+ ssize_t read (uint8_t * buf, size_t len, off_t offset) override {
126
+ uint8_t * end = buf + len;
127
+ for (; buf < end; buf += 256 ) {
128
+ int err = getentropy (buf, std::min (end - buf, 256l ));
129
+ assert (err == 0 );
130
+ }
131
+ return len;
132
+ };
133
+
134
+ void flush () override {}
135
+ size_t getSize () override { return 0 ; }
136
+ void setSize (size_t size) override {}
137
+
138
+ public:
139
+ RandomFile () : DataFile(S_IRUGO, NullBackend, S_IFCHR) { seekable = false ; }
140
+ };
141
+
116
142
} // anonymous namespace
117
143
118
144
std::shared_ptr<DataFile> getStdin () {
@@ -130,4 +156,14 @@ std::shared_ptr<DataFile> getStderr() {
130
156
return stderr;
131
157
}
132
158
159
+ std::shared_ptr<DataFile> getRandom () {
160
+ static auto random = std::make_shared<RandomFile>();
161
+ return random;
162
+ }
163
+
164
+ std::shared_ptr<DataFile> getURandom () {
165
+ static auto urandom = std::make_shared<RandomFile>();
166
+ return urandom;
167
+ }
168
+
133
169
} // namespace wasmfs::SpecialFiles
0 commit comments