File: udf_fs.h

package info (click to toggle)
cdrkit 9%3A1.1.11-3
  • links: PTS
  • area: main
  • in suites: buster, jessie, jessie-kfreebsd, stretch
  • size: 7,464 kB
  • sloc: ansic: 107,182; perl: 968; sh: 481; makefile: 229; sed: 4
file content (462 lines) | stat: -rw-r--r-- 14,925 bytes parent folder | download | duplicates (8)
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 */