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