Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Marshall <keithmarshall@@users.sf.net>2011-08-28 00:16:47 +0400
committerKeith Marshall <keithmarshall@@users.sf.net>2011-08-28 00:16:47 +0400
commit36ccb620ec90661974de944299ca4d4b975bafee (patch)
treeb2005dcc8aa5e6d1992b2d8e5629ad850649490b
parentf4ec8743281979dcf223b961395a8a76a036b376 (diff)
Don't expose implementation detail for opaque DIRENT structures.
-rw-r--r--winsup/mingw/ChangeLog9
-rw-r--r--winsup/mingw/include/dirent.h59
-rw-r--r--winsup/mingw/mingwex/dirent.c54
3 files changed, 69 insertions, 53 deletions
diff --git a/winsup/mingw/ChangeLog b/winsup/mingw/ChangeLog
index 711906db1..d8a9d4e1a 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 44fb1c0a8..7d2af2b19 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 399a8d1b3..0d3e54a09 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)