1da2e3ebdSchinset	prototyped
2da2e3ebdSchinlib	_fxstat,__fxstat,_lxstat,__lxstat,_xmknod,__xmknod,_xstat,__xstat,lstat,mknod,sync sys/types.h sys/stat.h
3da2e3ebdSchinlib	_fxstat64,__fxstat64,_lxstat64,__lxstat64,_xstat64,__xstat64 -D_LARGEFILE64_SOURCE sys/types.h sys/stat.h
4da2e3ebdSchinmac	fstat,lstat,stat,mknod sys/types.h sys/stat.h
5da2e3ebdSchin
6da2e3ebdSchinlcl	xstat -D_LARGEFILE64_SOURCE link{
7da2e3ebdSchin	#include <sys/types.h>
8da2e3ebdSchin	#include <sys/stat.h>
9da2e3ebdSchin	struct stat64 { int xxx; }; /* disable if stat64 available */
10da2e3ebdSchin	#if _STD_
11da2e3ebdSchin	extern int stat(const char* path, struct stat* st)
12da2e3ebdSchin	#else
13da2e3ebdSchin	int stat(path, st)
14da2e3ebdSchin	char*		path;
15da2e3ebdSchin	struct stat*	st;
16da2e3ebdSchin	#endif
17da2e3ebdSchin	{
18da2e3ebdSchin	#if _lib___xstat
19da2e3ebdSchin		return __xstat(_STAT_VER, path, st);
20da2e3ebdSchin	#else
21da2e3ebdSchin		return _xstat(_STAT_VER, path, st);
22da2e3ebdSchin	#endif
23da2e3ebdSchin	}
24da2e3ebdSchin	int
25da2e3ebdSchin	main()
26da2e3ebdSchin	{
27da2e3ebdSchin		struct stat	st;
28da2e3ebdSchin		return stat(".",&st) < 0;
29da2e3ebdSchin	}
30da2e3ebdSchin}end
31da2e3ebdSchin
32da2e3ebdSchinlcl	xstat64 -D_LARGEFILE64_SOURCE link{
33da2e3ebdSchin	#include <sys/types.h>
34da2e3ebdSchin	#include <sys/stat.h>
35da2e3ebdSchin	#if _STD_
36da2e3ebdSchin	extern int stat64(const char* path, struct stat64* st)
37da2e3ebdSchin	#else
38da2e3ebdSchin	int stat64(path, st)
39da2e3ebdSchin	char*		path;
40da2e3ebdSchin	#endif
41da2e3ebdSchin	{
42da2e3ebdSchin	#if _lib___xstat64
43da2e3ebdSchin		return __xstat64(_STAT_VER, path, st);
44da2e3ebdSchin	#else
45da2e3ebdSchin		return _xstat64(_STAT_VER, path, st);
46da2e3ebdSchin	#endif
47da2e3ebdSchin	}
48da2e3ebdSchin	int
49da2e3ebdSchin	main()
50da2e3ebdSchin	{
51da2e3ebdSchin		struct stat64	st;
52da2e3ebdSchin		return stat64(".",&st) < 0;
53da2e3ebdSchin	}
54da2e3ebdSchin}end
55da2e3ebdSchin
56da2e3ebdSchinheader	sys/stat.h
577c2fbfb3SApril Chinheader	sys/mkdev.h
58da2e3ebdSchin
59da2e3ebdSchinextern	chmod		int	(const char*, mode_t)
60da2e3ebdSchinextern	fstat		int	(int, struct stat*)
61da2e3ebdSchinextern	lstat		int	(const char*, struct stat*)
62da2e3ebdSchinextern	mkdir		int	(const char*, mode_t)
63da2e3ebdSchinextern	mkfifo		int	(const char*, mode_t)
64da2e3ebdSchinextern	mknod		int	(const char*, mode_t, dev_t)
65da2e3ebdSchinextern	stat		int	(const char*, struct stat*)
66da2e3ebdSchin
67da2e3ebdSchindefine	FS_default	"ufs"
68da2e3ebdSchin
69da2e3ebdSchinmacro{
70da2e3ebdSchin	#include <sys/types.h>
71da2e3ebdSchin	#include <sys/stat.h>
72da2e3ebdSchin	#ifndef major
73da2e3ebdSchin	#include <sys/param.h>
74da2e3ebdSchin	#ifndef major
75da2e3ebdSchin	#include <sys/sysmacros.h>
76da2e3ebdSchin	#endif
77da2e3ebdSchin	<<"#if defined(__STDPP__directive) && defined(__STDPP__initial)">>
78da2e3ebdSchin	<<"__STDPP__directive pragma pp:initial">>
79da2e3ebdSchin	<<"#endif">>
80da2e3ebdSchin	<<"#ifndef major">>
81da2e3ebdSchin	#ifdef major
82da2e3ebdSchin	<<"#define major(x)">> major((x))
83da2e3ebdSchin	#else
84da2e3ebdSchin	#ifndef L_BITSMAJOR
85da2e3ebdSchin	#define L_BITSMAJOR 8
86da2e3ebdSchin	#endif
87da2e3ebdSchin	#ifndef L_BITSMINOR
88da2e3ebdSchin	#define L_BITSMINOR 8
89da2e3ebdSchin	#endif
90da2e3ebdSchin	#ifndef L_MAXMAJ
91da2e3ebdSchin	#define L_MAXMAJ ((1<<L_BITSMAJOR)-1)
92da2e3ebdSchin	#endif
93da2e3ebdSchin	#ifndef L_MAXMIN
94da2e3ebdSchin	#define L_MAXMIN ((1<<L_BITSMINOR)-1)
95da2e3ebdSchin	#endif
96da2e3ebdSchin	<<"#define major(x)">> ((int)(((unsigned)(x)>>L_BITSMINOR)&L_MAXMAJ))
97da2e3ebdSchin	#endif
98da2e3ebdSchin	<<"#endif">>
99da2e3ebdSchin	<<"#ifndef minor">>
100da2e3ebdSchin	#ifdef minor
101da2e3ebdSchin	<<"#define minor(x)">> minor((x))
102da2e3ebdSchin	#else
103da2e3ebdSchin	<<"#define minor(x)">> ((int)((x)&L_MAXMIN))
104da2e3ebdSchin	#endif
105da2e3ebdSchin	<<"#endif">>
106da2e3ebdSchin	<<"#ifndef makedev">>
107da2e3ebdSchin	#ifdef makedev
108da2e3ebdSchin	<<"#define makedev(x,y)">> makedev((x),(y))
109da2e3ebdSchin	#else
110da2e3ebdSchin	<<"#define makedev(x,y)">> ((dev_t)((((x)&0377)<<8)|((y)&0377)))
111da2e3ebdSchin	#endif
112da2e3ebdSchin	<<"#endif">>
113da2e3ebdSchin	#endif
114da2e3ebdSchin	<<"#if defined(__STDPP__directive) && defined(__STDPP__initial)">>
115da2e3ebdSchin	<<"__STDPP__directive pragma pp:noinitial">>
116da2e3ebdSchin	<<"#endif">>
117da2e3ebdSchin}end fail{
118da2e3ebdSchin	cat <<!
119da2e3ebdSchin	#ifndef major
120da2e3ebdSchin	#define major(x)	((int)(((unsigned)(x)>>8)&0377))
121da2e3ebdSchin	#endif
122da2e3ebdSchin	#ifndef minor
123da2e3ebdSchin	#define minor(x)	((int)((x)&0377))
124da2e3ebdSchin	#endif
125da2e3ebdSchin	#ifndef makedev
126da2e3ebdSchin	#define makedev(x,y)	((dev_t)((((x)&0377)<<8)|((y)&0377)))
127da2e3ebdSchin	#endif
128da2e3ebdSchin	!
129da2e3ebdSchin}end
130da2e3ebdSchin
1313e14f97fSRoger A. Faulknerhdr	mntent,mnttab stdio.h
1323e14f97fSRoger A. Faulknersys	mntent,mnttab stdio.h
133*b30d1939SAndy Fiddamansys	fs_types,mount,statfs,statvfs,vfs,vmount sys/param.h sys/ucred.h
1343e14f97fSRoger A. Faulkner
135da2e3ebdSchinmem	mnttab.mt_dev,mnttab.mt_filsys,mnttab.mt_fstyp sys/types.h mnttab.h
136da2e3ebdSchinmem	mntent.mnt_opts,w_mntent.mnt_opts,mnttab.mnt_opts sys/types.h stdio.h mntent.h sys/mntent.h
1373e14f97fSRoger A. Faulknermem	mntent.mnt_opts,mnttab.mnt_opts stdio.h sys/types.h mnttab.h sys/mnttab.h
138da2e3ebdSchinmem	stat.st_blocks,stat.st_blksize,stat.st_rdev sys/types.h sys/stat.h
139da2e3ebdSchinmem	statfs.f_files,statfs.f_bavail sys/types.h - sys/statfs.h - sys/vfs.h - sys/param.h sys/mount.h
140da2e3ebdSchinmem	statvfs.f_basetype,statvfs.f_frsize sys/types.h sys/statvfs.h
141da2e3ebdSchin
142da2e3ebdSchinary	f_reserved7 sys/types.h sys/statvfs.h note{ statvfs.f_reserved7 can double for statvfs.f_basetype }end compile{
143da2e3ebdSchin	int f(vp)struct statvfs* vp;{return vp->f_reserved7[0] = 1;}
144da2e3ebdSchin}end
145da2e3ebdSchin
146*b30d1939SAndy Fiddamanlib	getfsstat,getmntent,getmntinfo,mntctl,mntopen,mntread,mntclose,setmntent
147da2e3ebdSchinlib	w_getmntent
148da2e3ebdSchinlib	statfs,statvfs
149da2e3ebdSchin
150da2e3ebdSchinlib	statfs4 sys/types.h - sys/statfs.h - sys/vfs.h - sys/mount.h compile{
151da2e3ebdSchin	int f()
152da2e3ebdSchin	{
153da2e3ebdSchin		struct statfs fs;
154da2e3ebdSchin		return statfs("/",&fs,sizeof(fs),0);
155da2e3ebdSchin	}
156da2e3ebdSchin}end
157da2e3ebdSchin
158da2e3ebdSchinlib	getmntinfo_statvfs note{ getmntinfo uses statvfs -- since when? }end compile{
159da2e3ebdSchin	#include <sys/types.h>
160da2e3ebdSchin	#include <sys/mount.h>
161da2e3ebdSchin	int
162da2e3ebdSchin	gmi(struct statvfs* fs)
163da2e3ebdSchin	{
164da2e3ebdSchin		fs->f_flag = 0;
165da2e3ebdSchin		return getmntinfo(fs, 0);
166da2e3ebdSchin	}
167da2e3ebdSchin}end
168da2e3ebdSchin
169*b30d1939SAndy Fiddamanlib	getfsstat_statvfs note{ getfsstat uses statvfs -- just in case it is confused like getmntinfo }end compile{
170*b30d1939SAndy Fiddaman	#include <sys/types.h>
171*b30d1939SAndy Fiddaman	#include <sys/mount.h>
172*b30d1939SAndy Fiddaman	int
173*b30d1939SAndy Fiddaman	gfs(struct statvfs* fs)
174*b30d1939SAndy Fiddaman	{
175*b30d1939SAndy Fiddaman		fs->f_flag = 0;
176*b30d1939SAndy Fiddaman		return getfsstat(fs, sizeof(struct statvfs), MNT_WAIT);
177*b30d1939SAndy Fiddaman	}
178*b30d1939SAndy Fiddaman}end
179*b30d1939SAndy Fiddaman
180da2e3ebdSchincat{
181da2e3ebdSchin	#if _sys_statvfs
182da2e3ebdSchin	#include <sys/statvfs.h>
183da2e3ebdSchin	#if !_mem_statvfs_f_basetype
184da2e3ebdSchin	#if _ary_f_reserved7
185da2e3ebdSchin	#define f_basetype	f_reserved7
186da2e3ebdSchin	#endif
187da2e3ebdSchin	#endif
188da2e3ebdSchin	#else
189da2e3ebdSchin	#define _mem_f_basetype_statvfs	1
190da2e3ebdSchin	#define _mem_f_frsize_statvfs	1
191da2e3ebdSchin	struct statvfs
192da2e3ebdSchin	{
193da2e3ebdSchin	unsigned long	f_bsize;	/* fundamental file system block size */
194da2e3ebdSchin	unsigned long	f_frsize;	/* fragment size */
195da2e3ebdSchin	unsigned long	f_blocks;	/* total # of blocks of f_frsize on fs */
196da2e3ebdSchin	unsigned long	f_bfree;	/* total # of free blocks of f_frsize */
197da2e3ebdSchin	unsigned long	f_bavail;	/* # of free blocks avail to non-superuser */
198da2e3ebdSchin	unsigned long	f_files;	/* total # of file nodes (inodes) */
199da2e3ebdSchin	unsigned long	f_ffree;	/* total # of free file nodes */
200da2e3ebdSchin	unsigned long	f_favail;	/* # of free nodes avail to non-superuser */
201da2e3ebdSchin	unsigned long	f_fsid;		/* file system id (dev for now) */
202da2e3ebdSchin	char		f_basetype[16]; /* target fs type name, null-terminated */
203da2e3ebdSchin	unsigned long	f_flag;		/* bit-mask of flags */
204da2e3ebdSchin	unsigned long	f_namemax;	/* maximum file name length */
205da2e3ebdSchin	char		f_fstr[32];	/* filesystem-specific string */
206da2e3ebdSchin	unsigned long	f_filler[16];	/* reserved for future expansion */
207da2e3ebdSchin	};
208da2e3ebdSchin	extern int	fstatvfs(int, struct statvfs*);
209da2e3ebdSchin	extern int	statvfs(const char*, struct statvfs*);
210da2e3ebdSchin	#endif
211da2e3ebdSchin	#if _typ_off64_t
212da2e3ebdSchin	#undef	off_t
213da2e3ebdSchin	#define off_t	off64_t
214da2e3ebdSchin	#endif
215da2e3ebdSchin	#if _lib_statvfs64 && !defined(statvfs)
216da2e3ebdSchin	#define statvfs		statvfs64
217da2e3ebdSchin	#if !defined(__USE_LARGEFILE64)
218da2e3ebdSchin	extern int		statvfs64(const char*, struct statvfs64*);
219da2e3ebdSchin	#endif
220da2e3ebdSchin	#endif
221da2e3ebdSchin	#if _lib_fstatvfs64 && !defined(fstatvfs)
222da2e3ebdSchin	#define fstatvfs	fstatvfs64
223da2e3ebdSchin	#if !defined(__USE_LARGEFILE64)
224da2e3ebdSchin	extern int		fstatvfs64(int, struct statvfs64*);
225da2e3ebdSchin	#endif
226da2e3ebdSchin	#endif
227da2e3ebdSchin}end
228da2e3ebdSchin
229da2e3ebdSchinstr	st_fstype sys/types.h sys/stat.h note{ stat.st_fstype is a string }end compile{
230da2e3ebdSchin	int f(st)struct stat* st;{return st->st_fstype[0];}
231da2e3ebdSchin}end
232da2e3ebdSchin
233da2e3ebdSchinint	st_fstype sys/types.h sys/stat.h note{ stat.st_fstype is an int }end compile{
234da2e3ebdSchin	int f(st)struct stat* st;{return st->st_fstype = 1;}
235da2e3ebdSchin}end
236da2e3ebdSchin
237da2e3ebdSchinint	st_spare1 sys/types.h sys/stat.h note{ stat.st_spare1 is an int }end compile{
238da2e3ebdSchin	int f(st)struct stat* st;{return st->st_spare1 = 1;}
239da2e3ebdSchin}end
240da2e3ebdSchin
241da2e3ebdSchinary	st_spare4 sys/types.h sys/stat.h note{ stat.st_spare4 is an array }end compile{
242da2e3ebdSchin	int f(st)struct stat* st;{return st->st_spare4[0] = 1;}
243da2e3ebdSchin}end
244da2e3ebdSchin
245*b30d1939SAndy Fiddamanary	st_extra sys/types.h sys/stat.h note{ stat.st_extra is an array }end compile{
246*b30d1939SAndy Fiddaman	int f(st)struct stat* st;{return st->st_extra[0] = 1;}
247*b30d1939SAndy Fiddaman}end
248*b30d1939SAndy Fiddaman
249da2e3ebdSchinary	st_pad4 sys/types.h sys/stat.h note{ stat.st_pad4 is an array }end compile{
250da2e3ebdSchin	int f(st)struct stat* st;{return st->st_pad4[0] = 1;}
251da2e3ebdSchin}end
252