[1046] | 1 | /*
|
---|
| 2 | * DIRENT.H (formerly DIRLIB.H)
|
---|
| 3 | * This file has no copyright assigned and is placed in the Public Domain.
|
---|
| 4 | * This file is a part of the mingw-runtime package.
|
---|
| 5 | * No warranty is given; refer to the file DISCLAIMER within the package.
|
---|
| 6 | *
|
---|
| 7 | */
|
---|
| 8 | #ifndef _DIRENT_H_
|
---|
| 9 | #define _DIRENT_H_
|
---|
| 10 | #pragma GCC system_header
|
---|
| 11 |
|
---|
| 12 | /* All the headers include this file. */
|
---|
| 13 | #include <_mingw.h>
|
---|
| 14 |
|
---|
| 15 | #include <io.h>
|
---|
| 16 |
|
---|
| 17 | #ifndef RC_INVOKED
|
---|
| 18 |
|
---|
| 19 | _BEGIN_C_DECLS
|
---|
| 20 |
|
---|
| 21 | struct dirent
|
---|
| 22 | {
|
---|
| 23 | long d_ino; /* Always zero. */
|
---|
| 24 | unsigned short d_reclen; /* Always sizeof struct dirent. */
|
---|
| 25 | unsigned short d_namlen; /* Length of name in d_name. */
|
---|
| 26 | unsigned d_type; /* File attributes */
|
---|
| 27 | char d_name[FILENAME_MAX]; /* File name. */
|
---|
| 28 | };
|
---|
| 29 |
|
---|
| 30 | /* This opaque data type represents the private structure
|
---|
| 31 | * through which a directory stream is referenced.
|
---|
| 32 | */
|
---|
| 33 | typedef struct __dirstream_t DIR;
|
---|
| 34 |
|
---|
| 35 | DIR* __cdecl __MINGW_NOTHROW __mingw_opendir (const char*);
|
---|
| 36 | struct dirent* __cdecl __MINGW_NOTHROW __mingw_readdir (DIR*);
|
---|
| 37 | int __cdecl __MINGW_NOTHROW __mingw_closedir (DIR*);
|
---|
| 38 | void __cdecl __MINGW_NOTHROW __mingw_rewinddir (DIR*);
|
---|
| 39 | long __cdecl __MINGW_NOTHROW __mingw_telldir (DIR*);
|
---|
| 40 | void __cdecl __MINGW_NOTHROW __mingw_seekdir (DIR*, long);
|
---|
| 41 |
|
---|
| 42 | __CRT_ALIAS __JMPSTUB__(( FUNCTION = opendir ))
|
---|
| 43 | DIR* __cdecl __MINGW_NOTHROW opendir (const char *__dirname)
|
---|
| 44 | { return __mingw_opendir (__dirname); }
|
---|
| 45 |
|
---|
| 46 | __CRT_ALIAS __JMPSTUB__(( FUNCTION = readdir ))
|
---|
| 47 | struct dirent* __cdecl __MINGW_NOTHROW readdir (DIR *__dir)
|
---|
| 48 | { return __mingw_readdir (__dir); }
|
---|
| 49 |
|
---|
| 50 | __CRT_ALIAS __JMPSTUB__(( FUNCTION = closedir ))
|
---|
| 51 | int __cdecl __MINGW_NOTHROW closedir (DIR *__dir)
|
---|
| 52 | { return __mingw_closedir (__dir); }
|
---|
| 53 |
|
---|
| 54 | __CRT_ALIAS __JMPSTUB__(( FUNCTION = rewinddir ))
|
---|
| 55 | void __cdecl __MINGW_NOTHROW rewinddir (DIR *__dir)
|
---|
| 56 | { return __mingw_rewinddir (__dir); }
|
---|
| 57 |
|
---|
| 58 | __CRT_ALIAS __JMPSTUB__(( FUNCTION = telldir ))
|
---|
| 59 | long __cdecl __MINGW_NOTHROW telldir (DIR *__dir)
|
---|
| 60 | { return __mingw_telldir (__dir); }
|
---|
| 61 |
|
---|
| 62 | __CRT_ALIAS __JMPSTUB__(( FUNCTION = seekdir ))
|
---|
| 63 | void __cdecl __MINGW_NOTHROW seekdir (DIR *__dir, long __loc)
|
---|
| 64 | { return __mingw_seekdir (__dir, __loc); }
|
---|
| 65 |
|
---|
| 66 |
|
---|
| 67 | /* wide char versions */
|
---|
| 68 |
|
---|
| 69 | struct _wdirent
|
---|
| 70 | {
|
---|
| 71 | long d_ino; /* Always zero. */
|
---|
| 72 | unsigned short d_reclen; /* Always size of struct _wdirent. */
|
---|
| 73 | unsigned short d_namlen; /* Length of name in d_name. */
|
---|
| 74 | unsigned d_type; /* File attributes */
|
---|
| 75 | wchar_t d_name[FILENAME_MAX]; /* File name. */
|
---|
| 76 | };
|
---|
| 77 |
|
---|
| 78 | /* This opaque data type represents the private structure
|
---|
| 79 | * through which a wide directory stream is referenced.
|
---|
| 80 | */
|
---|
| 81 | typedef struct __wdirstream_t _WDIR;
|
---|
| 82 |
|
---|
| 83 | _WDIR* __cdecl __MINGW_NOTHROW __mingw__wopendir (const wchar_t*);
|
---|
| 84 | struct _wdirent* __cdecl __MINGW_NOTHROW __mingw__wreaddir (_WDIR*);
|
---|
| 85 | int __cdecl __MINGW_NOTHROW __mingw__wclosedir (_WDIR*);
|
---|
| 86 | void __cdecl __MINGW_NOTHROW __mingw__wrewinddir (_WDIR*);
|
---|
| 87 | long __cdecl __MINGW_NOTHROW __mingw__wtelldir (_WDIR*);
|
---|
| 88 | void __cdecl __MINGW_NOTHROW __mingw__wseekdir (_WDIR*, long);
|
---|
| 89 |
|
---|
| 90 | __CRT_ALIAS __JMPSTUB__(( FUNCTION = _wopendir ))
|
---|
| 91 | _WDIR* __cdecl __MINGW_NOTHROW _wopendir (const wchar_t *__dirname)
|
---|
| 92 | { return __mingw__wopendir (__dirname); }
|
---|
| 93 |
|
---|
| 94 | __CRT_ALIAS __JMPSTUB__(( FUNCTION = _wreaddir ))
|
---|
| 95 | struct _wdirent* __cdecl __MINGW_NOTHROW _wreaddir (_WDIR *__dir)
|
---|
| 96 | { return __mingw__wreaddir (__dir); }
|
---|
| 97 |
|
---|
| 98 | __CRT_ALIAS __JMPSTUB__(( FUNCTION = _wclosedir ))
|
---|
| 99 | int __cdecl __MINGW_NOTHROW _wclosedir (_WDIR *__dir)
|
---|
| 100 | { return __mingw__wclosedir (__dir); }
|
---|
| 101 |
|
---|
| 102 | __CRT_ALIAS __JMPSTUB__(( FUNCTION = _wrewinddir ))
|
---|
| 103 | void __cdecl __MINGW_NOTHROW _wrewinddir (_WDIR *__dir)
|
---|
| 104 | { return __mingw__wrewinddir (__dir); }
|
---|
| 105 |
|
---|
| 106 | __CRT_ALIAS __JMPSTUB__(( FUNCTION = _wtelldir ))
|
---|
| 107 | long __cdecl __MINGW_NOTHROW _wtelldir (_WDIR *__dir)
|
---|
| 108 | { return __mingw__wtelldir (__dir); }
|
---|
| 109 |
|
---|
| 110 | __CRT_ALIAS __JMPSTUB__(( FUNCTION = _wseekdir ))
|
---|
| 111 | void __cdecl __MINGW_NOTHROW _wseekdir (_WDIR *__dir, long __loc)
|
---|
| 112 | { return __mingw__wseekdir (__dir, __loc); }
|
---|
| 113 |
|
---|
| 114 | _END_C_DECLS
|
---|
| 115 |
|
---|
| 116 | #if defined(_BSD_SOURCE) || defined(_WIN32)
|
---|
| 117 | /*
|
---|
| 118 | * BSD-ish systems define manifest constants for the d_type field;
|
---|
| 119 | * although probably only DT_REG and DT_DIR are useful on Win32, we
|
---|
| 120 | * try to map them as best we can from the _finddata.attrib field.
|
---|
| 121 | *
|
---|
| 122 | * The relevant Microsoft manifest values are:
|
---|
| 123 | *
|
---|
| 124 | * _A_NORMAL (0x0000) normal file: best fit for DT_REG
|
---|
| 125 | * _A_RDONLY (0x0001) read-only: no BSD d_type equivalent
|
---|
| 126 | * _A_HIDDEN (0x0002) hidden entity: no BSD equivalent
|
---|
| 127 | * _A_SYSTEM (0x0004) system entity: no BSD equivalent
|
---|
| 128 | * _A_VOLID (0x0008) volume label: no BSD equivalent
|
---|
| 129 | * _A_SUBDIR (0x0010) directory: best fit for DT_DIR
|
---|
| 130 | * _A_ARCH (0x0020) "dirty": no BSD equivalent
|
---|
| 131 | *
|
---|
| 132 | * Thus, we may immediately define:
|
---|
| 133 | */
|
---|
| 134 | #define DT_REG _A_NORMAL
|
---|
| 135 | #define DT_DIR _A_SUBDIR
|
---|
| 136 |
|
---|
| 137 | /* The remaining BSD d_type manifest values have no Win32 equivalents;
|
---|
| 138 | * we will define them artificially, and then we will ensure that our
|
---|
| 139 | * opendir()/readdir() implementation will never assign them; (we will
|
---|
| 140 | * substitute DT_UNKNOWN, but it would be unwise to simply make these
|
---|
| 141 | * equivalent to that, since an application is likely to simply check
|
---|
| 142 | * for d_type equal to any one of these defined types, and thus could
|
---|
| 143 | * mistakenly identify DT_UNKNOWN as being of the tested type):
|
---|
| 144 | */
|
---|
| 145 | #define DT_BLK (((_A_SUBDIR) << 4) | DT_UNKNOWN)
|
---|
| 146 | #define DT_CHR (((_A_SUBDIR) << 5) | DT_UNKNOWN)
|
---|
| 147 | #define DT_FIFO (((_A_SUBDIR) << 6) | DT_UNKNOWN)
|
---|
| 148 | #define DT_LNK (((_A_SUBDIR) << 7) | DT_UNKNOWN)
|
---|
| 149 | #define DT_SOCK (((_A_SUBDIR) << 8) | DT_UNKNOWN)
|
---|
| 150 |
|
---|
| 151 | /* No file system entity can ever be simultaneously a volume label
|
---|
| 152 | * and a directory; we will exploit this to unambiguously define:
|
---|
| 153 | */
|
---|
| 154 | #define DT_UNKNOWN (_A_VOLID | _A_SUBDIR)
|
---|
| 155 |
|
---|
| 156 | #define _DIRENT_HAVE_D_TYPE 1
|
---|
| 157 | #define _DIRENT_HAVE_D_RECLEN 1
|
---|
| 158 | #define _DIRENT_HAVE_D_NAMLEN 1
|
---|
| 159 |
|
---|
| 160 | #endif /* _BSD_SOURCE */
|
---|
| 161 | #endif /* ! RC_INVOKED */
|
---|
| 162 |
|
---|
| 163 | #endif /* !defined _DIRENT_H_ */
|
---|