1 /*
2  * DIRENT.H (formerly DIRLIB.H)
3  *
4  * by M. J. Weinstein   Released to public domain 1-Jan-89
5  *
6  * Because I have heard that this feature (opendir, readdir, closedir)
7  * it so useful for programmers coming from UNIX or attempting to port
8  * UNIX code, and because it is reasonably light weight, I have included
9  * it in the Mingw32 package. I have also added an implementation of
10  * rewinddir, seekdir and telldir.
11  *   - Colin Peters <colin@bird.fu.is.saga-u.ac.jp>
12  *
13  *  This code is distributed in the hope that is will be useful but
14  *  WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
15  *  DISCLAMED. This includeds but is not limited to warranties of
16  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
17  *
18  * $Revision: 1.1 $
19  * $Author: tml $
20  * $Date: 2001/09/29 22:09:24 $
21  *
22  */
23 
24 #ifndef	__STRICT_ANSI__
25 
26 #ifndef _DIRENT_H_
27 #define _DIRENT_H_
28 
29 #include <io.h>
30 
31 #ifndef RC_INVOKED
32 
33 #ifdef __cplusplus
34 extern "C" {
35 #endif
36 
37 struct dirent
38 {
39 	long		d_ino;		/* Always zero. */
40 	unsigned short	d_reclen;	/* Always zero. */
41 	unsigned short	d_namlen;	/* Length of name in d_name. */
42 	char*		d_name;		/* File name. */
43 	/* NOTE: The name in the dirent structure points to the name in the
44 	 *       finddata_t structure in the DIR. */
45 };
46 
47 /*
48  * This is an internal data structure. Good programmers will not use it
49  * except as an argument to one of the functions below.
50  */
51 typedef struct
52 {
53 	/* disk transfer area for this dir */
54 	struct _finddata_t	dd_dta;
55 
56 	/* dirent struct to return from dir (NOTE: this makes this thread
57 	 * safe as long as only one thread uses a particular DIR struct at
58 	 * a time) */
59 	struct dirent		dd_dir;
60 
61 	/* _findnext handle */
62 	long			dd_handle;
63 
64 	/*
65          * Status of search:
66 	 *   0 = not started yet (next entry to read is first entry)
67 	 *  -1 = off the end
68 	 *   positive = 0 based index of next entry
69 	 */
70 	short			dd_stat;
71 
72 	/* given path for dir with search pattern (struct is extended) */
73 	char			dd_name[1];
74 } DIR;
75 
76 
77 DIR*		opendir (const char*);
78 struct dirent*	readdir (DIR*);
79 int		closedir (DIR*);
80 void		rewinddir (DIR*);
81 long		telldir (DIR*);
82 void		seekdir (DIR*, long);
83 
84 #ifdef	__cplusplus
85 }
86 #endif
87 
88 #endif	/* Not RC_INVOKED */
89 
90 #endif	/* Not _DIRENT_H_ */
91 
92 #endif	/* Not __STRICT_ANSI__ */
93 
94