74 lines
2.2 KiB
C
74 lines
2.2 KiB
C
/* dirent.h - Declarations for directory reading routines.
|
|
* Author: Kees J. Bot
|
|
* 24 Apr 1989
|
|
*
|
|
* Note: The V7 format directory entries used under Minix must be transformed
|
|
* into a struct dirent with a d_name of at least 15 characters. Given that
|
|
* we have to transform V7 entries anyhow it is little trouble to let the
|
|
* routines understand the so-called "flex" directory format too.
|
|
*/
|
|
|
|
#ifndef _DIRENT_H
|
|
#define _DIRENT_H
|
|
|
|
#ifndef _TYPES_H
|
|
#include <minix/types.h>
|
|
#endif
|
|
|
|
/* Name of length len needs _EXTENT(len) extra slots. */
|
|
#define _EXTENT(len) (((len) + 5) >> 3)
|
|
|
|
/* The block size must be at least 1024 bytes, because otherwise
|
|
* the superblock (at 1024 bytes) overlaps with other filesystem data.
|
|
*/
|
|
#define _MIN_BLOCK_SIZE 1024
|
|
|
|
/* The below is allocated in some parts of the system as the largest
|
|
* a filesystem block can be. For instance, the boot monitor allocates
|
|
* 3 of these blocks and has to fit within 64kB, so this can't be
|
|
* increased without taking that into account.
|
|
*/
|
|
#define _MAX_BLOCK_SIZE 4096
|
|
|
|
/* This is the block size for the fixed versions of the filesystem (V1/V2) */
|
|
#define _STATIC_BLOCK_SIZE 1024
|
|
|
|
/* Definitions for the directory(3) routines: */
|
|
typedef struct {
|
|
int _fd; /* Filedescriptor of open directory */
|
|
unsigned _count; /* This many bytes in _buf */
|
|
unsigned _pos; /* Position in _buf */
|
|
char _buf[_MAX_BLOCK_SIZE]; /* The size does not really
|
|
* matter as long as the
|
|
* buffer is big enough
|
|
* to contain at least one
|
|
* entry.
|
|
*/
|
|
} DIR;
|
|
|
|
struct dirent { /* Largest entry (8 slots) */
|
|
ino_t d_ino; /* I-node number */
|
|
off_t d_off; /* Offset in directory */
|
|
unsigned short d_reclen; /* Length of this record */
|
|
char d_name[1]; /* Null terminated name */
|
|
};
|
|
|
|
/* Function Prototypes. */
|
|
_PROTOTYPE( int closedir, (DIR *_dirp) );
|
|
_PROTOTYPE( DIR *opendir, (const char *_dirname) );
|
|
_PROTOTYPE( struct dirent *readdir, (DIR *_dirp) );
|
|
_PROTOTYPE( void rewinddir, (DIR *_dirp) );
|
|
|
|
#ifdef _MINIX
|
|
_PROTOTYPE( int seekdir, (DIR *_dirp, off_t _loc) );
|
|
_PROTOTYPE( off_t telldir, (DIR *_dirp) );
|
|
|
|
#define dirfd(dirp) ((dirp)->_fd)
|
|
|
|
_PROTOTYPE( int getdents, (int _fildes, struct dirent *_buf,
|
|
size_t _nbyte) );
|
|
|
|
#endif
|
|
|
|
#endif /* _DIRENT_H */
|