745 lines
23 KiB
C
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 */
|