diff options
author | Keith Marshall <keithmarshall@@users.sf.net> | 2011-08-27 20:16:47 +0000 |
---|---|---|
committer | Keith Marshall <keithmarshall@@users.sf.net> | 2011-08-27 20:16:47 +0000 |
commit | 36ccb620ec90661974de944299ca4d4b975bafee (patch) | |
tree | b2005dcc8aa5e6d1992b2d8e5629ad850649490b /winsup/mingw | |
parent | f4ec8743281979dcf223b961395a8a76a036b376 (diff) | |
download | newlib-36ccb620ec90661974de944299ca4d4b975bafee.zip newlib-36ccb620ec90661974de944299ca4d4b975bafee.tar.gz newlib-36ccb620ec90661974de944299ca4d4b975bafee.tar.bz2 |
Don't expose implementation detail for opaque DIRENT structures.
Diffstat (limited to 'winsup/mingw')
-rw-r--r-- | winsup/mingw/ChangeLog | 9 | ||||
-rw-r--r-- | winsup/mingw/include/dirent.h | 59 | ||||
-rw-r--r-- | winsup/mingw/mingwex/dirent.c | 54 |
3 files changed, 69 insertions, 53 deletions
diff --git a/winsup/mingw/ChangeLog b/winsup/mingw/ChangeLog index 711906d..d8a9d4e 100644 --- a/winsup/mingw/ChangeLog +++ b/winsup/mingw/ChangeLog @@ -1,3 +1,12 @@ +2011-08-27 Keith Marshall <keithmarshall@users.sourceforge.net> + + Don't expose implementation detail for opaque DIRENT structures. + + * include/dirent.h (DIR, _WDIR): Declare as opaque data types. + (__dirstream_t, __wdirstream_t): Add these tags for their underlying + structures, respectively; move their detailed declarations to... + * mingwex/dirent.c: ...here. + 2011-08-23 Chris Sutcliffe <ir0nh34d@users.sourceforge.net> * include/_mingw.h: Increment version to 3.20. diff --git a/winsup/mingw/include/dirent.h b/winsup/mingw/include/dirent.h index 44fb1c0..7d2af2b 100644 --- a/winsup/mingw/include/dirent.h +++ b/winsup/mingw/include/dirent.h @@ -28,34 +28,10 @@ struct dirent }; /* - * 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). + * This opaque data type represents the private structure + * through which a directory stream is referenced. */ -typedef struct -{ - /* disk transfer area for this dir */ - struct _finddata_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; - - /* given path for dir with search pattern (struct is extended) */ - char dd_name[1]; -} DIR; +typedef struct __dirstream_t DIR; DIR* __cdecl __MINGW_NOTHROW opendir (const char*); struct dirent* __cdecl __MINGW_NOTHROW readdir (DIR*); @@ -76,33 +52,10 @@ struct _wdirent }; /* - * This is an internal data structure. Good programmers will not use it - * except as an argument to one of the functions below. + * This opaque data type represents the private structure + * through which a wide directory stream is referenced. */ -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 __wdirstream_t _WDIR; _WDIR* __cdecl __MINGW_NOTHROW _wopendir (const wchar_t*); struct _wdirent* __cdecl __MINGW_NOTHROW _wreaddir (_WDIR*); diff --git a/winsup/mingw/mingwex/dirent.c b/winsup/mingw/mingwex/dirent.c index 399a8d1..0d3e54a 100644 --- a/winsup/mingw/mingwex/dirent.c +++ b/winsup/mingw/mingwex/dirent.c @@ -28,6 +28,60 @@ #define SUFFIX _T("*") #define SLASH _T("\\") +struct __dirstream_t +{ + /* Actual (private) declaration for opaque data type "DIR". */ + + /* disk transfer area for this dir */ + struct _finddata_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: + * (type is now int -- was short in older versions). + * 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) */ + char dd_name[1]; +}; + +struct __wdirstream_t +{ + /* Actual (private) declaration for opaque data type "_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; + + /* _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]; +}; /* Helper for opendir(). */ static inline unsigned _tGetFileAttributes (const _TCHAR * tPath) |