@@ -49,21 +49,21 @@ const IFMT = 0b1111;
4949// mask to unset low 4 bits
5050const IFMT_UNKNOWN = ~ IFMT ;
5151// set after successfully calling readdir() and getting entries.
52- const READDIR_CALLED = 16 ;
52+ const READDIR_CALLED = 0b0000_0001_0000 ;
5353// set after a successful lstat()
54- const LSTAT_CALLED = 32 ;
54+ const LSTAT_CALLED = 0b0000_0010_0000 ;
5555// set if an entry (or one of its parents) is definitely not a dir
56- const ENOTDIR = 64 ;
56+ const ENOTDIR = 0b0000_0100_0000 ;
5757// set if an entry (or one of its parents) does not exist
5858// (can also be set on lstat errors like EACCES or ENAMETOOLONG)
59- const ENOENT = 128 ;
59+ const ENOENT = 0b0000_1000_0000 ;
6060// cannot have child entries -- also verify &IFMT is either IFDIR or IFLNK
6161// set if we fail to readlink
62- const ENOREADLINK = 256 ;
62+ const ENOREADLINK = 0b0001_0000_0000 ;
6363// set if we know realpath() will fail
64- const ENOREALPATH = 512 ;
64+ const ENOREALPATH = 0b0010_0000_0000 ;
6565const ENOCHILD = ENOTDIR | ENOENT | ENOREALPATH ;
66- const TYPEMASK = 1023 ;
66+ const TYPEMASK = 0b0011_1111_1111 ;
6767const entToType = ( s ) => s . isFile ( )
6868 ? IFREG
6969 : s . isDirectory ( )
@@ -675,7 +675,7 @@ export class PathBase {
675675 /* c8 ignore stop */
676676 try {
677677 const read = await this . #fs. promises . readlink ( this . fullpath ( ) ) ;
678- const linkTarget = this . parent . resolve ( read ) ;
678+ const linkTarget = ( await this . parent . realpath ( ) ) ? .resolve ( read ) ;
679679 if ( linkTarget ) {
680680 return ( this . #linkTarget = linkTarget ) ;
681681 }
@@ -704,7 +704,7 @@ export class PathBase {
704704 /* c8 ignore stop */
705705 try {
706706 const read = this . #fs. readlinkSync ( this . fullpath ( ) ) ;
707- const linkTarget = this . parent . resolve ( read ) ;
707+ const linkTarget = ( this . parent . realpathSync ( ) ) ? .resolve ( read ) ;
708708 if ( linkTarget ) {
709709 return ( this . #linkTarget = linkTarget ) ;
710710 }
@@ -719,7 +719,9 @@ export class PathBase {
719719 this . #type |= READDIR_CALLED ;
720720 // mark all remaining provisional children as ENOENT
721721 for ( let p = children . provisional ; p < children . length ; p ++ ) {
722- children [ p ] . #markENOENT( ) ;
722+ const c = children [ p ] ;
723+ if ( c )
724+ c . #markENOENT( ) ;
723725 }
724726 }
725727 #markENOENT( ) {
0 commit comments