xref: /plan9/sys/src/ape/cmd/pax/paxdir.h (revision 9a747e4fd48b9f4522c70c07e8f882a15030f964)
1*9a747e4fSDavid du Colombier /*
2*9a747e4fSDavid du Colombier 	<dirent.h> -- definitions for SVR3 directory access routines
3*9a747e4fSDavid du Colombier 
4*9a747e4fSDavid du Colombier 	last edit:	25-Apr-1987	D A Gwyn
5*9a747e4fSDavid du Colombier 
6*9a747e4fSDavid du Colombier 	Prerequisite:	<sys/types.h>
7*9a747e4fSDavid du Colombier */
8*9a747e4fSDavid du Colombier 
9*9a747e4fSDavid du Colombier #ifndef _PAX_DIRENT_H
10*9a747e4fSDavid du Colombier #define _PAX_DIRENT_H
11*9a747e4fSDavid du Colombier 
12*9a747e4fSDavid du Colombier #include "config.h"
13*9a747e4fSDavid du Colombier #ifdef USG
14*9a747e4fSDavid du Colombier #define UFS
15*9a747e4fSDavid du Colombier #else
16*9a747e4fSDavid du Colombier #ifdef BSD
17*9a747e4fSDavid du Colombier #define BFS
18*9a747e4fSDavid du Colombier #endif
19*9a747e4fSDavid du Colombier #endif
20*9a747e4fSDavid du Colombier 
21*9a747e4fSDavid du Colombier struct dirent { 			/* data from getdents()/readdir() */
22*9a747e4fSDavid du Colombier     long		d_ino;		/* inode number of entry */
23*9a747e4fSDavid du Colombier     off_t		d_off;		/* offset of disk directory entry */
24*9a747e4fSDavid du Colombier     unsigned short	d_reclen;	/* length of this record */
25*9a747e4fSDavid du Colombier     char		d_name[1];	/* name of file (non-POSIX) */
26*9a747e4fSDavid du Colombier };
27*9a747e4fSDavid du Colombier 
28*9a747e4fSDavid du Colombier typedef struct {
29*9a747e4fSDavid du Colombier     int		dd_fd;			/* file descriptor */
30*9a747e4fSDavid du Colombier     int		dd_loc;			/* offset in block */
31*9a747e4fSDavid du Colombier     int		dd_size;		/* amount of valid data */
32*9a747e4fSDavid du Colombier     char	*dd_buf;		/* -> directory block */
33*9a747e4fSDavid du Colombier } DIR;					/* stream data from opendir() */
34*9a747e4fSDavid du Colombier 
35*9a747e4fSDavid du Colombier 
36*9a747e4fSDavid du Colombier /*
37*9a747e4fSDavid du Colombier  * The following nonportable ugliness could have been avoided by defining
38*9a747e4fSDavid du Colombier  * DIRENTSIZ and DIRENTBASESIZ to also have (struct dirent *) arguments.
39*9a747e4fSDavid du Colombier  */
40*9a747e4fSDavid du Colombier #define	DIRENTBASESIZ		(((struct dirent *)0)->d_name \
41*9a747e4fSDavid du Colombier 				- (char *)&((struct dirent *)0)->d_ino)
42*9a747e4fSDavid du Colombier #define	DIRENTSIZ( namlen )	((DIRENTBASESIZ + sizeof(long) + (namlen)) \
43*9a747e4fSDavid du Colombier 				/ sizeof(long) * sizeof(long))
44*9a747e4fSDavid du Colombier 
45*9a747e4fSDavid du Colombier #define	MAXNAMLEN 512			/* maximum filename length */
46*9a747e4fSDavid du Colombier 
47*9a747e4fSDavid du Colombier #ifndef NAME_MAX
48*9a747e4fSDavid du Colombier #define	NAME_MAX (MAXNAMLEN - 1)	/* DAG -- added for POSIX */
49*9a747e4fSDavid du Colombier #endif
50*9a747e4fSDavid du Colombier 
51*9a747e4fSDavid du Colombier #define	DIRBUF	 8192			/* buffer size for fs-indep. dirs */
52*9a747e4fSDavid du Colombier 		/* must in general be larger than the filesystem buffer size */
53*9a747e4fSDavid du Colombier 
54*9a747e4fSDavid du Colombier extern DIR		*opendir();
55*9a747e4fSDavid du Colombier extern struct dirent	*readdir();
56*9a747e4fSDavid du Colombier extern OFFSET		telldir();
57*9a747e4fSDavid du Colombier extern void		seekdir();
58*9a747e4fSDavid du Colombier extern int		closedir();
59*9a747e4fSDavid du Colombier 
60*9a747e4fSDavid du Colombier #endif /* _PAX_DIRENT_H */
61