@@ -130,19 +130,23 @@ NALL_HEADER_INLINE auto directory::resolveSymLink(const string& pathname) -> str
130130 REPARSE_DATA_BUFFER* reparseData = (REPARSE_DATA_BUFFER*)buffer;
131131 u16 substituteNameOffset = 0 , substituteNameLength = 0 ;
132132 wchar_t * pathBuffer = nullptr ;
133- if (reparseData->ReparseTag == IO_REPARSE_TAG_SYMLINK) {
134- pathBuffer = reparseData->SymbolicLinkReparseBuffer .PathBuffer ;
135- substituteNameOffset = reparseData->SymbolicLinkReparseBuffer .SubstituteNameOffset / sizeof (wchar_t );
136- substituteNameLength = reparseData->SymbolicLinkReparseBuffer .SubstituteNameLength / sizeof (wchar_t );
137- result = (slice ((const char *)utf8_t (pathBuffer) + substituteNameOffset, 0 , substituteNameLength)).transform (" \\ " , " /" );
138- if (result.beginsWith (" /??/" )) result = result.slice (4 );
139- } else if (reparseData->ReparseTag == IO_REPARSE_TAG_MOUNT_POINT) {
140- pathBuffer = reparseData->MountPointReparseBuffer .PathBuffer ;
141- substituteNameOffset = reparseData->MountPointReparseBuffer .SubstituteNameOffset / sizeof (wchar_t );
142- substituteNameLength = reparseData->MountPointReparseBuffer .SubstituteNameLength / sizeof (wchar_t );
143- result = (slice ((const char *)utf8_t (pathBuffer) + substituteNameOffset, 0 , substituteNameLength)).transform (" \\ " , " /" );
144- if (result.beginsWith (" /??/" )) result = result.slice (4 );
133+ switch (reparseData->ReparseTag ) {
134+ case IO_REPARSE_TAG_SYMLINK:
135+ pathBuffer = reparseData->SymbolicLinkReparseBuffer .PathBuffer ;
136+ substituteNameOffset = reparseData->SymbolicLinkReparseBuffer .SubstituteNameOffset / sizeof (wchar_t );
137+ substituteNameLength = reparseData->SymbolicLinkReparseBuffer .SubstituteNameLength / sizeof (wchar_t );
138+ break ;
139+ case IO_REPARSE_TAG_MOUNT_POINT:
140+ pathBuffer = reparseData->MountPointReparseBuffer .PathBuffer ;
141+ substituteNameOffset = reparseData->MountPointReparseBuffer .SubstituteNameOffset / sizeof (wchar_t );
142+ substituteNameLength = reparseData->MountPointReparseBuffer .SubstituteNameLength / sizeof (wchar_t );
143+ break ;
144+ default :
145+ CloseHandle (hFile);
146+ return result;
145147 }
148+ result = (slice ((const char *)utf8_t (pathBuffer) + substituteNameOffset, 0 , substituteNameLength)).transform (" \\ " , " /" );
149+ if (result.beginsWith (" /??/" )) result = result.slice (4 );
146150 }
147151 CloseHandle (hFile);
148152 }
0 commit comments