1da2e3ebdSchinset	prototyped
2da2e3ebdSchin
3da2e3ebdSchinset	nodefine
4da2e3ebdSchinlib	stat64 -D_LARGEFILE64_SOURCE
5da2e3ebdSchintyp	off64_t -D_LARGEFILE64_SOURCE
6da2e3ebdSchinset	define
7da2e3ebdSchin
8da2e3ebdSchinlib	opendir
9da2e3ebdSchinhdr	dirent,ndir
10da2e3ebdSchinsys	dir
11da2e3ebdSchinnxt	dirent
12da2e3ebdSchin
13da2e3ebdSchintst	botch_d_ino_dirent64 -D_LARGEFILE64_SOURCE note{ dirent64.d_ino vs. readdir64 mismatch }end compile{
14da2e3ebdSchin	#if !__arm__
15da2e3ebdSchin	)
16da2e3ebdSchin	#endif
17da2e3ebdSchin	#include <dirent.h>
18da2e3ebdSchin	int
19da2e3ebdSchin	main()
20da2e3ebdSchin	{
21da2e3ebdSchin		struct dirent64	ent;
22da2e3ebdSchin		char		aha[5-((int)sizeof(ent.d_ino))];
23da2e3ebdSchin		return sizeof(aha);
24da2e3ebdSchin	}
25da2e3ebdSchin}end
26da2e3ebdSchin
27da2e3ebdSchinif ( ! _lib_opendir ) {
28da2e3ebdSchin	/*
29da2e3ebdSchin	 * <dirent.h> for systems with no opendir()
30da2e3ebdSchin	 */
31da2e3ebdSchin
32da2e3ebdSchin	#ifndef _DIRENT_H
33da2e3ebdSchin	#define _DIRENT_H
34da2e3ebdSchin
35da2e3ebdSchin	typedef struct
36da2e3ebdSchin	{
37da2e3ebdSchin		int		dd_fd;		/* file descriptor		*/
38da2e3ebdSchin	#ifdef _DIR_PRIVATE_
39da2e3ebdSchin		_DIR_PRIVATE_
40da2e3ebdSchin	#endif
41da2e3ebdSchin	} DIR;
42da2e3ebdSchin
43da2e3ebdSchin	struct dirent
44da2e3ebdSchin	{
45da2e3ebdSchin		long		d_fileno;	/* entry serial number		*/
46da2e3ebdSchin		int		d_reclen;	/* entry length			*/
47da2e3ebdSchin		int		d_namlen;	/* entry name length		*/
48da2e3ebdSchin		char		d_name[1];	/* entry name			*/
49da2e3ebdSchin	};
50da2e3ebdSchin
51da2e3ebdSchin	#ifndef _DIR_PRIVATE_
52da2e3ebdSchin
53da2e3ebdSchin	#ifdef	rewinddir
54da2e3ebdSchin	#undef	rewinddir
55da2e3ebdSchin	#define rewinddir(p)	seekdir(p,0L)
56da2e3ebdSchin	#endif
57da2e3ebdSchin
58da2e3ebdSchin	extern DIR*		opendir(const char*);
59da2e3ebdSchin	extern void		closedir(DIR*);
60da2e3ebdSchin	extern struct dirent*	readdir(DIR*);
61da2e3ebdSchin	extern void		seekdir(DIR*, long);
62da2e3ebdSchin	extern long		telldir(DIR*);
63da2e3ebdSchin
64da2e3ebdSchin	#endif
65da2e3ebdSchin
66da2e3ebdSchin	#endif
67da2e3ebdSchin}
68da2e3ebdSchinelif ( _nxt_dirent && _lib_stat64 && _typ_off64_t && _botch_d_ino_dirent64 ) pass{
69da2e3ebdSchincat <<!
70da2e3ebdSchin	/*
71da2e3ebdSchin	 * <dirent.h> for [fl]stat64 and off64_t with sizeof(ino64_t)==4
72da2e3ebdSchin	 */
73da2e3ebdSchin
74da2e3ebdSchin	#ifndef _AST_STD_H
75da2e3ebdSchin
76*b30d1939SAndy Fiddaman	#include ${_nxt_dirent-_nxt_dirent}	/* the native <dirent.h> */
77da2e3ebdSchin
78da2e3ebdSchin	#else
79da2e3ebdSchin
80da2e3ebdSchin	#ifndef _DIR64_H
81da2e3ebdSchin	#define _DIR64_H
82da2e3ebdSchin
83da2e3ebdSchin	#include <ast_std.h>
84da2e3ebdSchin
85da2e3ebdSchin	#if _typ_off64_t
86da2e3ebdSchin	#undef	off_t
87da2e3ebdSchin	#endif
88da2e3ebdSchin
89da2e3ebdSchin	#undef	__ino64_t
90da2e3ebdSchin	#define __ino64_t	int64_t
91da2e3ebdSchin
92*b30d1939SAndy Fiddaman	#include ${_nxt_dirent-_nxt_dirent}	/* the native <dirent.h> */
93da2e3ebdSchin
94da2e3ebdSchin	#undef	__ino64_t
95da2e3ebdSchin	#define __ino64_t	__ino64_t
96da2e3ebdSchin
97da2e3ebdSchin	#if _typ_off64_t
98da2e3ebdSchin	#define	off_t		off64_t
99da2e3ebdSchin	#endif
100da2e3ebdSchin
101da2e3ebdSchin	#if _lib_readdir64 && _typ_struct_dirent64
102da2e3ebdSchin	#ifndef	dirent
103da2e3ebdSchin	#define dirent		dirent64
104da2e3ebdSchin	#endif
105da2e3ebdSchin	#ifndef	readdir
106da2e3ebdSchin	#define readdir		readdir64
107da2e3ebdSchin	#endif
108da2e3ebdSchin	#endif
109da2e3ebdSchin
110da2e3ebdSchin	#endif
111da2e3ebdSchin
112da2e3ebdSchin	#endif
113da2e3ebdSchin!
114da2e3ebdSchin}end
115da2e3ebdSchinelif ( _nxt_dirent && _lib_stat64 && _typ_off64_t ) pass{
116da2e3ebdSchincat <<!
117da2e3ebdSchin	/*
118da2e3ebdSchin	 * <dirent.h> for [fl]stat64 and off64_t
119da2e3ebdSchin	 */
120da2e3ebdSchin
121da2e3ebdSchin	#ifndef _AST_STD_H
122da2e3ebdSchin
123*b30d1939SAndy Fiddaman	#include ${_nxt_dirent-_nxt_dirent}	/* the native <dirent.h> */
124da2e3ebdSchin
125da2e3ebdSchin	#else
126da2e3ebdSchin
127da2e3ebdSchin	#ifndef _DIR64_H
128da2e3ebdSchin	#define _DIR64_H
129da2e3ebdSchin
130da2e3ebdSchin	#include <ast_std.h>
131da2e3ebdSchin
132da2e3ebdSchin	#if _typ_off64_t
133da2e3ebdSchin	#undef	off_t
134da2e3ebdSchin	#endif
135da2e3ebdSchin
136*b30d1939SAndy Fiddaman	#include ${_nxt_dirent-_nxt_dirent}	/* the native <dirent.h> */
137da2e3ebdSchin
138da2e3ebdSchin	#if _typ_off64_t
139da2e3ebdSchin	#define	off_t		off64_t
140da2e3ebdSchin	#endif
141da2e3ebdSchin
142da2e3ebdSchin	#if _lib_readdir64 && _typ_struct_dirent64
143da2e3ebdSchin	#ifndef	dirent
144da2e3ebdSchin	#define dirent		dirent64
145da2e3ebdSchin	#endif
146da2e3ebdSchin	#ifndef	readdir
147da2e3ebdSchin	#define readdir		readdir64
148da2e3ebdSchin	#endif
149da2e3ebdSchin	#endif
150da2e3ebdSchin
151da2e3ebdSchin	#endif
152da2e3ebdSchin
153da2e3ebdSchin	#endif
154da2e3ebdSchin!
155da2e3ebdSchin}end
156da2e3ebdSchinelif ( _nxt_dirent && _hdr_dirent ) pass{
157da2e3ebdSchincat <<!
158da2e3ebdSchin	/*
159da2e3ebdSchin	 * <dirent.h> for systems with ok <dirent.h>
160da2e3ebdSchin	 */
161da2e3ebdSchin
162da2e3ebdSchin	#ifndef _DIRENT_H
163da2e3ebdSchin
164*b30d1939SAndy Fiddaman	#include ${_nxt_dirent-_nxt_dirent}	/* the native <dirent.h> */
165da2e3ebdSchin
166da2e3ebdSchin	#ifndef _DIRENT_H
167da2e3ebdSchin	#define _DIRENT_H
168da2e3ebdSchin	#endif
169da2e3ebdSchin
170da2e3ebdSchin	#endif
171da2e3ebdSchin!
172da2e3ebdSchin}end
173da2e3ebdSchinelif ( _hdr_ndir ) {
174da2e3ebdSchin	/*
175da2e3ebdSchin	 * <dirent.h> for systems with opendir() and <ndir.h>
176da2e3ebdSchin	 */
177da2e3ebdSchin
178da2e3ebdSchin	#ifndef _DIRENT_H
179da2e3ebdSchin	#define _DIRENT_H
180da2e3ebdSchin
181da2e3ebdSchin	#if defined(__STDPP__directive) && defined(__STDPP__hide)
182da2e3ebdSchin	__STDPP__directive pragma pp:hide closedir opendir readdir seekdir telldir
183da2e3ebdSchin	#else
184da2e3ebdSchin	#define closedir	______closedir
185da2e3ebdSchin	#define opendir		______opendir
186da2e3ebdSchin	#define readdir		______readdir
187da2e3ebdSchin	#define seekdir		______seekdir
188da2e3ebdSchin	#define telldir		______telldir
189da2e3ebdSchin	#endif
190da2e3ebdSchin
191da2e3ebdSchin	#include <ndir.h>
192da2e3ebdSchin
193da2e3ebdSchin	#if defined(__STDPP__directive) && defined(__STDPP__hide)
194da2e3ebdSchin	__STDPP__directive pragma pp:nohide closedir opendir readdir seekdir telldir
195da2e3ebdSchin	#else
196da2e3ebdSchin	#undef	closedir
197da2e3ebdSchin	#undef	opendir
198da2e3ebdSchin	#undef	readdir
199da2e3ebdSchin	#undef	seekdir
200da2e3ebdSchin	#undef	telldir
201da2e3ebdSchin	#endif
202da2e3ebdSchin
203da2e3ebdSchin	#ifndef dirent
204da2e3ebdSchin	#define dirent	direct
205da2e3ebdSchin	#endif
206da2e3ebdSchin
207da2e3ebdSchin	#if !defined(d_fileno) && !defined(d_ino)
208da2e3ebdSchin	#define d_fileno	d_ino
209da2e3ebdSchin	#endif
210da2e3ebdSchin
211da2e3ebdSchin	#ifdef	rewinddir
212da2e3ebdSchin	#undef	rewinddir
213da2e3ebdSchin	#define rewinddir(p)	seekdir(p,0L)
214da2e3ebdSchin	#endif
215da2e3ebdSchin
216da2e3ebdSchin	extern DIR*		opendir(const char*);
217da2e3ebdSchin	extern void		closedir(DIR*);
218da2e3ebdSchin	extern struct dirent*	readdir(DIR*);
219da2e3ebdSchin	extern void		seekdir(DIR*, long);
220da2e3ebdSchin	extern long		telldir(DIR*);
221da2e3ebdSchin
222da2e3ebdSchin	#endif
223da2e3ebdSchin}
224da2e3ebdSchinelif ( _sys_dir ) {
225da2e3ebdSchin	/*
226da2e3ebdSchin	 * <dirent.h> for systems with opendir() and no <ndir.h>
227da2e3ebdSchin	 */
228da2e3ebdSchin
229da2e3ebdSchin	#ifndef _DIRENT_H
230da2e3ebdSchin	#define _DIRENT_H
231da2e3ebdSchin
232da2e3ebdSchin	#if defined(__STDPP__directive) && defined(__STDPP__hide)
233da2e3ebdSchin	__STDPP__directive pragma pp:hide closedir opendir readdir seekdir telldir
234da2e3ebdSchin	#else
235da2e3ebdSchin	#define closedir	______closedir
236da2e3ebdSchin	#define opendir		______opendir
237da2e3ebdSchin	#define readdir		______readdir
238da2e3ebdSchin	#define seekdir		______seekdir
239da2e3ebdSchin	#define telldir		______telldir
240da2e3ebdSchin	#endif
241da2e3ebdSchin
242da2e3ebdSchin	#include <sys/dir.h>
243da2e3ebdSchin
244da2e3ebdSchin	#if defined(__STDPP__directive) && defined(__STDPP__hide)
245da2e3ebdSchin	__STDPP__directive pragma pp:nohide closedir opendir readdir seekdir telldir
246da2e3ebdSchin	#else
247da2e3ebdSchin	#undef	closedir
248da2e3ebdSchin	#undef	opendir
249da2e3ebdSchin	#undef	readdir
250da2e3ebdSchin	#undef	seekdir
251da2e3ebdSchin	#undef	telldir
252da2e3ebdSchin	#endif
253da2e3ebdSchin
254da2e3ebdSchin	#ifndef dirent
255da2e3ebdSchin	#define dirent	direct
256da2e3ebdSchin	#endif
257da2e3ebdSchin
258da2e3ebdSchin	#if !defined(d_fileno) && !defined(d_ino)
259da2e3ebdSchin	#define d_fileno	d_ino
260da2e3ebdSchin	#endif
261da2e3ebdSchin
262da2e3ebdSchin	#ifdef	rewinddir
263da2e3ebdSchin	#undef	rewinddir
264da2e3ebdSchin	#define rewinddir(p)	seekdir(p,0L)
265da2e3ebdSchin	#endif
266da2e3ebdSchin
267da2e3ebdSchin	extern DIR*		opendir(const char*);
268da2e3ebdSchin	extern void		closedir(DIR*);
269da2e3ebdSchin	extern struct dirent*	readdir(DIR*);
270da2e3ebdSchin	extern void		seekdir(DIR*, long);
271da2e3ebdSchin	extern long		telldir(DIR*);
272da2e3ebdSchin
273da2e3ebdSchin	#endif
274da2e3ebdSchin}
275da2e3ebdSchinendif
276