@@ -697,22 +697,23 @@ var SyscallsLibrary = {
697697
698698 var startIdx = Math.floor(off / struct_size);
699699 var endIdx = Math.min(stream.getdents.length, startIdx + Math.floor(count/struct_size))
700- var node;
701700 for (var idx = startIdx; idx < endIdx; idx++) {
701+ var id;
702702 var type;
703703 var name = stream.getdents[idx];
704704 if (name === '.') {
705- node = stream.node;
705+ id = stream.node.id ;
706706 type = 4; // DT_DIR
707707 }
708708 else if (name === '..') {
709709 var lookup = FS.lookupPath(stream.path, { parent: true });
710- node = lookup.node;
710+ id = lookup.node.id ;
711711 type = 4; // DT_DIR
712712 }
713713 else {
714+ var child;
714715 try {
715- node = FS.lookupNode(stream.node, name);
716+ child = FS.lookupNode(stream.node, name);
716717 } catch (e) {
717718 // If the entry is not a directory, file, or symlink, nodefs
718719 // lookupNode will raise EINVAL. Skip these and continue.
@@ -721,17 +722,16 @@ var SyscallsLibrary = {
721722 }
722723 throw e;
723724 }
724- type = FS.isChrdev(node.mode) ? 2 : // DT_CHR, character device.
725- FS.isDir(node.mode) ? 4 : // DT_DIR, directory.
726- FS.isLink(node.mode) ? 10 : // DT_LNK, symbolic link.
725+ id = child.id;
726+ type = FS.isChrdev(child.mode) ? 2 : // DT_CHR, character device.
727+ FS.isDir(child.mode) ? 4 : // DT_DIR, directory.
728+ FS.isLink(child.mode) ? 10 : // DT_LNK, symbolic link.
727729 8; // DT_REG, regular file.
728730 }
729- // We use getattr to decide which ino we return to stat, so make sure to
730- // use it to decide which ino we return to readdir too. noderawfs puts the
731- // native inode into node.id and doesn't define node_ops.getattr so use
732- // that as a fallback.
733- var ino = node.node_ops.getattr?.(node).ino ?? node.id;
734- {{{ makeSetValue('dirp + pos', C_STRUCTS.dirent.d_ino, 'ino', 'i64') }}};
731+ #if ASSERTIONS
732+ assert(id);
733+ #endif
734+ {{{ makeSetValue('dirp + pos', C_STRUCTS.dirent.d_ino, 'id', 'i64') }}};
735735 {{{ makeSetValue('dirp + pos', C_STRUCTS.dirent.d_off, '(idx + 1) * struct_size', 'i64') }}};
736736 {{{ makeSetValue('dirp + pos', C_STRUCTS.dirent.d_reclen, C_STRUCTS.dirent.__size__, 'i16') }}};
737737 {{{ makeSetValue('dirp + pos', C_STRUCTS.dirent.d_type, 'type', 'i8') }}};
0 commit comments