cdrtools/mkisofs/udf_fs.h
2025-06-15 04:19:58 +08:00

745 lines
23 KiB
C

/* @(#)udf_fs.h 1.6 13/02/12 Copyright 2001-2013 J. Schilling */
/*
* udf_fs.h - UDF structure definitions for mkisofs
*
* Written by Ben Rudiak-Gould (2001).
*
* Copyright 2001-2013 J. Schilling.
*/
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with
* this program; see the file COPYING. If not, write to the Free Software
* Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#ifndef _UDF_FS_H
#define _UDF_FS_H
/*
* Abbreviations:
*
* ad allocation descriptor
* desc descriptor
* ext extended
* ident identifier
* impl implementation
* info information
* ptr pointer
* seq sequence
*/
typedef char udf_Uint8;
typedef char udf_dchar;
typedef char udf_dstring;
typedef char udf_byte;
typedef char udf_zerobyte;
/* Is this safe? Are there compilers so perverse as to pad these structs? */
typedef struct udf_Uint16_ {
char l;
char h;
} udf_Uint16;
typedef struct udf_Uint32_ {
char l;
char ml;
char mh;
char h;
} udf_Uint32;
typedef struct udf_Uint64_ {
udf_Uint32 l;
udf_Uint32 h;
} udf_Uint64;
typedef struct udf_tag_ { /* ECMA-167 3/7.2 */
/* 0*/ udf_Uint16 tag_ident;
/* 2*/ udf_Uint16 desc_version;
/* 4*/ udf_Uint8 tag_checksum;
/* 5*/ udf_zerobyte reserved;
/* 6*/ udf_Uint16 tag_serial_number;
/* 8*/ udf_Uint16 desc_crc;
/*10*/ udf_Uint16 desc_crc_length;
/*12*/ udf_Uint32 tag_location;
/*16*/
} udf_tag;
#define UDF_TAGID_PRIMARY_VOLUME_DESC 1
#define UDF_TAGID_ANCHOR_VOLUME_DESC_PTR 2
#define UDF_TAGID_IMPL_USE_VOLUME_DESC 4
#define UDF_TAGID_PARTITION_DESC 5
#define UDF_TAGID_LOGICAL_VOLUME_DESC 6
#define UDF_TAGID_UNALLOCATED_SPACE_DESC 7
#define UDF_TAGID_TERMINATING_DESC 8
#define UDF_TAGID_LOGICAL_VOLUME_INTEGRITY_DESC 9
#define UDF_TAGID_FILE_SET_DESC 256
#define UDF_TAGID_FILE_IDENT_DESC 257
#define UDF_TAGID_FILE_ENTRY 261
#define UDF_TAGID_EXT_ATTRIBUTE_HEADER_DESC 262
#define UDF_TAGID_EXT_FILE_ENTRY 266
typedef struct udf_extent_ad_ { /* ECMA-167 3/7.1 */
/*0*/ udf_Uint32 extent_length;
/*4*/ udf_Uint32 extent_location;
/*8*/
} udf_extent_ad;
typedef struct udf_charspec_ { /* ECMA-167 1/7.2.1 */
/* 0*/ udf_Uint8 character_set_type;
/* 1*/ udf_byte character_set_info[63];
/*64*/
} udf_charspec;
typedef struct udf_EntityID_ { /* ECMA-167 1/7.4 */
/* 0*/ udf_Uint8 flags;
/* 1*/ udf_byte ident[23];
/*24*/ udf_byte ident_suffix[8];
/*32*/
} udf_EntityID;
#define UDF_ENTITYID_FLAG_PROTECTED 2 /* ECMA-167 1/7.4.1 */
typedef struct udf_lb_addr_ { /* ECMA-167 4/7.1 */
/*0*/ udf_Uint32 logical_block_number;
/*4*/ udf_Uint16 partition_reference_number;
/*6*/
} udf_lb_addr;
typedef struct udf_short_ad_ { /* ECMA-167 4/14.14.1 */
/*0*/ udf_Uint32 extent_length;
/*4*/ udf_Uint32 extent_position;
/*8*/
} udf_short_ad;
typedef struct udf_long_ad_impl_use_field_ { /* UDF 2.01 2.3.4.3 */
/*0*/ udf_Uint16 flags;
/*2*/ udf_Uint32 unique_id;
/*6*/
} udf_long_ad_impl_use_field;
typedef struct udf_long_ad_ { /* ECMA-167 4/14.14.2 */
/* 0*/ udf_Uint32 extent_length;
/* 4*/ udf_lb_addr extent_location;
/*10*/ udf_long_ad_impl_use_field impl_use;
/*16*/
} udf_long_ad;
typedef struct udf_timestamp_ { /* TR/71 1.5.4 */
/* 0*/ udf_Uint16 type_and_time_zone;
/* 2*/ udf_Uint16 year;
/* 4*/ udf_Uint8 month;
/* 5*/ udf_Uint8 day;
/* 6*/ udf_Uint8 hour;
/* 7*/ udf_Uint8 minute;
/* 8*/ udf_Uint8 second;
/* 9*/ udf_Uint8 centiseconds;
/*10*/ udf_Uint8 hundreds_of_microseconds;
/*11*/ udf_Uint8 microseconds;
/*12*/
} udf_timestamp;
typedef struct udf_volume_recognition_desc_ { /* TR/71 2.4.{1,2,3} */
udf_Uint8 structure_type;
udf_byte standard_identifier[5];
udf_Uint8 structure_version;
udf_zerobyte structure_data[2041];
} udf_volume_recognition_desc;
typedef struct udf_anchor_volume_desc_ptr_ { /* TR/71 2.5.1 */
/* 0*/ udf_tag desc_tag;
/* 16*/ udf_extent_ad main_volume_desc_seq_extent;
/* 24*/ udf_extent_ad reserve_volume_desc_seq_extent;
/* 32*/ udf_zerobyte reserved[480];
/*512*/
} udf_anchor_volume_desc_ptr;
typedef struct udf_primary_volume_desc_ { /* TR/71 2.6.1 */
/* 0*/ udf_tag desc_tag;
/* 16*/ udf_Uint32 volume_desc_seq_number;
/* 20*/ udf_Uint32 primary_volume_desc_number;
/* 24*/ udf_dstring volume_ident[32];
/* 56*/ udf_Uint16 volume_seq_number;
/* 58*/ udf_Uint16 maximum_volume_seq_number;
/* 60*/ udf_Uint16 interchange_level;
/* 62*/ udf_Uint16 maximum_interchange_level;
/* 64*/ udf_Uint32 character_set_list;
/* 68*/ udf_Uint32 maximum_character_set_list;
/* 72*/ udf_dstring volume_set_ident[128];
/*200*/ udf_charspec desc_character_set;
/*264*/ udf_charspec explanatory_character_set;
/*328*/ udf_extent_ad volume_abstract;
/*336*/ udf_extent_ad volume_copyright_notice;
/*344*/ udf_EntityID application_ident;
/*376*/ udf_timestamp recording_date_and_time;
/*388*/ udf_EntityID impl_ident;
/*420*/ udf_byte impl_use[64];
/*484*/ udf_Uint32 predecessor_volume_desc_seq_location;
/*488*/ udf_Uint16 flags;
/*490*/ udf_zerobyte reserved[22];
/*512*/
} udf_primary_volume_desc;
typedef struct udf_impl_use_volume_desc_impl_use_field_ { /* TR/71 2.6.3 */
/* 0*/ udf_charspec lvi_charset;
/* 64*/ udf_dstring logical_volume_ident[128];
/*192*/ udf_dstring lv_info1[36];
/*228*/ udf_dstring lv_info2[36];
/*264*/ udf_dstring lv_info3[36];
/*300*/ udf_EntityID impl_id;
/*332*/ udf_byte impl_use[128];
/*460*/
} udf_impl_use_volume_desc_impl_use_field;
typedef struct udf_impl_use_volume_desc_ { /* TR/71 2.6.2 */
/* 0*/ udf_tag desc_tag;
/* 16*/ udf_Uint32 volume_desc_seq_number;
/* 20*/ udf_EntityID impl_ident;
/* 52*/ udf_impl_use_volume_desc_impl_use_field impl_use;
/*512*/
} udf_impl_use_volume_desc;
typedef struct udf_partition_desc_ { /* TR/71 2.6.4 */
/* 0*/ udf_tag desc_tag;
/* 16*/ udf_Uint32 volume_desc_seq_number;
/* 20*/ udf_Uint16 partition_flags;
/* 22*/ udf_Uint16 partition_number;
/* 24*/ udf_EntityID partition_contents;
/* 56*/ udf_byte partition_contents_use[128];
/*184*/ udf_Uint32 access_type;
/*188*/ udf_Uint32 partition_starting_location;
/*192*/ udf_Uint32 partition_length;
/*196*/ udf_EntityID impl_ident;
/*228*/ udf_byte impl_use[128];
/*356*/ udf_zerobyte reserved[156];
/*512*/
} udf_partition_desc;
#define UDF_PARTITION_FLAG_ALLOCATED 1 /* ECMA-167 3/10.5.3 */
#define UDF_ACCESSTYPE_READONLY 1 /* ECMA-167 3/10.5.7 */
typedef struct udf_type_1_partition_map_ { /* TR/71 2.6.8 */
/*0*/ udf_Uint8 partition_map_type;
/*1*/ udf_Uint8 partition_map_length;
/*2*/ udf_Uint16 volume_seq_number;
/*4*/ udf_Uint16 partition_number;
/*6*/
} udf_type_1_partition_map;
#define UDF_PARTITION_MAP_TYPE_1 1
typedef struct udf_logical_volume_desc_ { /* TR/71 2.6.7 */
/* 0*/ udf_tag desc_tag;
/* 16*/ udf_Uint32 volume_desc_seq_number;
/* 20*/ udf_charspec desc_character_set;
/* 84*/ udf_dstring logical_volume_ident[128];
/*212*/ udf_Uint32 logical_block_size;
/*216*/ udf_EntityID domain_ident;
/*248*/ udf_long_ad logical_volume_contents_use;
/*264*/ udf_Uint32 map_table_length;
/*268*/ udf_Uint32 number_of_partition_maps;
/*272*/ udf_EntityID impl_ident;
/*304*/ udf_byte impl_use[128];
/*432*/ udf_extent_ad integrity_seq_extent;
/*440*/ udf_type_1_partition_map partition_map[1];
/*446*/
} udf_logical_volume_desc;
typedef struct udf_unallocated_space_desc_ { /* TR/71 2.6.9 */
/* 0*/ udf_tag desc_tag;
/*16*/ udf_Uint32 volume_desc_seq_number;
/*20*/ udf_Uint32 number_of_allocation_descs;
/*24*/ /*udf_extent_ad allocation_descs[0];*/
} udf_unallocated_space_desc;
typedef struct udf_terminating_desc_ { /* TR/71 2.6.10 */
/* 0*/ udf_tag desc_tag;
/* 16*/ udf_zerobyte reserved[496];
/*512*/
} udf_terminating_desc;
typedef struct udf_logical_volume_integrity_desc_impl_use_field_ { /* TR/71 2.7.3 */
/* 0*/ udf_EntityID impl_id;
/*32*/ udf_Uint32 number_of_files;
/*36*/ udf_Uint32 number_of_directories;
/*40*/ udf_Uint16 minimum_udf_read_revision;
/*42*/ udf_Uint16 minimum_udf_write_revision;
/*44*/ udf_Uint16 maximum_udf_write_revision;
/*46*/ /*udf_byte impl_use[0];*/
} udf_logical_volume_integrity_desc_impl_use_field;
typedef struct udf_logical_volume_integrity_desc_contents_use_field_ { /* TR/71 2.7.2 */
udf_Uint64 unique_id;
udf_zerobyte reserved[24];
} udf_logical_volume_integrity_desc_contents_use_field;
typedef struct udf_logical_volume_integrity_desc_ { /* TR/71 2.7.1 */
/* 0*/ udf_tag desc_tag;
/*16*/ udf_timestamp recording_date;
/*28*/ udf_Uint32 integrity_type;
/*32*/ udf_extent_ad next_integrity_extent;
/*40*/ udf_logical_volume_integrity_desc_contents_use_field logical_volume_contents_use;
/*72*/ udf_Uint32 number_of_partitions;
/*76*/ udf_Uint32 length_of_impl_use;
/*80*/ udf_Uint32 free_space_table;
/*84*/ udf_Uint32 size_table;
/*88*/ udf_logical_volume_integrity_desc_impl_use_field impl_use;
} udf_logical_volume_integrity_desc;
#define UDF_INTEGRITY_TYPE_CLOSE 1 /* ECMA-167 3/10.10.3 */
typedef struct udf_file_set_desc_ { /* TR/71 3.3.1 */
/* 0*/ udf_tag desc_tag;
/*16*/ udf_timestamp recording_date_and_time;
/*28*/ udf_Uint16 interchange_level;
/*30*/ udf_Uint16 maximum_interchange_level;
/*32*/ udf_Uint32 character_set_list;
/*36*/ udf_Uint32 maximum_character_set_list;
/*40*/ udf_Uint32 file_set_number;
/*44*/ udf_Uint32 file_set_desc_number;
/*48*/ udf_charspec logical_volume_ident_character_set;
/*112*/ udf_dstring logical_volume_ident[128];
/*240*/ udf_charspec file_set_character_set;
/*304*/ udf_dstring file_set_ident[32];
/*336*/ udf_dstring copyright_file_ident[32];
/*368*/ udf_dstring abstract_file_ident[32];
/*400*/ udf_long_ad root_directory_icb;
/*416*/ udf_EntityID domain_ident;
/*448*/ udf_long_ad next_extent;
/*464*/ udf_zerobyte reserved[48];
/*512*/
} udf_file_set_desc;
typedef struct udf_file_ident_desc_ { /* TR/71 3.4.1 */
/* 0*/ udf_tag desc_tag;
/*16*/ udf_Uint16 file_version_number;
/*18*/ udf_Uint8 file_characteristics;
/*19*/ udf_Uint8 length_of_file_ident;
/*20*/ udf_long_ad icb;
/*36*/ udf_Uint16 length_of_impl_use;
/*38*/ /*udf_EntityID impl_use;*/
/*38*/ udf_dchar file_ident[1];
/*udf_zerobyte padding[0/1/2/3];*/
} udf_file_ident_desc;
#define UDF_FILE_CHARACTERISTIC_HIDDEN 1 /* ECMA-167 4/14.4.3 */
#define UDF_FILE_CHARACTERISTIC_DIRECTORY 2
#define UDF_FILE_CHARACTERISTIC_DELETED 4
#define UDF_FILE_CHARACTERISTIC_PARENT 8
typedef struct udf_icbtag_ { /* TR/71 3.5.2 */
/* 0*/ udf_Uint32 prior_recorded_number_of_direct_entries;
/* 4*/ udf_Uint16 strategy_type;
/* 6*/ udf_Uint16 strategy_parameter;
/* 8*/ udf_Uint16 maximum_number_of_entries;
/*10*/ udf_zerobyte reserved;
/*11*/ udf_Uint8 file_type;
/*12*/ udf_lb_addr parent_icb_location;
/*18*/ udf_Uint16 flags;
/*20*/
} udf_icbtag;
/*
* File types
*/
#define UDF_ICBTAG_FILETYPE_UNSPEC 0
#define UDF_ICBTAG_FILETYPE_UNALL_SPACE 1
#define UDF_ICBTAG_FILETYPE_PART_INTEG 2
#define UDF_ICBTAG_FILETYPE_INDIRECT 3
#define UDF_ICBTAG_FILETYPE_DIRECTORY 4 /* ECMA-167 4/14.6.6 */
#define UDF_ICBTAG_FILETYPE_BYTESEQ 5 /* FILE */
#define UDF_ICBTAG_FILETYPE_BLOCK_DEV 6
#define UDF_ICBTAG_FILETYPE_CHAR_DEV 7
#define UDF_ICBTAG_FILETYPE_EA 8 /* Extended attributes */
#define UDF_ICBTAG_FILETYPE_FIFO 9
#define UDF_ICBTAG_FILETYPE_C_ISSOCK 10
#define UDF_ICBTAG_FILETYPE_T_ENTRY 11 /* Terminal entry */
#define UDF_ICBTAG_FILETYPE_SYMLINK 12
#define UDF_ICBTAG_FILETYPE_STREAMDIR 13
/* 14..247 Reserved */
/* 248..255 Subject to agreement */
#define UDF_ICBTAG_FLAG_MASK_AD_TYPE 7 /* TR/71 3.5.3 */
#define UDF_ICBTAG_FLAG_SHORT_AD 0
#define UDF_ICBTAG_FLAG_DIRECTORY_SORT 8
#define UDF_ICBTAG_FLAG_NONRELOCATABLE 16
#define UDF_ICBTAG_FLAG_ARCHIVE 32
#define UDF_ICBTAG_FLAG_SETUID 64
#define UDF_ICBTAG_FLAG_SETGID 128
#define UDF_ICBTAG_FLAG_STICKY 256
#define UDF_ICBTAG_FLAG_CONTIGUOUS 512
#define UDF_ICBTAG_FLAG_SYSTEM 1024
#define UDF_ICBTAG_FLAG_TRANSFORMED 2048
#define UDF_ICBTAG_FLAG_MULTI_VERSIONS 4096
#define UDF_ICBTAG_FLAG_STREAM 8192
typedef struct udf_ext_attribute_header_desc_ { /* TR/71 3.6.1 */
/* 0*/ udf_tag desc_tag;
/*16*/ udf_Uint32 impl_attributes_location;
/*20*/ udf_Uint32 application_attributes_location;
/*24*/
} udf_ext_attribute_header_desc;
typedef struct udf_ext_attribute_common_ { /* TR/71 3.6.{2,3} */
/* 0*/ udf_Uint32 attribute_type;
/* 4*/ udf_Uint8 attribute_subtype;
/* 5*/ udf_zerobyte reserved[3];
/* 8*/ udf_Uint32 attribute_length;
/*12*/ udf_Uint32 impl_use_length;
/*16*/ udf_EntityID impl_ident;
/*48*/ udf_Uint16 header_checksum;
/*50*/
} udf_ext_attribute_common;
typedef struct udf_ext_attribute_dev_spec_ { /* ECMA-167 4/14.10.7 */
/* 0*/ udf_Uint32 attribute_type; /* = 12 */
/* 4*/ udf_Uint8 attribute_subtype; /* = 1 */
/* 5*/ udf_zerobyte reserved[3];
/* 8*/ udf_Uint32 attribute_length; /* = 24 */
/*12*/ udf_Uint32 impl_use_length; /* = 0 */
/*16*/ udf_Uint32 dev_major; /* major(st_rdev) */
/*20*/ udf_Uint32 dev_minor; /* minor(st_rdev) */
#ifdef __needed__
/*24*/ udf_Uint8 impl_use[0];
#endif
/*24*/
} udf_ext_attribute_dev_spec;
typedef struct udf_ext_attribute_free_ea_space_ { /* TR/71 3.6.{2,3} */
/* 0*/ udf_Uint32 attribute_type; /* = 2048 */
/* 4*/ udf_Uint8 attribute_subtype; /* = 1 */
/* 5*/ udf_zerobyte reserved[3];
/* 8*/ udf_Uint32 attribute_length; /* = 52 */
/*12*/ udf_Uint32 impl_use_length; /* = 4 */
/*16*/ udf_EntityID impl_ident; /* "*UDF FreeEASpace" */
/*48*/ udf_Uint16 header_checksum;
/*50*/ udf_Uint16 free_ea_space; /* = 0 */
/*52*/
} udf_ext_attribute_free_ea_space;
typedef struct udf_ext_attribute_dvd_cgms_info_ { /* TR/71 3.6.{2,4} */
/* 0*/ udf_Uint32 attribute_type; /* = 2048 */
/* 4*/ udf_Uint8 attribute_subtype; /* = 1 */
/* 5*/ udf_zerobyte reserved[3];
/* 8*/ udf_Uint32 attribute_length; /* = 56 */
/*12*/ udf_Uint32 impl_use_length; /* = 8 */
/*16*/ udf_EntityID impl_ident; /* "*UDF DVD CGMS Info" */
/*48*/ udf_Uint16 header_checksum;
/*50*/ udf_byte cgms_info;
/*51*/ udf_Uint8 data_structure_type;
/*52*/ udf_byte protection_system_info[4];
/*56*/
} udf_ext_attribute_dvd_cgms_info;
#define UDF_CGMSINFO_NO_COPIES 48 /* TR/71 3.6.4 */
#define UDF_CGMSINFO_ONE_GENERATION 32
#define UDF_CGMSINFO_UNLIMITED_COPIES 0
#define UDF_CGMSINFO_FLAG_COPYRIGHTED_MATERIAL 128
/* start mac finder info defs */
typedef struct udf_point_ {
udf_Uint16 v;
udf_Uint16 h;
} udf_point;
typedef struct udf_rect_ {
udf_Uint16 top;
udf_Uint16 left;
udf_Uint16 bottom;
udf_Uint16 right;
} udf_rect;
typedef struct udf_dinfo_ {
udf_rect frrect;
udf_Uint16 frflags;
udf_point frlocation;
udf_Uint16 frview;
} udf_dinfo;
typedef struct udf_dxinfo_ {
udf_point frscroll;
udf_Uint32 fropenchain;
udf_Uint8 frscript;
udf_Uint8 frxflags;
udf_Uint16 frcomment;
udf_Uint32 frputaway;
} udf_dxinfo;
typedef struct udf_finfo_ {
udf_Uint32 fdtype;
udf_Uint32 fdcreator;
udf_Uint16 fdflags;
udf_point fdlocation;
udf_Uint16 fdfldr;
} udf_finfo;
typedef struct udf_fxinfo_ {
udf_Uint16 fdiconid;
udf_Uint8 unused[6];
udf_Uint8 fdscript;
udf_Uint8 fdxflags;
udf_Uint16 fdcomment;
udf_Uint32 fdputaway;
} udf_fxinfo;
typedef struct udf_mac_file_finderinfo_ {
/* 0*/ udf_Uint16 headerchecksum;
/* 2*/ udf_Uint16 reserved;
/* 4*/ udf_Uint32 parentdirid;
/* 8*/ udf_finfo fileinfo;
/*24*/ udf_fxinfo fileextinfo;
/*40*/ udf_Uint32 resourcedatalength;
/*44*/ udf_Uint32 resourcealloclength;
/*48*/
} udf_mac_file_finderinfo;
typedef struct udf_mac_dir_volumeinfo_ {
/* 0*/ udf_Uint16 headerchecksum;
/* 2*/ udf_timestamp moddate;
/* 14*/ udf_timestamp budate;
/* 26*/ udf_Uint32 volfinderinfo[8]; /* ?? */
/* 58*/ udf_Uint8 unknown[2]; /* ?? */
/* 60 */
} udf_mac_dir_volumeinfo;
typedef struct udf_mac_dir_finderinfo_ {
/* 0*/ udf_Uint16 headerchecksum;
/* 2*/ udf_Uint16 reserved;
/* 4*/ udf_Uint32 parentdirid;
/* 8*/ udf_dinfo dirinfo;
/*24*/ udf_dxinfo dirextinfo;
/*40*/
} udf_mac_dir_finderinfo;
typedef struct udf_ext_attribute_file_macfinderinfo_ {
/* 0*/ udf_Uint32 attribute_type; /* = 2048 */
/* 4*/ udf_Uint8 attribute_subtype; /* = 1 */
/* 5*/ udf_zerobyte reserved[3];
/* 8*/ udf_Uint32 attribute_length; /* = 48 + 48 */
/*12*/ udf_Uint32 impl_use_length; /* = 48 */
/*16*/ udf_EntityID impl_ident; /* "*UDF Mac FinderInfo" */
/*48*/ udf_mac_file_finderinfo finderinfo;
/*96*/
} udf_ext_attribute_file_macfinderinfo;
typedef struct udf_ext_attribute_dir_macvolinfo_ {
/* 0*/ udf_Uint32 attribute_type; /* = 2048 */
/* 4*/ udf_Uint8 attribute_subtype; /* = 1 */
/* 5*/ udf_zerobyte reserved[3];
/* 8*/ udf_Uint32 attribute_length; /* = 48 + 60 */
/*12*/ udf_Uint32 impl_use_length; /* = 60 */
/*16*/ udf_EntityID impl_ident; /* "*UDF Mac VolumeInfo" */
/*48*/ udf_mac_dir_volumeinfo volumeinfo;
/*96*/
} udf_ext_attribute_dir_macvolinfo;
typedef struct udf_ext_attribute_dir_macfinderinfo_ {
/* 0*/ udf_Uint32 attribute_type; /* = 2048 */
/* 4*/ udf_Uint8 attribute_subtype; /* = 1 */
/* 5*/ udf_zerobyte reserved[3];
/* 8*/ udf_Uint32 attribute_length; /* = 48 + 40 */
/*12*/ udf_Uint32 impl_use_length; /* = 40 */
/*16*/ udf_EntityID impl_ident; /* "*UDF Mac FinderInfo" */
/*48*/ udf_mac_dir_finderinfo finderinfo;
/*96*/
} udf_ext_attribute_dir_macfinderinfo;
#define EXTATTR_IMP_USE 2048
/* end mac finder info defs */
typedef struct udf_macvolume_filed_entry_ { /* TR/71 3.5.1 */
/* 0*/ udf_tag desc_tag;
/*16*/ udf_icbtag icb_tag;
/*36*/ udf_Uint32 uid;
/*40*/ udf_Uint32 gid;
/*44*/ udf_Uint32 permissions;
/*48*/ udf_Uint16 file_link_count;
/*50*/ udf_Uint8 record_format;
/*51*/ udf_Uint8 record_display_attributes;
/*52*/ udf_Uint32 record_length;
/*56*/ udf_Uint64 info_length;
/*64*/ udf_Uint64 logical_blocks_recorded;
/*72*/ udf_timestamp access_time;
/*84*/ udf_timestamp modification_time;
/*96*/ udf_timestamp attribute_time;
/*108*/ udf_Uint32 checkpoint;
/*112*/ udf_long_ad ext_attribute_icb;
/*128*/ udf_EntityID impl_ident;
/*160*/ udf_Uint64 unique_id;
/*168*/ udf_Uint32 length_of_ext_attributes;
/*172*/ udf_Uint32 length_of_allocation_descs;
udf_ext_attribute_header_desc ext_attribute_header;
udf_ext_attribute_free_ea_space ext_attribute_free_ea_space;
udf_ext_attribute_dvd_cgms_info ext_attribute_dvd_cgms_info;
udf_ext_attribute_dir_macvolinfo ext_attribute_macvolumeinfo;
udf_ext_attribute_dir_macfinderinfo ext_attribute_macfinderinfo;
udf_short_ad allocation_desc;
} udf_macvolume_filed_entry;
typedef struct udf_file_entry_ { /* TR/71 3.5.1 */
/* 0*/ udf_tag desc_tag;
/*16*/ udf_icbtag icb_tag;
/*36*/ udf_Uint32 uid;
/*40*/ udf_Uint32 gid;
/*44*/ udf_Uint32 permissions;
/*48*/ udf_Uint16 file_link_count;
/*50*/ udf_Uint8 record_format;
/*51*/ udf_Uint8 record_display_attributes;
/*52*/ udf_Uint32 record_length;
/*56*/ udf_Uint64 info_length;
/*64*/ udf_Uint64 logical_blocks_recorded;
/*72*/ udf_timestamp access_time;
/*84*/ udf_timestamp modification_time;
/*96*/ udf_timestamp attribute_time;
/*108*/ udf_Uint32 checkpoint;
/*112*/ udf_long_ad ext_attribute_icb;
/*128*/ udf_EntityID impl_ident;
/*160*/ udf_Uint64 unique_id;
/*168*/ udf_Uint32 length_of_ext_attributes;
/*172*/ udf_Uint32 length_of_allocation_descs;
#if 0
/*176*/ udf_ext_attribute_header_desc ext_attribute_header;
/*200*/ udf_ext_attribute_free_ea_space ext_attribute_free_ea_space;
/*252*/ udf_ext_attribute_dvd_cgms_info ext_attribute_dvd_cgms_info;
/*308*/ udf_short_ad allocation_desc;
/*316*/
#else
udf_ext_attribute_header_desc ext_attribute_header;
udf_ext_attribute_dev_spec ext_attribute_dev_spec;
udf_ext_attribute_free_ea_space ext_attribute_free_ea_space;
udf_ext_attribute_dvd_cgms_info ext_attribute_dvd_cgms_info;
udf_ext_attribute_file_macfinderinfo ext_attribute_macfinderinfo;
udf_short_ad allocation_desc;
#endif
} udf_file_entry;
typedef struct udf_attr_file_entry_ { /* TR/71 3.5.1 */
/* 0*/ udf_tag desc_tag;
/*16*/ udf_icbtag icb_tag;
/*36*/ udf_Uint32 uid;
/*40*/ udf_Uint32 gid;
/*44*/ udf_Uint32 permissions;
/*48*/ udf_Uint16 file_link_count;
/*50*/ udf_Uint8 record_format;
/*51*/ udf_Uint8 record_display_attributes;
/*52*/ udf_Uint32 record_length;
/*56*/ udf_Uint64 info_length;
/*64*/ udf_Uint64 logical_blocks_recorded;
/*72*/ udf_timestamp access_time;
/*84*/ udf_timestamp modification_time;
/*96*/ udf_timestamp attribute_time;
/*108*/ udf_Uint32 checkpoint;
/*112*/ udf_long_ad ext_attribute_icb;
/*128*/ udf_EntityID impl_ident;
/*160*/ udf_Uint64 unique_id;
/*168*/ udf_Uint32 length_of_ext_attributes;
/*172*/ udf_Uint32 length_of_allocation_descs;
#if 0
/*176*/ udf_ext_attribute_header_desc ext_attribute_header;
/*200*/ udf_ext_attribute_free_ea_space ext_attribute_free_ea_space;
/*252*/ udf_ext_attribute_dvd_cgms_info ext_attribute_dvd_cgms_info;
/*308*/ udf_short_ad allocation_desc;
/*316*/
#else
udf_short_ad allocation_desc;
#endif
} udf_attr_file_entry;
typedef struct udf_filed_entry_ { /* TR/71 3.5.1 */
/* 0*/ udf_tag desc_tag;
/*16*/ udf_icbtag icb_tag;
/*36*/ udf_Uint32 uid;
/*40*/ udf_Uint32 gid;
/*44*/ udf_Uint32 permissions;
/*48*/ udf_Uint16 file_link_count;
/*50*/ udf_Uint8 record_format;
/*51*/ udf_Uint8 record_display_attributes;
/*52*/ udf_Uint32 record_length;
/*56*/ udf_Uint64 info_length;
/*64*/ udf_Uint64 logical_blocks_recorded;
/*72*/ udf_timestamp access_time;
/*84*/ udf_timestamp modification_time;
/*96*/ udf_timestamp attribute_time;
/*108*/ udf_Uint32 checkpoint;
/*112*/ udf_long_ad ext_attribute_icb;
/*128*/ udf_EntityID impl_ident;
/*160*/ udf_Uint64 unique_id;
/*168*/ udf_Uint32 length_of_ext_attributes;
/*172*/ udf_Uint32 length_of_allocation_descs;
#if 0
/*176*/ udf_ext_attribute_header_desc ext_attribute_header;
/*200*/ udf_ext_attribute_free_ea_space ext_attribute_free_ea_space;
/*252*/ udf_ext_attribute_dvd_cgms_info ext_attribute_dvd_cgms_info;
/*308*/ udf_short_ad allocation_desc;
/*316*/
#else
udf_ext_attribute_header_desc ext_attribute_header;
udf_ext_attribute_free_ea_space ext_attribute_free_ea_space;
udf_ext_attribute_dvd_cgms_info ext_attribute_dvd_cgms_info;
udf_ext_attribute_dir_macfinderinfo ext_attribute_macfinderinfo;
udf_short_ad allocation_desc;
#endif
} udf_filed_entry;
typedef struct udf_ext_file_entry_ { /* ECMA 167/3 4/50 */
/* 0*/ udf_tag desc_tag; /* 266 */
/*16*/ udf_icbtag icb_tag;
/*36*/ udf_Uint32 uid;
/*40*/ udf_Uint32 gid;
/*44*/ udf_Uint32 permissions;
/*48*/ udf_Uint16 file_link_count;
/*50*/ udf_Uint8 record_format;
/*51*/ udf_Uint8 record_display_attributes;
/*52*/ udf_Uint32 record_length;
/*56*/ udf_Uint64 info_length;
/* */ udf_Uint64 object_size;
/*64+8*/ udf_Uint64 logical_blocks_recorded;
/*72*/ udf_timestamp access_time;
/*84*/ udf_timestamp modification_time;
/* */ udf_timestamp creation_time;
/*96+12*/ udf_timestamp attribute_time;
/*108*/ udf_Uint32 checkpoint;
/* */ udf_Uint32 reserved;
/*112+4*/ udf_long_ad ext_attribute_icb;
/* */ udf_long_ad stream_dir_icb;
/*128+16*/ udf_EntityID impl_ident;
/*160*/ udf_Uint64 unique_id;
/*168*/ udf_Uint32 length_of_ext_attributes;
/*172*/ udf_Uint32 length_of_allocation_descs;
udf_short_ad allocation_desc;
} udf_ext_file_entry;
/*
* (U,G,O) = (owner, group, other)
* (X,R) = (execute, read)
*
* There are Write, Change Attribute and Delete permissions also,
* but it is not permitted to set them on DVD Read-Only media.
*/
#define UDF_FILEENTRY_PERMISSION_OX 1 /* TR/71 3.5.4 */
#define UDF_FILEENTRY_PERMISSION_OW 2
#define UDF_FILEENTRY_PERMISSION_OR 4
#define UDF_FILEENTRY_PERMISSION_GX 32
#define UDF_FILEENTRY_PERMISSION_GW 64
#define UDF_FILEENTRY_PERMISSION_GR 128
#define UDF_FILEENTRY_PERMISSION_UX 1024
#define UDF_FILEENTRY_PERMISSION_UW 2048
#define UDF_FILEENTRY_PERMISSION_UR 4096
#endif /* _UDF_FS_H */