Home | History | Annotate | Download | only in dirent
      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 
     11 #include <stdio.h>
     12 #include <io.h>
     13 
     14 #ifndef RC_INVOKED
     15 
     16 #ifdef __cplusplus
     17 extern "C" {
     18 #endif
     19 
     20 struct dirent
     21 {
     22 	long		d_ino;		/* Always zero. */
     23 	unsigned short	d_reclen;	/* Always zero. */
     24 	unsigned short	d_namlen;	/* Length of name in d_name. */
     25 	char		d_name[FILENAME_MAX]; /* File name. */
     26 };
     27 
     28 #ifdef _WIN64
     29 #define INTPTR __int64
     30 #else
     31 #define INTPTR long
     32 #endif
     33 
     34 /*
     35  * This is an internal data structure. Good programmers will not use it
     36  * except as an argument to one of the functions below.
     37  * dd_stat field is now int (was short in older versions).
     38  */
     39 typedef struct
     40 {
     41 	/* disk transfer area for this dir */
     42 	struct _finddata_t	dd_dta;
     43 
     44 	/* dirent struct to return from dir (NOTE: this makes this thread
     45 	 * safe as long as only one thread uses a particular DIR struct at
     46 	 * a time) */
     47 	struct dirent		dd_dir;
     48 
     49 	/* _findnext handle */
     50 	INTPTR			dd_handle;
     51 
     52 	/*
     53          * Status of search:
     54 	 *   0 = not started yet (next entry to read is first entry)
     55 	 *  -1 = off the end
     56 	 *   positive = 0 based index of next entry
     57 	 */
     58 	int			dd_stat;
     59 
     60 	/* given path for dir with search pattern (struct is extended) */
     61 	char			dd_name[1];
     62 } DIR;
     63 
     64 DIR* __cdecl opendir (const char*);
     65 struct dirent* __cdecl readdir (DIR*);
     66 int __cdecl closedir (DIR*);
     67 void __cdecl rewinddir (DIR*);
     68 long __cdecl telldir (DIR*);
     69 void __cdecl seekdir (DIR*, long);
     70 
     71 
     72 /* wide char versions */
     73 
     74 struct _wdirent
     75 {
     76 	long		d_ino;		/* Always zero. */
     77 	unsigned short	d_reclen;	/* Always zero. */
     78 	unsigned short	d_namlen;	/* Length of name in d_name. */
     79 	wchar_t		d_name[FILENAME_MAX]; /* File name. */
     80 };
     81 
     82 /*
     83  * This is an internal data structure. Good programmers will not use it
     84  * except as an argument to one of the functions below.
     85  */
     86 typedef struct
     87 {
     88 	/* disk transfer area for this dir */
     89 	struct _wfinddata_t	dd_dta;
     90 
     91 	/* dirent struct to return from dir (NOTE: this makes this thread
     92 	 * safe as long as only one thread uses a particular DIR struct at
     93 	 * a time) */
     94 	struct _wdirent		dd_dir;
     95 
     96 	/* _findnext handle */
     97 	INTPTR			dd_handle;
     98 
     99 	/*
    100          * Status of search:
    101 	 *   0 = not started yet (next entry to read is first entry)
    102 	 *  -1 = off the end
    103 	 *   positive = 0 based index of next entry
    104 	 */
    105 	int			dd_stat;
    106 
    107 	/* given path for dir with search pattern (struct is extended) */
    108 	wchar_t			dd_name[1];
    109 } _WDIR;
    110 
    111 
    112 
    113 _WDIR* __cdecl _wopendir (const wchar_t*);
    114 struct _wdirent*  __cdecl _wreaddir (_WDIR*);
    115 int __cdecl _wclosedir (_WDIR*);
    116 void __cdecl _wrewinddir (_WDIR*);
    117 long __cdecl _wtelldir (_WDIR*);
    118 void __cdecl _wseekdir (_WDIR*, long);
    119 
    120 
    121 #ifdef	__cplusplus
    122 }
    123 #endif
    124 
    125 #endif	/* Not RC_INVOKED */
    126 
    127 #endif	/* Not _DIRENT_H_ */
    128