1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 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 */
|