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