Skip to content

Commit 2641bfb

Browse files
authored
Fix NativeGetFiles to hidde sys and hidden files (#2997)
1 parent 76e688e commit 2641bfb

File tree

1 file changed

+51
-10
lines changed

1 file changed

+51
-10
lines changed

src/System.IO.FileSystem/nf_sys_io_filesystem_System_IO_Directory.cpp

Lines changed: 51 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -56,16 +56,37 @@ HRESULT Library_nf_sys_io_filesystem_System_IO_Directory::NativeGetChildren___ST
5656
// do nothing here, just iterate to count the items
5757
if (found)
5858
{
59-
if (isDirectory && ((fileData.Attributes & FileAttributes::FileAttributes_Directory) ==
60-
FileAttributes::FileAttributes_Directory))
59+
// skip entries that are not directories when looking for directories
60+
// skip also directories with hidden and system attribute
61+
if (isDirectory &&
62+
((fileData.Attributes & FileAttributes::FileAttributes_Directory) ==
63+
FileAttributes::FileAttributes_Directory) &&
64+
((fileData.Attributes & FileAttributes::FileAttributes_Hidden) !=
65+
FileAttributes::FileAttributes_Hidden) &&
66+
((fileData.Attributes & FileAttributes::FileAttributes_System) !=
67+
FileAttributes::FileAttributes_System))
6168
{
6269
itemsCount++;
6370
}
71+
// skip entries that are directories when looking for files
72+
// skip also files with hidden and system attribute along with extension 'sys'
6473
else if (
65-
!isDirectory && ((fileData.Attributes & FileAttributes::FileAttributes_Directory) !=
66-
FileAttributes::FileAttributes_Directory))
74+
!isDirectory &&
75+
((fileData.Attributes & FileAttributes::FileAttributes_Directory) !=
76+
FileAttributes::FileAttributes_Directory) &&
77+
((fileData.Attributes & FileAttributes::FileAttributes_Hidden) !=
78+
FileAttributes::FileAttributes_Hidden) &&
79+
((fileData.Attributes & FileAttributes::FileAttributes_System) !=
80+
FileAttributes::FileAttributes_System))
6781
{
68-
itemsCount++;
82+
const char *fileName = (const char *)fileData.FileName;
83+
const char *extension = strrchr(fileName, '.');
84+
85+
if (extension == NULL || strcmp(extension, ".sys") != 0)
86+
{
87+
// file does not have a .sys extension, OK to add to list
88+
itemsCount++;
89+
}
6990
}
7091
}
7192

@@ -99,16 +120,36 @@ HRESULT Library_nf_sys_io_filesystem_System_IO_Directory::NativeGetChildren___ST
99120
// do nothing here, just iterate to count the items
100121
if (found)
101122
{
102-
if (isDirectory && ((fileData.Attributes & FileAttributes::FileAttributes_Directory) !=
103-
FileAttributes::FileAttributes_Directory))
123+
// skip entries that are not directories when looking for directories
124+
// skip also directories with hidden and system attribute
125+
if (isDirectory &&
126+
((fileData.Attributes & FileAttributes::FileAttributes_Directory) !=
127+
FileAttributes::FileAttributes_Directory) &&
128+
((fileData.Attributes & FileAttributes::FileAttributes_Hidden) !=
129+
FileAttributes::FileAttributes_Hidden) &&
130+
((fileData.Attributes & FileAttributes::FileAttributes_System) !=
131+
FileAttributes::FileAttributes_System))
104132
{
105133
continue;
106134
}
135+
// skip entries that are directories when looking for files
136+
// skip also files with hidden and system attribute along with extension 'sys'
107137
else if (
108-
!isDirectory && ((fileData.Attributes & FileAttributes::FileAttributes_Directory) ==
109-
FileAttributes::FileAttributes_Directory))
138+
!isDirectory &&
139+
((fileData.Attributes & FileAttributes::FileAttributes_Directory) ==
140+
FileAttributes::FileAttributes_Directory) &&
141+
((fileData.Attributes & FileAttributes::FileAttributes_Hidden) ==
142+
FileAttributes::FileAttributes_Hidden) &&
143+
((fileData.Attributes & FileAttributes::FileAttributes_System) ==
144+
FileAttributes::FileAttributes_System))
110145
{
111-
continue;
146+
const char *fileName = (const char *)fileData.FileName;
147+
const char *extension = strrchr(fileName, '.');
148+
if (extension != NULL && strcmp(extension, ".sys") == 0)
149+
{
150+
// file has a .sys extension, skip it
151+
continue;
152+
}
112153
}
113154

114155
// compose file path

0 commit comments

Comments
 (0)