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