xref: /minix3/minix/fs/isofs/inode.h (revision b1d068470b756b2fc3b5d1d566114bbd7409d15b)
1 #include "const.h"
2 #include <sys/stat.h>
3 
4 struct iso9660_dir_record {
5 	/*
6 	 * ISO standard directory record.
7 	 */
8 	u8_t length;                    /* The length of the record */
9 	u8_t ext_attr_rec_length;
10 	u32_t loc_extent_l;             /* The same data (in this case loc_extent)is */
11 	u32_t loc_extent_m;             /* saved in two ways. The first puts the le- */
12 	u32_t data_length_l;            /* ast significant byte first, the second */
13 	u32_t data_length_m;            /* does the opposite */
14 	u8_t rec_date[7];               /* => recording date */
15 	u8_t file_flags;                /* => flags of the file */
16 	u8_t file_unit_size;            /* set of blocks in interleave mode */
17 	u8_t inter_gap_size;            /* gap between file units in interleave mode */
18 	u32_t vol_seq_number;           /* volume sequence number: not used */
19 	u8_t length_file_id;            /* Length name file */
20 	char file_id[ISO9660_MAX_FILE_ID_LEN]; /* file name */
21 } __attribute__((packed));
22 
23 struct rrii_dir_record {
24 	/*
25 	 * Rock Ridge directory record extensions.
26 	 */
27 	u8_t mtime[7];          /* stat.st_mtime */
28 	u8_t atime[7];          /* stat.st_atime */
29 	u8_t ctime[7];          /* stat.st_ctime */
30 	u8_t birthtime[7];      /* stat.st_birthtime */
31 
32 	mode_t d_mode;          /* file mode */
33 	uid_t uid;              /* user ID of the file's owner */
34 	gid_t gid;              /* group ID of the file's group */
35 	dev_t rdev;             /* device major/minor */
36 
37 	char file_id_rrip[ISO9660_RRIP_MAX_FILE_ID_LEN];        /* file name */
38 	char slink_rrip[ISO9660_RRIP_MAX_FILE_ID_LEN];          /* symbolic link */
39 
40 	struct inode *reparented_inode;
41 } ;
42 
43 struct dir_extent {
44 	/*
45 	 * Extent (contiguous array of logical sectors).
46 	 */
47 	u32_t location;
48 	u32_t length;
49 	struct dir_extent *next;
50 } ;
51 
52 struct inode_dir_entry {
53 	struct inode *i_node;
54 	char *name;                     /* Pointer to real name */
55 	char i_name[ISO9660_MAX_FILE_ID_LEN+1]; /* ISO 9660 name */
56 	char *r_name;                   /* Rock Ridge name */
57 } ;
58 
59 struct inode {
60 	int i_count;                    /* usage counter of this inode */
61 	int i_refcount;                 /* reference counter of this inode */
62 	int i_mountpoint;               /* flag for inode being used as a mount point */
63 	struct stat i_stat;             /* inode properties */
64 	struct dir_extent extent;      /* first extent of file */
65 	struct inode_dir_entry *dir_contents;	/* contents of directory */
66 	size_t dir_size;                /* number of inodes in this directory */
67 	char *s_name;                   /* Rock Ridge symbolic link */
68 	int skip;                       /* skip inode because of reparenting */
69 } ;
70 
71 struct opt {
72 	/*
73 	 * Global mount options.
74 	 */
75 	int norock;                     /* Bool: dont use Rock Ridge */
76 } ;
77 
78 #define D_DIRECTORY 0x2
79 #define D_NOT_LAST_EXTENT 0x80
80 #define D_TYPE 0x8E
81 
82