xref: /original-bsd/sys/ufs/ufs/dinode.h (revision e59fb703)
1 /*
2  * Copyright (c) 1982, 1989 The Regents of the University of California.
3  * All rights reserved.
4  *
5  * %sccs.include.redist.c%
6  *
7  *	@(#)dinode.h	7.13 (Berkeley) 12/19/91
8  */
9 
10 /*
11  * The root inode is the root of the file system.  Inode 0 can't be used for
12  * normal purposes and historically bad blocks were linked to inode 1, thus
13  * the root inode is 2.  (Inode 1 is no longer used for this purpose, however
14  * numerous dump tapes make this assumption, so we are stuck with it).
15  */
16 #define	ROOTINO	((ino_t)2)
17 
18 /*
19  * A dinode contains all the meta-data associated with a UFS file.
20  * This structure defines the on-disk format of a dinode.
21  */
22 
23 #define	NDADDR	12		/* direct addresses in inode */
24 #define	NIADDR	3		/* indirect addresses in inode */
25 
26 struct dinode {
27 	u_short	di_mode;	/*  0: mode and type of file */
28 	short	di_nlink;	/*  2: number of links to file */
29 	uid_t	di_uid;		/*  4: owner's user id */
30 	gid_t	di_gid;		/*  6: owner's group id */
31 	u_quad_t di_qsize;	/*  8: number of bytes in file */
32 	time_t	di_atime;	/* 16: time last accessed */
33 	long	di_atspare;
34 	time_t	di_mtime;	/* 24: time last modified */
35 	long	di_mtspare;
36 	time_t	di_ctime;	/* 32: last time inode changed */
37 	long	di_ctspare;
38 	daddr_t	di_db[NDADDR];	/* 40: disk block addresses */
39 	daddr_t	di_ib[NIADDR];	/* 88: indirect blocks */
40 	long	di_flags;	/* 100: status, currently unused */
41 	long	di_blocks;	/* 104: blocks actually held */
42 	long	di_gen;		/* 108: generation number */
43 	long	di_spare[4];	/* 112: reserved, currently unused */
44 };
45 
46 #ifdef _NOQUAD
47 #define di_size	di_qsize.val[_QUAD_LOWWORD]
48 #else
49 #define di_size	di_qsize
50 #endif
51 
52 #if defined(tahoe) /* ugh! -- must be fixed */
53 #undef di_size
54 #define	di_size		di_qsize.val[0]
55 #endif
56 
57 #define	di_rdev		di_db[0]
58 
59 /* file modes */
60 #define	IFMT		0170000		/* mask of file type */
61 #define	IFIFO		0010000		/* named pipe (fifo) */
62 #define	IFCHR		0020000		/* character special device */
63 #define	IFDIR		0040000		/* directory */
64 #define	IFBLK		0060000		/* block special device */
65 #define	IFREG		0100000		/* regular file */
66 #define	IFLNK		0120000		/* symbolic link */
67 #define	IFSOCK		0140000		/* UNIX domain socket */
68 
69 #define	ISUID		04000		/* set user identifier when exec'ing */
70 #define	ISGID		02000		/* set group identifier when exec'ing */
71 #define	ISVTX		01000		/* save execution information on exit */
72 #define	IREAD		0400		/* read permission */
73 #define	IWRITE		0200		/* write permission */
74 #define	IEXEC		0100		/* execute permission */
75