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