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 */
|