xref: /original-bsd/sys/ufs/ufs/dinode.h (revision c8876cb1)
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.9 (Berkeley) 06/28/90
8  */
9 
10 /*
11  * This structure defines the on-disk format of an inode.
12  */
13 
14 #define	NDADDR	12		/* direct addresses in inode */
15 #define	NIADDR	3		/* indirect addresses in inode */
16 
17 struct dinode {
18 	u_short	di_mode;	/*  0: mode and type of file */
19 	short	di_nlink;	/*  2: number of links to file */
20 	uid_t	di_uid;		/*  4: owner's user id */
21 	gid_t	di_gid;		/*  6: owner's group id */
22 	u_quad	di_qsize;	/*  8: number of bytes in file */
23 	time_t	di_atime;	/* 16: time last accessed */
24 	long	di_atspare;
25 	time_t	di_mtime;	/* 24: time last modified */
26 	long	di_mtspare;
27 	time_t	di_ctime;	/* 32: last time inode changed */
28 	long	di_ctspare;
29 	daddr_t	di_db[NDADDR];	/* 40: disk block addresses */
30 	daddr_t	di_ib[NIADDR];	/* 88: indirect blocks */
31 	long	di_flags;	/* 100: status, currently unused */
32 	long	di_blocks;	/* 104: blocks actually held */
33 	long	di_gen;		/* 108: generation number */
34 	long	di_spare[4];	/* 112: reserved, currently unused */
35 };
36 
37 #if BYTE_ORDER == LITTLE_ENDIAN || defined(tahoe) /* ugh! -- must be fixed */
38 #define	di_size		di_qsize.val[0]
39 #else /* BYTE_ORDER == BIG_ENDIAN */
40 #define	di_size		di_qsize.val[1]
41 #endif
42 #define	di_rdev		di_db[0]
43 
44 /* file modes */
45 #define	IFMT		0170000		/* type of file */
46 #define	IFIFO		0010000		/* named pipe (fifo) */
47 #define	IFCHR		0020000		/* character special */
48 #define	IFDIR		0040000		/* directory */
49 #define	IFBLK		0060000		/* block special */
50 #define	IFREG		0100000		/* regular */
51 #define	IFLNK		0120000		/* symbolic link */
52 #define	IFSOCK		0140000		/* socket */
53 
54 #define	ISUID		04000		/* set user id on execution */
55 #define	ISGID		02000		/* set group id on execution */
56 #define	ISVTX		01000		/* save swapped text even after use */
57 #define	IREAD		0400		/* read, write, execute permissions */
58 #define	IWRITE		0200
59 #define	IEXEC		0100
60