Skip to content

Commit b7b1111

Browse files
committed
Make readdir on /proc/self/fd work in the expected way
1 parent 58889f9 commit b7b1111

File tree

3 files changed

+13
-2
lines changed

3 files changed

+13
-2
lines changed

src/library_fs.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1391,6 +1391,9 @@ FS.staticInit();
13911391
FS.mount({
13921392
mount() {
13931393
var node = FS.createNode(proc_self, 'fd', {{{ cDefs.S_IFDIR | 0o777 }}}, {{{ cDefs.S_IXUGO }}});
1394+
node.stream_ops = {
1395+
llseek: MEMFS.stream_ops.llseek,
1396+
};
13941397
node.node_ops = {
13951398
lookup(parent, name) {
13961399
var fd = +name;
@@ -1399,9 +1402,15 @@ FS.staticInit();
13991402
parent: null,
14001403
mount: { mountpoint: 'fake' },
14011404
node_ops: { readlink: () => stream.path },
1405+
id: fd + 1,
14021406
};
14031407
ret.parent = ret; // make it look like a simple root node
14041408
return ret;
1409+
},
1410+
readdir() {
1411+
return Array.from(FS.streams.entries())
1412+
.filter(([k, v]) => v)
1413+
.map(([k, v]) => k.toString());
14051414
}
14061415
};
14071416
return node;

test/fs/test_proc_self_fd.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@ int main(int argc, char* argv[]) {
1414
struct dirent *entry;
1515
while ((entry = readdir(d))) {
1616
printf("entry: %s\n", entry->d_name);
17-
printf("unexpected success reading directory!");
18-
return 1;
1917
}
2018
closedir(d);
2119

test/fs/test_proc_self_fd.out

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,6 @@
1+
entry: 0
2+
entry: 1
3+
entry: 2
4+
entry: 3
15
fd0: /dev/tty
26
done

0 commit comments

Comments
 (0)