xref: /php-src/win32/readdir.h (revision 0b2e6bc2)
1 #ifndef READDIR_H
2 #define READDIR_H
3 
4 
5 #ifdef __cplusplus
6 extern "C" {
7 #endif
8 
9 /*
10  * Structures and types used to implement opendir/readdir/closedir
11  * on Windows.
12  */
13 
14 #include <config.w32.h>
15 
16 #include "ioutil.h"
17 
18 #define _DIRENT_HAVE_D_TYPE
19 #define DT_UNKNOWN 0
20 #define DT_DIR 4
21 #define DT_REG 8
22 
23 /* struct dirent - same as Unix */
24 struct dirent {
25 	long d_ino;					/* inode (always 1 in WIN32) */
26 	off_t d_off;					/* offset to this dirent */
27 	unsigned short d_reclen;			/* length of d_name */
28 	unsigned char d_type;
29 	char d_name[1];	/* null terminated filename in the current encoding, glyph number <= 255 wchar_t's + \0 byte */
30 };
31 
32 /* typedef DIR - not the same as Unix */
33 struct DIR_W32 {
34 	HANDLE handle;			/* _findfirst/_findnext handle */
35 	uint32_t offset;		/* offset into directory */
36 	uint8_t finished;		/* 1 if there are not more files */
37 	WIN32_FIND_DATAW fileinfo;	/* from _findfirst/_findnext */
38 	wchar_t *dirw;			/* the dir we are reading */
39 	struct dirent dent;		/* the dirent to return */
40 };
41 typedef struct DIR_W32 DIR;
42 
43 /* Function prototypes */
44 DIR *opendir(const char *);
45 struct dirent *readdir(DIR *);
46 int closedir(DIR *);
47 int rewinddir(DIR *);
48 
49 #ifdef __cplusplus
50 }
51 #endif
52 
53 #endif /* READDIR_H */
54