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