put back last version - undo dependency on syslimits.h
[unix-history] / usr / src / sys / ufs / ffs / dir.h
CommitLineData
da7c5cc6 1/*
c53fd45c
KM
2 * Copyright (c) 1982, 1986, 1989 The Regents of the University of California.
3 * All rights reserved.
da7c5cc6 4 *
c53fd45c
KM
5 * Redistribution and use in source and binary forms are permitted
6 * provided that the above copyright notice and this paragraph are
7 * duplicated in all such forms and that any documentation,
8 * advertising materials, and other materials related to such
9 * distribution and use acknowledge that the software was developed
10 * by the University of California, Berkeley. The name of the
11 * University may not be used to endorse or promote products derived
12 * from this software without specific prior written permission.
13 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
14 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
15 * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
16 *
e40b7cb3 17 * @(#)dir.h 7.5 (Berkeley) %G%
da7c5cc6 18 */
ad30fb67
KM
19
20/*
58765c2f
BJ
21 * A directory consists of some number of blocks of DIRBLKSIZ
22 * bytes, where DIRBLKSIZ is chosen such that it can be transferred
23 * to disk in a single atomic operation (e.g. 512 bytes on most machines).
24 *
25 * Each DIRBLKSIZ byte block contains some number of directory entry
26 * structures, which are of variable length. Each directory entry has
27 * a struct direct at the front of it, containing its inode number,
28 * the length of the entry, and the length of the name contained in
29 * the entry. These are followed by the name padded to a 4 byte boundary
30 * with null bytes. All names are guaranteed null terminated.
31 * The maximum length of a name in a directory is MAXNAMLEN.
32 *
33 * The macro DIRSIZ(dp) gives the amount of space required to represent
34 * a directory entry. Free space in a directory is represented by
35 * entries which have dp->d_reclen > DIRSIZ(dp). All DIRBLKSIZ bytes
36 * in a directory block are claimed by the directory entries. This
37 * usually results in the last entry in a directory having a large
38 * dp->d_reclen. When entries are deleted from a directory, the
39 * space is returned to the previous entry in the same directory
40 * block by increasing its dp->d_reclen. If the first entry of
41 * a directory block is free, then its dp->d_ino is set to 0.
42 * Entries other than the first in a directory do not normally have
43 * dp->d_ino set to 0.
ad30fb67 44 */
e40b7cb3
MT
45#define DIRBLKSIZ DEV_BSIZE
46#define MAXNAMLEN 255
ad30fb67
KM
47
48struct direct {
58765c2f
BJ
49 u_long d_ino; /* inode number of entry */
50 u_short d_reclen; /* length of this record */
51 u_short d_namlen; /* length of string in d_name */
52 char d_name[MAXNAMLEN + 1]; /* name must be no longer than this */
ad30fb67
KM
53};
54
55/*
58765c2f
BJ
56 * The DIRSIZ macro gives the minimum record length which will hold
57 * the directory entry. This requires the amount of space in struct direct
58 * without the d_name field, plus enough space for the name with a terminating
59 * null byte (dp->d_namlen+1), rounded up to a 4 byte boundary.
ad30fb67
KM
60 */
61#undef DIRSIZ
62#define DIRSIZ(dp) \
58765c2f 63 ((sizeof (struct direct) - (MAXNAMLEN+1)) + (((dp)->d_namlen+1 + 3) &~ 3))
ad30fb67 64
c53fd45c
KM
65#ifdef KERNEL
66/*
67 * Template for manipulating directories.
68 * Should use struct direct's, but the name field
69 * is MAXNAMLEN - 1, and this just won't do.
70 */
71struct dirtemplate {
72 u_long dot_ino;
73 short dot_reclen;
74 short dot_namlen;
75 char dot_name[4]; /* must be multiple of 4 */
76 u_long dotdot_ino;
77 short dotdot_reclen;
78 short dotdot_namlen;
79 char dotdot_name[4]; /* ditto */
80};
81#endif
82
83/*
84 * The following information should be obtained from <dirent.h>
85 * and is provided solely (and temporarily) for backward compatibility.
86 */
58765c2f 87#ifndef KERNEL
c53fd45c
KM
88#ifndef DEV_BSIZE
89#define DEV_BSIZE 512
90#endif
ad30fb67 91/*
58765c2f 92 * Definitions for library routines operating on directories.
ad30fb67 93 */
58765c2f
BJ
94typedef struct _dirdesc {
95 int dd_fd;
96 long dd_loc;
97 long dd_size;
98 char dd_buf[DIRBLKSIZ];
99} DIR;
7436c231
KB
100
101#define dirfd(dirp) ((dirp)->dd_fd)
102
af0b24db
SL
103#ifndef NULL
104#define NULL 0
105#endif
58765c2f
BJ
106extern DIR *opendir();
107extern struct direct *readdir();
108extern long telldir();
109extern void seekdir();
110#define rewinddir(dirp) seekdir((dirp), (long)0)
111extern void closedir();
c53fd45c 112#endif /* not KERNEL */