diff options
Diffstat (limited to 'genisoimage/udf_fs.h')
-rw-r--r-- | genisoimage/udf_fs.h | 462 |
1 files changed, 462 insertions, 0 deletions
diff --git a/genisoimage/udf_fs.h b/genisoimage/udf_fs.h new file mode 100644 index 0000000..850a3cc --- /dev/null +++ b/genisoimage/udf_fs.h @@ -0,0 +1,462 @@ +/* + * This file has been modified for the cdrkit suite. + * + * The behaviour and appearence of the program code below can differ to a major + * extent from the version distributed by the original author(s). + * + * For details, see Changelog file distributed with the cdrkit package. If you + * received this file from another source then ask the distributing person for + * a log of modifications. + * + */ + +/* @(#)udf_fs.h 1.2 04/03/01 Copyright 2001-2004 J. Schilling */ +/* + * udf_fs.h - UDF structure definitions for genisoimage + * + * Written by Ben Rudiak-Gould (2001). + * + * Copyright 2001-2004 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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 + +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; + +#define UDF_ICBTAG_FILETYPE_DIRECTORY 4 /* ECMA-167 4/14.6.6 */ +#define UDF_ICBTAG_FILETYPE_BYTESEQ 5 + +#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 + +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_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 + +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 +/*176*/ udf_short_ad allocation_desc; +/*184*/ +#endif +} udf_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_OR 4 +#define UDF_FILEENTRY_PERMISSION_GX 32 +#define UDF_FILEENTRY_PERMISSION_GR 128 +#define UDF_FILEENTRY_PERMISSION_UX 1024 +#define UDF_FILEENTRY_PERMISSION_UR 4096 + + +#endif /* _UDF_FS_H */ |