Also update two comments in the moved structure to refer to _wfindnext instead of _findnext.
DIR and _WDIR are supposed to be opaque structures which applications shouldn't access directly. Also, their arrangement was incorrect from applications' point of view if _USE_32BIT_TIME_T was defined due to how _wfinddata_t is defined. --- mingw-w64-crt/misc/dirent.c | 58 ++++++++++++++++++++++++++++++ mingw-w64-headers/crt/dirent.h | 65 ++-------------------------------- 2 files changed, 60 insertions(+), 63 deletions(-) diff --git a/mingw-w64-crt/misc/dirent.c b/mingw-w64-crt/misc/dirent.c index f58e44b7f..5d3f921a8 100644 --- a/mingw-w64-crt/misc/dirent.c +++ b/mingw-w64-crt/misc/dirent.c @@ -30,6 +30,64 @@ #include <tchar.h> +struct __dirent_DIR +{ + /* disk transfer area for this dir */ + struct _wfinddata_t dd_dta; + + /* dirent struct to return from dir (NOTE: this makes this thread + * safe as long as only one thread uses a particular DIR struct at + * a time) */ + struct dirent dd_dir; + + /* _wfindnext handle */ + intptr_t dd_handle; + + /* + * Status of search: + * 0 = not started yet (next entry to read is first entry) + * -1 = off the end + * positive = 0 based index of next entry + */ + int dd_stat; + + /* If readdir skips any filenames, this is set to a non-zero error + * number. If dd_errno is non-zero at the end of the directory, + * readdir sets errno = dd_errno, dd_errno = 0, and returns NULL. + * So if readdir is called again, it won't modify errno again. */ + unsigned int dd_errno; + + /* given path for dir with search pattern (struct is extended) */ + wchar_t dd_name[1]; +}; + + +struct __wdirent_WDIR +{ + /* disk transfer area for this dir */ + struct _wfinddata_t dd_dta; + + /* dirent struct to return from dir (NOTE: this makes this thread + * safe as long as only one thread uses a particular DIR struct at + * a time) */ + struct _wdirent dd_dir; + + /* _wfindnext handle */ + intptr_t dd_handle; + + /* + * Status of search: + * 0 = not started yet (next entry to read is first entry) + * -1 = off the end + * positive = 0 based index of next entry + */ + int dd_stat; + + /* given path for dir with search pattern (struct is extended) */ + wchar_t dd_name[1]; +}; + + /* * opendir * diff --git a/mingw-w64-headers/crt/dirent.h b/mingw-w64-headers/crt/dirent.h index f0e1f52b4..95050e61c 100644 --- a/mingw-w64-headers/crt/dirent.h +++ b/mingw-w64-headers/crt/dirent.h @@ -30,41 +30,7 @@ struct dirent char d_name[255 * 3 + 1]; /* [NAME_MAX] */ /* File name. */ }; -/* - * This is an internal data structure. Good programmers will not use it - * except as an argument to one of the functions below. - * dd_stat field is now int (was short in older versions). - */ -typedef struct -{ - /* disk transfer area for this dir */ - struct _wfinddata_t dd_dta; - - /* dirent struct to return from dir (NOTE: this makes this thread - * safe as long as only one thread uses a particular DIR struct at - * a time) */ - struct dirent dd_dir; - - /* _findnext handle */ - intptr_t dd_handle; - - /* - * Status of search: - * 0 = not started yet (next entry to read is first entry) - * -1 = off the end - * positive = 0 based index of next entry - */ - int dd_stat; - - /* If readdir skips any filenames, this is set to a non-zero error - * number. If dd_errno is non-zero at the end of the directory, - * readdir sets errno = dd_errno, dd_errno = 0, and returns NULL. - * So if readdir is called again, it won't modify errno again. */ - unsigned int dd_errno; - - /* given path for dir with search pattern (struct is extended) */ - wchar_t dd_name[1]; -} DIR; +typedef struct __dirent_DIR DIR; DIR* __cdecl __MINGW_NOTHROW opendir (const char*); struct dirent* __cdecl __MINGW_NOTHROW readdir (DIR*); @@ -84,34 +50,7 @@ struct _wdirent wchar_t d_name[260]; /* [FILENAME_MAX] */ /* File name. */ }; -/* - * This is an internal data structure. Good programmers will not use it - * except as an argument to one of the functions below. - */ -typedef struct -{ - /* disk transfer area for this dir */ - struct _wfinddata_t dd_dta; - - /* dirent struct to return from dir (NOTE: this makes this thread - * safe as long as only one thread uses a particular DIR struct at - * a time) */ - struct _wdirent dd_dir; - - /* _findnext handle */ - intptr_t dd_handle; - - /* - * Status of search: - * 0 = not started yet (next entry to read is first entry) - * -1 = off the end - * positive = 0 based index of next entry - */ - int dd_stat; - - /* given path for dir with search pattern (struct is extended) */ - wchar_t dd_name[1]; -} _WDIR; +typedef struct __wdirent_WDIR _WDIR; _WDIR* __cdecl __MINGW_NOTHROW _wopendir (const wchar_t*); struct _wdirent* __cdecl __MINGW_NOTHROW _wreaddir (_WDIR*); -- 2.47.1 _______________________________________________ Mingw-w64-public mailing list Mingw-w64-public@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mingw-w64-public