@@ -18,40 +18,6 @@ static inline void finddata2dirent(struct dirent *ent, WIN32_FIND_DATAW *fdata)
1818 ent -> d_type = DT_REG ;
1919}
2020
21- DIR * opendir (const char * name )
22- {
23- wchar_t pattern [MAX_PATH + 2 ]; /* + 2 for '/' '*' */
24- WIN32_FIND_DATAW fdata ;
25- HANDLE h ;
26- int len ;
27- DIR * dir ;
28-
29- /* convert name to UTF-16 and check length < MAX_PATH */
30- if ((len = xutftowcs_path (pattern , name )) < 0 )
31- return NULL ;
32-
33- /* append optional '/' and wildcard '*' */
34- if (len && !is_dir_sep (pattern [len - 1 ]))
35- pattern [len ++ ] = '/' ;
36- pattern [len ++ ] = '*' ;
37- pattern [len ] = 0 ;
38-
39- /* open find handle */
40- h = FindFirstFileW (pattern , & fdata );
41- if (h == INVALID_HANDLE_VALUE ) {
42- DWORD err = GetLastError ();
43- errno = (err == ERROR_DIRECTORY ) ? ENOTDIR : err_win_to_posix (err );
44- return NULL ;
45- }
46-
47- /* initialize DIR structure and copy first dir entry */
48- dir = xmalloc (sizeof (DIR ));
49- dir -> dd_handle = h ;
50- dir -> dd_stat = 0 ;
51- finddata2dirent (& dir -> dd_dir , & fdata );
52- return dir ;
53- }
54-
5521struct dirent * readdir (DIR * dir )
5622{
5723 if (!dir ) {
@@ -90,3 +56,37 @@ int closedir(DIR *dir)
9056 free (dir );
9157 return 0 ;
9258}
59+
60+ DIR * opendir (const char * name )
61+ {
62+ wchar_t pattern [MAX_PATH + 2 ]; /* + 2 for '/' '*' */
63+ WIN32_FIND_DATAW fdata ;
64+ HANDLE h ;
65+ int len ;
66+ DIR * dir ;
67+
68+ /* convert name to UTF-16 and check length < MAX_PATH */
69+ if ((len = xutftowcs_path (pattern , name )) < 0 )
70+ return NULL ;
71+
72+ /* append optional '/' and wildcard '*' */
73+ if (len && !is_dir_sep (pattern [len - 1 ]))
74+ pattern [len ++ ] = '/' ;
75+ pattern [len ++ ] = '*' ;
76+ pattern [len ] = 0 ;
77+
78+ /* open find handle */
79+ h = FindFirstFileW (pattern , & fdata );
80+ if (h == INVALID_HANDLE_VALUE ) {
81+ DWORD err = GetLastError ();
82+ errno = (err == ERROR_DIRECTORY ) ? ENOTDIR : err_win_to_posix (err );
83+ return NULL ;
84+ }
85+
86+ /* initialize DIR structure and copy first dir entry */
87+ dir = xmalloc (sizeof (DIR ));
88+ dir -> dd_handle = h ;
89+ dir -> dd_stat = 0 ;
90+ finddata2dirent (& dir -> dd_dir , & fdata );
91+ return dir ;
92+ }
0 commit comments