Skip to content

ISO9660

include/fs/iso9660.h View source View on GitHub
struct iso9660_datetime {
    uint8_t  year;
    uint8_t  month;
    uint8_t  day;
    uint8_t  hour;
    uint8_t  minute;
    uint8_t  second;
    int8_t   gmt_offset;
};
struct iso9660_dir_record {
    uint8_t                  length;
    uint8_t                  ext_attr_length;
    uint32_t                 extent_lba_le;
    uint32_t                 extent_lba_be;
    uint32_t                 size_le;
    uint32_t                 size_be;
    struct iso9660_datetime  datetime;
    uint8_t                  flags;
    uint8_t                  file_unit_size;
    uint8_t                  interleave_gap_size;
    uint16_t                 vol_seq_num_le;
    uint16_t                 vol_seq_num_be;
    uint8_t                  name_len;
    char                     name[];
};
struct iso9660_pvd {
    uint8_t                    type;
    char                       id[5];
    uint8_t                    version;
    uint8_t                    unused1;
    char                       system_id[32];
    char                       volume_id[32];
    uint8_t                    unused2[8];
    uint32_t                   volume_space_le;
    uint32_t                   volume_space_be;
    uint8_t                    unused3[32];
    uint16_t                   vol_set_size_le;
    uint16_t                   vol_set_size_be;
    uint16_t                   vol_seq_num_le;
    uint16_t                   vol_seq_num_be;
    uint16_t                   logical_block_size_le;
    uint16_t                   logical_block_size_be;
    uint32_t                   path_table_size_le;
    uint32_t                   path_table_size_be;
    uint32_t                   l_path_table_loc;
    uint32_t                   opt_l_path_table_loc;
    uint32_t                   m_path_table_loc;
    uint32_t                   opt_m_path_table_loc;
    struct iso9660_dir_record  root_dir_record;
};
struct iso9660_fs {
    struct partition     *partition;
    struct block_device  *disk;
    struct iso9660_pvd   *pvd;
    uint32_t             root_lba;
    uint32_t             root_size;
    uint32_t             block_size;
};
struct vfs_node * iso9660_mount(struct partition * *);
void iso9660_print(struct partition * *);
struct iso9660_datetime iso9660_get_current_date(void);
#define ISO9660_PVD_SECTOR 16
#define ISO9660_SECTOR_SIZE 2048