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