151a7b740SScott Long /*- 24d846d26SWarner Losh * SPDX-License-Identifier: BSD-2-Clause 3d63027b6SPedro F. Giffuni * 451a7b740SScott Long * Copyright (c) 2001, 2002 Scott Long <scottl@freebsd.org> 551a7b740SScott Long * All rights reserved. 651a7b740SScott Long * 751a7b740SScott Long * Redistribution and use in source and binary forms, with or without 851a7b740SScott Long * modification, are permitted provided that the following conditions 951a7b740SScott Long * are met: 1051a7b740SScott Long * 1. Redistributions of source code must retain the above copyright 1151a7b740SScott Long * notice, this list of conditions and the following disclaimer. 1251a7b740SScott Long * 2. Redistributions in binary form must reproduce the above copyright 1351a7b740SScott Long * notice, this list of conditions and the following disclaimer in the 1451a7b740SScott Long * documentation and/or other materials provided with the distribution. 1551a7b740SScott Long * 1651a7b740SScott Long * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 1751a7b740SScott Long * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1851a7b740SScott Long * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 1951a7b740SScott Long * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 2051a7b740SScott Long * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2151a7b740SScott Long * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2251a7b740SScott Long * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2351a7b740SScott Long * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2451a7b740SScott Long * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2551a7b740SScott Long * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2651a7b740SScott Long * SUCH DAMAGE. 2751a7b740SScott Long */ 2851a7b740SScott Long 2951a7b740SScott Long /* ecma167-udf.h */ 3051a7b740SScott Long /* Structure/definitions/constants a la ECMA 167 rev. 3 */ 3151a7b740SScott Long 3251a7b740SScott Long /* Tag identifiers */ 3351a7b740SScott Long enum { 3451a7b740SScott Long TAGID_PRI_VOL = 1, 3551a7b740SScott Long TAGID_ANCHOR = 2, 3651a7b740SScott Long TAGID_VOL = 3, 3751a7b740SScott Long TAGID_IMP_VOL = 4, 3851a7b740SScott Long TAGID_PARTITION = 5, 3951a7b740SScott Long TAGID_LOGVOL = 6, 4051a7b740SScott Long TAGID_UNALLOC_SPACE = 7, 4151a7b740SScott Long TAGID_TERM = 8, 4251a7b740SScott Long TAGID_LOGVOL_INTEGRITY = 9, 4351a7b740SScott Long TAGID_FSD = 256, 4451a7b740SScott Long TAGID_FID = 257, 4551a7b740SScott Long TAGID_FENTRY = 261 4651a7b740SScott Long }; 4751a7b740SScott Long 4851a7b740SScott Long /* Descriptor tag [3/7.2] */ 4951a7b740SScott Long struct desc_tag { 50c2d6947dSJeroen Ruigrok van der Werven uint16_t id; 51c2d6947dSJeroen Ruigrok van der Werven uint16_t descriptor_ver; 52c2d6947dSJeroen Ruigrok van der Werven uint8_t cksum; 53c2d6947dSJeroen Ruigrok van der Werven uint8_t reserved; 54c2d6947dSJeroen Ruigrok van der Werven uint16_t serial_num; 55c2d6947dSJeroen Ruigrok van der Werven uint16_t desc_crc; 56c2d6947dSJeroen Ruigrok van der Werven uint16_t desc_crc_len; 57c2d6947dSJeroen Ruigrok van der Werven uint32_t tag_loc; 584f492bfaSAlfred Perlstein } __packed; 5951a7b740SScott Long 6051a7b740SScott Long /* Recorded Address [4/7.1] */ 6151a7b740SScott Long struct lb_addr { 62c2d6947dSJeroen Ruigrok van der Werven uint32_t lb_num; 63c2d6947dSJeroen Ruigrok van der Werven uint16_t part_num; 644f492bfaSAlfred Perlstein } __packed; 6551a7b740SScott Long 6651a7b740SScott Long /* Extent Descriptor [3/7.1] */ 6751a7b740SScott Long struct extent_ad { 68c2d6947dSJeroen Ruigrok van der Werven uint32_t len; 69c2d6947dSJeroen Ruigrok van der Werven uint32_t loc; 704f492bfaSAlfred Perlstein } __packed; 7151a7b740SScott Long 7251a7b740SScott Long /* Short Allocation Descriptor [4/14.14.1] */ 7351a7b740SScott Long struct short_ad { 74c2d6947dSJeroen Ruigrok van der Werven uint32_t len; 75c2d6947dSJeroen Ruigrok van der Werven uint32_t pos; 764f492bfaSAlfred Perlstein } __packed; 7751a7b740SScott Long 7851a7b740SScott Long /* Long Allocation Descriptor [4/14.14.2] */ 7951a7b740SScott Long struct long_ad { 80c2d6947dSJeroen Ruigrok van der Werven uint32_t len; 8151a7b740SScott Long struct lb_addr loc; 82c2d6947dSJeroen Ruigrok van der Werven uint16_t ad_flags; 83c2d6947dSJeroen Ruigrok van der Werven uint32_t ad_id; 844f492bfaSAlfred Perlstein } __packed; 8551a7b740SScott Long 8651a7b740SScott Long /* Extended Allocation Descriptor [4/14.14.3] */ 8751a7b740SScott Long struct ext_ad { 88c2d6947dSJeroen Ruigrok van der Werven uint32_t ex_len; 89c2d6947dSJeroen Ruigrok van der Werven uint32_t rec_len; 90c2d6947dSJeroen Ruigrok van der Werven uint32_t inf_len; 9151a7b740SScott Long struct lb_addr ex_loc; 92c2d6947dSJeroen Ruigrok van der Werven uint8_t reserved[2]; 934f492bfaSAlfred Perlstein } __packed; 9451a7b740SScott Long 9551a7b740SScott Long union icb { 9651a7b740SScott Long struct short_ad s_ad; 9751a7b740SScott Long struct long_ad l_ad; 9851a7b740SScott Long struct ext_ad e_ad; 9951a7b740SScott Long }; 10051a7b740SScott Long 10151a7b740SScott Long /* Character set spec [1/7.2.1] */ 10251a7b740SScott Long struct charspec { 103c2d6947dSJeroen Ruigrok van der Werven uint8_t type; 104c2d6947dSJeroen Ruigrok van der Werven uint8_t inf[63]; 1054f492bfaSAlfred Perlstein } __packed; 10651a7b740SScott Long 10751a7b740SScott Long /* Timestamp [1/7.3] */ 10851a7b740SScott Long struct timestamp { 109c2d6947dSJeroen Ruigrok van der Werven uint16_t type_tz; 110c2d6947dSJeroen Ruigrok van der Werven uint16_t year; 111c2d6947dSJeroen Ruigrok van der Werven uint8_t month; 112c2d6947dSJeroen Ruigrok van der Werven uint8_t day; 113c2d6947dSJeroen Ruigrok van der Werven uint8_t hour; 114c2d6947dSJeroen Ruigrok van der Werven uint8_t minute; 115c2d6947dSJeroen Ruigrok van der Werven uint8_t second; 116c2d6947dSJeroen Ruigrok van der Werven uint8_t centisec; 117c2d6947dSJeroen Ruigrok van der Werven uint8_t hund_usec; 118c2d6947dSJeroen Ruigrok van der Werven uint8_t usec; 1194f492bfaSAlfred Perlstein } __packed; 12051a7b740SScott Long 12151a7b740SScott Long /* Entity Identifier [1/7.4] */ 12251a7b740SScott Long #define UDF_REGID_ID_SIZE 23 12351a7b740SScott Long struct regid { 124c2d6947dSJeroen Ruigrok van der Werven uint8_t flags; 125c2d6947dSJeroen Ruigrok van der Werven uint8_t id[UDF_REGID_ID_SIZE]; 126c2d6947dSJeroen Ruigrok van der Werven uint8_t id_suffix[8]; 1274f492bfaSAlfred Perlstein } __packed; 12851a7b740SScott Long 12951a7b740SScott Long /* ICB Tag [4/14.6] */ 13051a7b740SScott Long struct icb_tag { 131c2d6947dSJeroen Ruigrok van der Werven uint32_t prev_num_dirs; 132c2d6947dSJeroen Ruigrok van der Werven uint16_t strat_type; 133c2d6947dSJeroen Ruigrok van der Werven uint8_t strat_param[2]; 134c2d6947dSJeroen Ruigrok van der Werven uint16_t max_num_entries; 135c2d6947dSJeroen Ruigrok van der Werven uint8_t reserved; 136c2d6947dSJeroen Ruigrok van der Werven uint8_t file_type; 13751a7b740SScott Long struct lb_addr parent_icb; 138c2d6947dSJeroen Ruigrok van der Werven uint16_t flags; 1394f492bfaSAlfred Perlstein } __packed; 14051a7b740SScott Long #define UDF_ICB_TAG_FLAGS_SETUID 0x40 14151a7b740SScott Long #define UDF_ICB_TAG_FLAGS_SETGID 0x80 14251a7b740SScott Long #define UDF_ICB_TAG_FLAGS_STICKY 0x100 14351a7b740SScott Long 14451a7b740SScott Long /* Anchor Volume Descriptor Pointer [3/10.2] */ 14551a7b740SScott Long struct anchor_vdp { 14651a7b740SScott Long struct desc_tag tag; 14751a7b740SScott Long struct extent_ad main_vds_ex; 14851a7b740SScott Long struct extent_ad reserve_vds_ex; 1494f492bfaSAlfred Perlstein } __packed; 15051a7b740SScott Long 15151a7b740SScott Long /* Volume Descriptor Pointer [3/10.3] */ 15251a7b740SScott Long struct vol_desc_ptr { 15351a7b740SScott Long struct desc_tag tag; 154c2d6947dSJeroen Ruigrok van der Werven uint32_t vds_number; 15551a7b740SScott Long struct extent_ad next_vds_ex; 1564f492bfaSAlfred Perlstein } __packed; 15751a7b740SScott Long 15851a7b740SScott Long /* Primary Volume Descriptor [3/10.1] */ 15951a7b740SScott Long struct pri_vol_desc { 16051a7b740SScott Long struct desc_tag tag; 161c2d6947dSJeroen Ruigrok van der Werven uint32_t seq_num; 162c2d6947dSJeroen Ruigrok van der Werven uint32_t pdv_num; 16351a7b740SScott Long char vol_id[32]; 164c2d6947dSJeroen Ruigrok van der Werven uint16_t vds_num; 165c2d6947dSJeroen Ruigrok van der Werven uint16_t max_vol_seq; 166c2d6947dSJeroen Ruigrok van der Werven uint16_t ichg_lvl; 167c2d6947dSJeroen Ruigrok van der Werven uint16_t max_ichg_lvl; 168c2d6947dSJeroen Ruigrok van der Werven uint32_t charset_list; 169c2d6947dSJeroen Ruigrok van der Werven uint32_t max_charset_list; 17051a7b740SScott Long char volset_id[128]; 17151a7b740SScott Long struct charspec desc_charset; 17251a7b740SScott Long struct charspec explanatory_charset; 17351a7b740SScott Long struct extent_ad vol_abstract; 17451a7b740SScott Long struct extent_ad vol_copyright; 17551a7b740SScott Long struct regid app_id; 17651a7b740SScott Long struct timestamp time; 17751a7b740SScott Long struct regid imp_id; 178c2d6947dSJeroen Ruigrok van der Werven uint8_t imp_use[64]; 179c2d6947dSJeroen Ruigrok van der Werven uint32_t prev_vds_lov; 180c2d6947dSJeroen Ruigrok van der Werven uint16_t flags; 181c2d6947dSJeroen Ruigrok van der Werven uint8_t reserved[22]; 1824f492bfaSAlfred Perlstein } __packed; 18351a7b740SScott Long 18451a7b740SScott Long /* Logical Volume Descriptor [3/10.6] */ 18551a7b740SScott Long struct logvol_desc { 18651a7b740SScott Long struct desc_tag tag; 187c2d6947dSJeroen Ruigrok van der Werven uint32_t seq_num; 18851a7b740SScott Long struct charspec desc_charset; 18951a7b740SScott Long char logvol_id[128]; 190c2d6947dSJeroen Ruigrok van der Werven uint32_t lb_size; 19151a7b740SScott Long struct regid domain_id; 19251a7b740SScott Long union { 19351a7b740SScott Long struct long_ad fsd_loc; 194c2d6947dSJeroen Ruigrok van der Werven uint8_t logvol_content_use[16]; 19551a7b740SScott Long } _lvd_use; 196c2d6947dSJeroen Ruigrok van der Werven uint32_t mt_l; /* Partition map length */ 197c2d6947dSJeroen Ruigrok van der Werven uint32_t n_pm; /* Number of partition maps */ 19851a7b740SScott Long struct regid imp_id; 199c2d6947dSJeroen Ruigrok van der Werven uint8_t imp_use[128]; 20051a7b740SScott Long struct extent_ad integrity_seq_id; 201c2d6947dSJeroen Ruigrok van der Werven uint8_t maps[1]; 2024f492bfaSAlfred Perlstein } __packed; 20351a7b740SScott Long 20451a7b740SScott Long /* Type 1 Partition Map [3/10.7.2] */ 20551a7b740SScott Long struct part_map_1 { 206c2d6947dSJeroen Ruigrok van der Werven uint8_t type; 207c2d6947dSJeroen Ruigrok van der Werven uint8_t len; 208c2d6947dSJeroen Ruigrok van der Werven uint16_t vol_seq_num; 209c2d6947dSJeroen Ruigrok van der Werven uint16_t part_num; 2104f492bfaSAlfred Perlstein } __packed; 21151a7b740SScott Long 21269f0212fSYaroslav Tykhiy #define UDF_PMAP_TYPE1_SIZE 6 21369f0212fSYaroslav Tykhiy 21451a7b740SScott Long /* Type 2 Partition Map [3/10.7.3] */ 21551a7b740SScott Long struct part_map_2 { 216c2d6947dSJeroen Ruigrok van der Werven uint8_t type; 217c2d6947dSJeroen Ruigrok van der Werven uint8_t len; 218c2d6947dSJeroen Ruigrok van der Werven uint8_t part_id[62]; 2194f492bfaSAlfred Perlstein } __packed; 22051a7b740SScott Long 22169f0212fSYaroslav Tykhiy #define UDF_PMAP_TYPE2_SIZE 64 22269f0212fSYaroslav Tykhiy 22351a7b740SScott Long /* Virtual Partition Map [UDF 2.01/2.2.8] */ 22451a7b740SScott Long struct part_map_virt { 225c2d6947dSJeroen Ruigrok van der Werven uint8_t type; 226c2d6947dSJeroen Ruigrok van der Werven uint8_t len; 227c2d6947dSJeroen Ruigrok van der Werven uint8_t reserved[2]; 22851a7b740SScott Long struct regid id; 229c2d6947dSJeroen Ruigrok van der Werven uint16_t vol_seq_num; 230c2d6947dSJeroen Ruigrok van der Werven uint16_t part_num; 231c2d6947dSJeroen Ruigrok van der Werven uint8_t reserved1[24]; 2324f492bfaSAlfred Perlstein } __packed; 23351a7b740SScott Long 23451a7b740SScott Long /* Sparable Partition Map [UDF 2.01/2.2.9] */ 23551a7b740SScott Long struct part_map_spare { 236c2d6947dSJeroen Ruigrok van der Werven uint8_t type; 237c2d6947dSJeroen Ruigrok van der Werven uint8_t len; 238c2d6947dSJeroen Ruigrok van der Werven uint8_t reserved[2]; 23951a7b740SScott Long struct regid id; 240c2d6947dSJeroen Ruigrok van der Werven uint16_t vol_seq_num; 241c2d6947dSJeroen Ruigrok van der Werven uint16_t part_num; 242c2d6947dSJeroen Ruigrok van der Werven uint16_t packet_len; 243c2d6947dSJeroen Ruigrok van der Werven uint8_t n_st; /* Number of Sparing Tables */ 244c2d6947dSJeroen Ruigrok van der Werven uint8_t reserved1; 245c2d6947dSJeroen Ruigrok van der Werven uint32_t st_size; 246c2d6947dSJeroen Ruigrok van der Werven uint32_t st_loc[1]; 2474f492bfaSAlfred Perlstein } __packed; 24851a7b740SScott Long 24951a7b740SScott Long union udf_pmap { 25051a7b740SScott Long struct part_map_1 pm1; 25151a7b740SScott Long struct part_map_2 pm2; 25251a7b740SScott Long struct part_map_virt pmv; 25351a7b740SScott Long struct part_map_spare pms; 25451a7b740SScott Long }; 25551a7b740SScott Long 25651a7b740SScott Long /* Sparing Map Entry [UDF 2.01/2.2.11] */ 25751a7b740SScott Long struct spare_map_entry { 258c2d6947dSJeroen Ruigrok van der Werven uint32_t org; 259c2d6947dSJeroen Ruigrok van der Werven uint32_t map; 2604f492bfaSAlfred Perlstein } __packed; 26151a7b740SScott Long 26251a7b740SScott Long /* Sparing Table [UDF 2.01/2.2.11] */ 26351a7b740SScott Long struct udf_sparing_table { 26451a7b740SScott Long struct desc_tag tag; 26551a7b740SScott Long struct regid id; 266c2d6947dSJeroen Ruigrok van der Werven uint16_t rt_l; /* Relocation Table len */ 267c2d6947dSJeroen Ruigrok van der Werven uint8_t reserved[2]; 268c2d6947dSJeroen Ruigrok van der Werven uint32_t seq_num; 26951a7b740SScott Long struct spare_map_entry entries[1]; 2704f492bfaSAlfred Perlstein } __packed; 27151a7b740SScott Long 27251a7b740SScott Long /* Partition Descriptor [3/10.5] */ 27351a7b740SScott Long struct part_desc { 27451a7b740SScott Long struct desc_tag tag; 275c2d6947dSJeroen Ruigrok van der Werven uint32_t seq_num; 276c2d6947dSJeroen Ruigrok van der Werven uint16_t flags; 277c2d6947dSJeroen Ruigrok van der Werven uint16_t part_num; 27851a7b740SScott Long struct regid contents; 279c2d6947dSJeroen Ruigrok van der Werven uint8_t contents_use[128]; 280c2d6947dSJeroen Ruigrok van der Werven uint32_t access_type; 281c2d6947dSJeroen Ruigrok van der Werven uint32_t start_loc; 282c2d6947dSJeroen Ruigrok van der Werven uint32_t part_len; 28351a7b740SScott Long struct regid imp_id; 284c2d6947dSJeroen Ruigrok van der Werven uint8_t imp_use[128]; 285c2d6947dSJeroen Ruigrok van der Werven uint8_t reserved[156]; 2864f492bfaSAlfred Perlstein } __packed; 28751a7b740SScott Long 28851a7b740SScott Long /* File Set Descriptor [4/14.1] */ 28951a7b740SScott Long struct fileset_desc { 29051a7b740SScott Long struct desc_tag tag; 29151a7b740SScott Long struct timestamp time; 292c2d6947dSJeroen Ruigrok van der Werven uint16_t ichg_lvl; 293c2d6947dSJeroen Ruigrok van der Werven uint16_t max_ichg_lvl; 294c2d6947dSJeroen Ruigrok van der Werven uint32_t charset_list; 295c2d6947dSJeroen Ruigrok van der Werven uint32_t max_charset_list; 296c2d6947dSJeroen Ruigrok van der Werven uint32_t fileset_num; 297c2d6947dSJeroen Ruigrok van der Werven uint32_t fileset_desc_num; 29851a7b740SScott Long struct charspec logvol_id_charset; 29951a7b740SScott Long char logvol_id[128]; 30051a7b740SScott Long struct charspec fileset_charset; 30151a7b740SScott Long char fileset_id[32]; 30251a7b740SScott Long char copyright_file_id[32]; 30351a7b740SScott Long char abstract_file_id[32]; 30451a7b740SScott Long struct long_ad rootdir_icb; 30551a7b740SScott Long struct regid domain_id; 30651a7b740SScott Long struct long_ad next_ex; 30751a7b740SScott Long struct long_ad streamdir_icb; 308c2d6947dSJeroen Ruigrok van der Werven uint8_t reserved[32]; 3094f492bfaSAlfred Perlstein } __packed; 31051a7b740SScott Long 31151a7b740SScott Long /* File Identifier Descriptor [4/14.4] */ 31251a7b740SScott Long struct fileid_desc { 31351a7b740SScott Long struct desc_tag tag; 314c2d6947dSJeroen Ruigrok van der Werven uint16_t file_num; 315c2d6947dSJeroen Ruigrok van der Werven uint8_t file_char; 316c2d6947dSJeroen Ruigrok van der Werven uint8_t l_fi; /* Length of file identifier area */ 31751a7b740SScott Long struct long_ad icb; 3189f07f449SChristian Brueffer uint16_t l_iu; /* Length of implementation use area */ 319c2d6947dSJeroen Ruigrok van der Werven uint8_t data[1]; 3204f492bfaSAlfred Perlstein } __packed; 32151a7b740SScott Long #define UDF_FID_SIZE 38 3222bbe0d36SScott Long #define UDF_FILE_CHAR_VIS (1 << 0) /* Visible */ 3232bbe0d36SScott Long #define UDF_FILE_CHAR_DIR (1 << 1) /* Directory */ 3242bbe0d36SScott Long #define UDF_FILE_CHAR_DEL (1 << 2) /* Deleted */ 3252bbe0d36SScott Long #define UDF_FILE_CHAR_PAR (1 << 3) /* Parent Directory */ 3262bbe0d36SScott Long #define UDF_FILE_CHAR_META (1 << 4) /* Stream metadata */ 32751a7b740SScott Long 32851a7b740SScott Long /* File Entry [4/14.9] */ 32951a7b740SScott Long struct file_entry { 33051a7b740SScott Long struct desc_tag tag; 33151a7b740SScott Long struct icb_tag icbtag; 332c2d6947dSJeroen Ruigrok van der Werven uint32_t uid; 333c2d6947dSJeroen Ruigrok van der Werven uint32_t gid; 334c2d6947dSJeroen Ruigrok van der Werven uint32_t perm; 335c2d6947dSJeroen Ruigrok van der Werven uint16_t link_cnt; 336c2d6947dSJeroen Ruigrok van der Werven uint8_t rec_format; 337c2d6947dSJeroen Ruigrok van der Werven uint8_t rec_disp_attr; 338c2d6947dSJeroen Ruigrok van der Werven uint32_t rec_len; 339c2d6947dSJeroen Ruigrok van der Werven uint64_t inf_len; 340c2d6947dSJeroen Ruigrok van der Werven uint64_t logblks_rec; 34151a7b740SScott Long struct timestamp atime; 34251a7b740SScott Long struct timestamp mtime; 34351a7b740SScott Long struct timestamp attrtime; 344c2d6947dSJeroen Ruigrok van der Werven uint32_t ckpoint; 34551a7b740SScott Long struct long_ad ex_attr_icb; 34651a7b740SScott Long struct regid imp_id; 347c2d6947dSJeroen Ruigrok van der Werven uint64_t unique_id; 348c2d6947dSJeroen Ruigrok van der Werven uint32_t l_ea; /* Length of extended attribute area */ 349c2d6947dSJeroen Ruigrok van der Werven uint32_t l_ad; /* Length of allocation descriptors */ 350c2d6947dSJeroen Ruigrok van der Werven uint8_t data[1]; 3514f492bfaSAlfred Perlstein } __packed; 35251a7b740SScott Long #define UDF_FENTRY_SIZE 176 35351a7b740SScott Long #define UDF_FENTRY_PERM_USER_MASK 0x07 35451a7b740SScott Long #define UDF_FENTRY_PERM_GRP_MASK 0xE0 35551a7b740SScott Long #define UDF_FENTRY_PERM_OWNER_MASK 0x1C00 35651a7b740SScott Long 357e3024df2SJohn Baldwin /* Path Component [4/14.16.1] */ 358e3024df2SJohn Baldwin struct path_component { 359e3024df2SJohn Baldwin uint8_t type; 360e3024df2SJohn Baldwin uint8_t length; 361e3024df2SJohn Baldwin uint16_t version; 362a40ad858SJohn Baldwin uint8_t identifier[1]; 363e3024df2SJohn Baldwin } __packed; 364e3024df2SJohn Baldwin #define UDF_PATH_ROOT 2 365e3024df2SJohn Baldwin #define UDF_PATH_DOTDOT 3 366e3024df2SJohn Baldwin #define UDF_PATH_DOT 4 367e3024df2SJohn Baldwin #define UDF_PATH_PATH 5 368e3024df2SJohn Baldwin 36951a7b740SScott Long union dscrptr { 37051a7b740SScott Long struct desc_tag tag; 37151a7b740SScott Long struct anchor_vdp avdp; 37251a7b740SScott Long struct vol_desc_ptr vdp; 37351a7b740SScott Long struct pri_vol_desc pvd; 37451a7b740SScott Long struct logvol_desc lvd; 37551a7b740SScott Long struct part_desc pd; 37651a7b740SScott Long struct fileset_desc fsd; 37751a7b740SScott Long struct fileid_desc fid; 37851a7b740SScott Long struct file_entry fe; 37951a7b740SScott Long }; 38051a7b740SScott Long 38151a7b740SScott Long /* Useful defines */ 38251a7b740SScott Long 38351a7b740SScott Long #define GETICB(ad_type, fentry, offset) \ 38451a7b740SScott Long (struct ad_type *)&fentry->data[offset] 38551a7b740SScott Long 386937a2387SWill Andrews #define GETICBLEN(ad_type, icb) le32toh(((struct ad_type *)(icb))->len) 387