1 #if !defined(_LINUX_UDF_167_H)
2 #define _LINUX_UDF_167_H
3 /*
4 * udf_167.h
5 *
6 * DESCRIPTION
7 * Definitions from the ECMA 167 standard.
8 * http://www.ecma.ch/
9 *
10 * These abbreviations are used to keep the symbols short:
11 * Alloc Allocation
12 * App Application
13 * Attr Attribute
14 * Char Characters
15 * Desc Descriptor
16 * Descs Descriptors
17 * Ext Extent
18 * Ident Identifier
19 * Imp Implementation
20 * Lvl Level
21 * Max Maximum
22 * Num Number
23 * Ptr Pointer
24 * Seq Sequence
25 * Std Standard
26 * Struct Structure
27 * Vol Volume
28 * The symbols are otherwise identical to the standard, and the
29 * sections of the standard to refer to are indicated.
30 *
31 * CONTACTS
32 * E-mail regarding any portion of the Linux UDF file system should be
33 * directed to the development team mailing list (run by majordomo):
34 * linux_udf@hootie.lvld.hp.com
35 *
36 * COPYRIGHT
37 * This file is distributed under the terms of the GNU General Public
38 * License (GPL). Copies of the GPL can be obtained from:
39 * ftp://prep.ai.mit.edu/pub/gnu/GPL
40 * Each contributing author retains all rights to their own work.
41 *
42 * HISTORY
43 * July 12, 1997 - Andrew E. Mileski
44 * Adapted from the ECMA-167 standard.
45 *
46 * 10/2/98 dgb Adaptation
47 * 10/4/98 Changes by HJA Sandkuyl
48 * 10/7/98 Changed FILE_EXISTENCE to FILE_HIDDEN, per UDF 2.0 spec
49 * 11/26/98 Modifed some entries for UDF 1.5/2.0
50 * 11/26/98 bf Fixed typos, non-linux types, more structures
51 * 12/5/98 dgb Adjusted structure and content of include files.
52 */
53
54 #ifdef __KERNEL__
55 #include <linux/types.h>
56 #define Uint8 __u8
57 #define Sint8 __s8
58 #define Uint16 __u16
59 #define Sint16 __s16
60 #define Uint32 __u32
61 #define Sint32 __s32
62 #define Uint64 __u64
63 #define Sint64 __s64
64 typedef Uint8 dstring;
65 #else
66 #define Uint8 unsigned char
67 #define Sint8 char
68 #define Uint16 unsigned short
69 #define Sint16 short
70 #define Uint32 unsigned int
71 #define Sint32 int
72 #define Uint64 unsigned long long
73 #define Sint64 long long
74 typedef Uint8 dstring;
75 #endif
76
77 /* make sure all structures are packed! */
78 #pragma pack(1)
79
80 /* CS0 Charspec (ECMA 167 1/7.2.1) */
81 typedef struct {
82 Uint8 charSetType;
83 Uint8 charSetInfo[63];
84 } charspec;
85
86 /* Timestamp (ECMA 167 1/7.3) */
87 typedef struct {
88 Uint16 typeAndTimezone;
89 Uint16 year;
90 Uint8 month;
91 Uint8 day;
92 Uint8 hour;
93 Uint8 minute;
94 Uint8 second;
95 Uint8 centiseconds;
96 Uint8 hundredsOfMicroseconds;
97 Uint8 microseconds;
98 } timestamp;
99
100 /* Timestamp types (ECMA 167 1/7.3.1) */
101 #define TIMESTAMP_TYPE_CUT 0x0000U
102 #define TIMESTAMP_TYPE_LOCAL 0x0001U
103 #define TIMESTAMP_TYPE_AGREEMENT 0x0002U
104
105 /* Entity Identifier (ECMA 167 1/7.4) */
106 typedef struct {
107 Uint8 flags;
108 Uint8 ident[23];
109 Uint8 identSuffix[8];
110 } EntityID;
111 #define regid EntityID
112
113 /* Entity identifier flags (ECMA 167 1/7.4.1) */
114 #define ENTITYID_FLAGS_DIRTY 0x01U
115 #define ENTITYID_FLAGS_PROTECTED 0x02U
116
117 /* Volume Structure Descriptor (ECMA 167 2/9.1) */
118 #define STD_ID_LEN 5
119 struct VolStructDesc {
120 Uint8 structType;
121 Uint8 stdIdent[STD_ID_LEN];
122 Uint8 structVersion;
123 Uint8 structData[2041];
124 };
125
126 /* Std structure identifiers (ECMA 167 2/9.1.2) */
127 #define STD_ID_BEA01 "BEA01"
128 #define STD_ID_BOOT2 "BOOT2"
129 #define STD_ID_CD001 "CD001"
130 #define STD_ID_CDW02 "CDW02"
131 #define STD_ID_NSR02 "NSR02"
132 #define STD_ID_NSR03 "NSR03"
133 #define STD_ID_TEA01 "TEA01"
134
135 /* Beginning Extended Area Descriptor (ECMA 167 2/9.2) */
136 struct BeginningExtendedAreaDesc {
137 Uint8 structType;
138 Uint8 stdIdent[STD_ID_LEN];
139 Uint8 structVersion;
140 Uint8 structData[2041];
141 };
142
143 /* Terminating Extended Area Descriptor (ECMA 167 2/9.3) */
144 struct TerminatingExtendedAreaDesc {
145 Uint8 structType;
146 Uint8 stdIdent[STD_ID_LEN];
147 Uint8 structVersion;
148 Uint8 structData[2041];
149 };
150
151 /* Boot Descriptor (ECMA 167 2/9.4) */
152 struct BootDesc {
153 Uint8 structType;
154 Uint8 stdIdent[STD_ID_LEN];
155 Uint8 structVersion;
156 Uint8 reserved1;
157 EntityID architectureType;
158 EntityID bootIdent;
159 Uint32 bootExtLocation;
160 Uint32 bootExtLength;
161 Uint64 loadAddress;
162 Uint64 startAddress;
163 timestamp descCreationDateAndTime;
164 Uint16 flags;
165 Uint8 reserved2[32];
166 Uint8 bootUse[1906];
167 };
168
169 /* Boot flags (ECMA 167 2/9.4.12) */
170 #define BOOT_FLAGS_ERASE 1
171
172 /* Extent Descriptor (ECMA 167 3/7.1) */
173 typedef struct {
174 Uint32 extLength;
175 Uint32 extLocation;
176 } extent_ad;
177
178 /* Descriptor Tag (ECMA 167 3/7.2) */
179 typedef struct {
180 Uint16 tagIdent;
181 Uint16 descVersion;
182 Uint8 tagChecksum;
183 Uint8 reserved;
184 Uint16 tagSerialNum;
185 Uint16 descCRC;
186 Uint16 descCRCLength;
187 Uint32 tagLocation;
188 } tag;
189
190 /* Tag Identifiers (ECMA 167 3/7.2.1) */
191 #define TID_UNUSED_DESC 0x0000U
192 #define TID_PRIMARY_VOL_DESC 0x0001U
193 #define TID_ANCHOR_VOL_DESC_PTR 0x0002U
194 #define TID_VOL_DESC_PTR 0x0003U
195 #define TID_IMP_USE_VOL_DESC 0x0004U
196 #define TID_PARTITION_DESC 0x0005U
197 #define TID_LOGICAL_VOL_DESC 0x0006U
198 #define TID_UNALLOC_SPACE_DESC 0x0007U
199 #define TID_TERMINATING_DESC 0x0008U
200 #define TID_LOGICAL_VOL_INTEGRITY_DESC 0x0009U
201
202 /* Tag Identifiers (ECMA 167 4/7.2.1) */
203 #define TID_FILE_SET_DESC 0x0100U
204 #define TID_FILE_IDENT_DESC 0x0101U
205 #define TID_ALLOC_EXTENT_DESC 0x0102U
206 #define TID_INDIRECT_ENTRY 0x0103U
207 #define TID_TERMINAL_ENTRY 0x0104U
208 #define TID_FILE_ENTRY 0x0105U
209 #define TID_EXTENDED_ATTRE_HEADER_DESC 0x0106U
210 #define TID_UNALLOCATED_SPACE_ENTRY 0x0107U
211 #define TID_SPACE_BITMAP_DESC 0x0108U
212 #define TID_PARTITION_INTEGRITY_ENTRY 0x0109U
213 #define TID_EXTENDED_FILE_ENTRY 0x010AU
214
215 /* NSR Descriptor (ECMA 167 3/9.1) */
216 struct NSRDesc {
217 Uint8 structType;
218 Uint8 stdIdent[STD_ID_LEN];
219 Uint8 structVersion;
220 Uint8 reserved;
221 Uint8 structData[2040];
222 };
223
224 /* Primary Volume Descriptor (ECMA 167 3/10.1) */
225 struct PrimaryVolDesc {
226 tag descTag;
227 Uint32 volDescSeqNum;
228 Uint32 primaryVolDescNum;
229 dstring volIdent[32];
230 Uint16 volSeqNum;
231 Uint16 maxVolSeqNum;
232 Uint16 interchangeLvl;
233 Uint16 maxInterchangeLvl;
234 Uint32 charSetList;
235 Uint32 maxCharSetList;
236 dstring volSetIdent[128];
237 charspec descCharSet;
238 charspec explanatoryCharSet;
239 extent_ad volAbstract;
240 extent_ad volCopyright;
241 EntityID appIdent;
242 timestamp recordingDateAndTime;
243 EntityID impIdent;
244 Uint8 impUse[64];
245 Uint32 predecessorVolDescSeqLocation;
246 Uint16 flags;
247 Uint8 reserved[22];
248 };
249
250 /* Primary volume descriptor flags (ECMA 167 3/10.1.21) */
251 #define VOL_SET_IDENT 1
252
253 /* Anchor Volume Descriptor Pointer (ECMA 167 3/10.2) */
254 struct AnchorVolDescPtr {
255 tag descTag;
256 extent_ad mainVolDescSeqExt;
257 extent_ad reserveVolDescSeqExt;
258 Uint8 reserved[480];
259 };
260
261 /* Volume Descriptor Pointer (ECMA 167 3/10.3) */
262 struct VolDescPtr {
263 tag descTag;
264 Uint32 volDescSeqNum;
265 extent_ad nextVolDescSeqExt;
266 Uint8 reserved[484];
267 };
268
269 /* Implementation Use Volume Descriptor (ECMA 167 3/10.4) */
270 struct ImpUseVolDesc {
271 tag descTag;
272 Uint32 volDescSeqNum;
273 EntityID impIdent;
274 Uint8 impUse[460];
275 };
276
277 /* Partition Descriptor (ECMA 167 3/10.5) */
278 struct PartitionDesc {
279 tag descTag;
280 Uint32 volDescSeqNum;
281 Uint16 partitionFlags;
282 Uint16 partitionNumber;
283 EntityID partitionContents;
284 Uint8 partitionContentsUse[128];
285 Uint32 accessType;
286 Uint32 partitionStartingLocation;
287 Uint32 partitionLength;
288 EntityID impIdent;
289 Uint8 impUse[128];
290 Uint8 reserved[156];
291 };
292
293 /* Partition Flags (ECMA 167 3/10.5.3) */
294 #define PARTITION_FLAGS_ALLOC 1
295
296 /* Partition Contents (ECMA 167 3/10.5.5) */
297 #define PARTITION_CONTENTS_FDC01 "+FDC01"
298 #define PARTITION_CONTENTS_CD001 "+CD001"
299 #define PARTITION_CONTENTS_CDW02 "+CDW02"
300 #define PARTITION_CONTENTS_NSR02 "+NSR02"
301 #define PARTITION_CONTENTS_NSR03 "+NSR03"
302
303 /* Partition Access Types (ECMA 167 3/10.5.7) */
304 #define PARTITION_ACCESS_NONE 0
305 #define PARTITION_ACCESS_R 1
306 #define PARTITION_ACCESS_WO 2
307 #define PARTITION_ACCESS_RW 3
308 #define PARTITION_ACCESS_OW 4
309
310 /* Logical Volume Descriptor (ECMA 167 3/10.6) */
311 struct LogicalVolDesc {
312 tag descTag;
313 Uint32 volDescSeqNum;
314 charspec descCharSet;
315 dstring logicalVolIdent[128];
316 Uint32 logicalBlockSize;
317 EntityID domainIdent;
318 Uint8 logicalVolContentsUse[16]; /* used to find fileset */
319 Uint32 mapTableLength;
320 Uint32 numPartitionMaps;
321 EntityID impIdent;
322 Uint8 impUse[128];
323 extent_ad integritySeqExt;
324 Uint8 partitionMaps[0];
325 };
326
327 /* Generic Partition Map (ECMA 167 3/10.7.1) */
328 struct GenericPartitionMap {
329 Uint8 partitionMapType;
330 Uint8 partitionMapLength;
331 Uint8 partitionMapping[0];
332 };
333
334 /* Partition Map Type (ECMA 167 3/10.7.1.1) */
335 #define PARTITION_MAP_TYPE_NONE 0
336 #define PARTITION_MAP_TYPE_1 1
337 #define PARTITION_MAP_TYPE_2 2
338
339 /* Type 1 Partition Map (ECMA 167 3/10.7.2) */
340 struct GenericPartitionMap1 {
341 Uint8 partitionMapType;
342 Uint8 partitionMapLength;
343 Uint16 volSeqNum;
344 Uint16 partitionNum;
345 };
346
347 /* Type 2 Partition Map (ECMA 167 3/10.7.3) */
348 struct GenericPartitionMap2 {
349 Uint8 partitionMapType; /* 2 */
350 Uint8 partitionMapLength;
351 Uint8 partitionIdent[62];
352 };
353
354 /* Unallocated Space Descriptor (ECMA 167 3/10.8) */
355 struct UnallocatedSpaceDesc {
356 tag descTag;
357 Uint32 volDescSeqNum;
358 Uint32 numAllocDescs;
359 extent_ad allocDescs[0];
360 };
361
362 /* Terminating Descriptor (ECMA 3/10.9) */
363 struct TerminatingDesc {
364 tag descTag;
365 Uint8 reserved[496];
366 };
367
368 struct GenericDesc
369 {
370 tag descTag;
371 Uint32 volDescSeqNum;
372 };
373
374 /* Logical Volume Integrity Descriptor (ECMA 167 3/10.10) */
375 struct LogicalVolIntegrityDesc {
376 tag descTag;
377 timestamp recordingDateAndTime;
378 Uint32 integrityType;
379 extent_ad nextIntegrityExt;
380 Uint8 logicalVolContentsUse[32];
381 Uint32 numOfPartitions;
382 Uint32 lengthOfImpUse;
383 Uint32 freeSpaceTable[0];
384 Uint32 sizeTable[0];
385 Uint8 impUse[0];
386 };
387
388 /* Integrity Types (ECMA 167 3/10.10.3) */
389 #define INTEGRITY_TYPE_OPEN 0
390 #define INTEGRITY_TYPE_CLOSE 1
391
392 /* Recorded Address (ECMA 167 4/7.1) */
393 typedef struct {
394 Uint32 logicalBlockNum;
395 Uint16 partitionReferenceNum;
396 } lb_addr;
397
398 /* Extent interpretation (ECMA 167 4/14.14.1.1) */
399 #define EXTENT_RECORDED_ALLOCATED 0x00
400 #define EXTENT_NOT_RECORDED_ALLOCATED 0x01
401 #define EXTENT_NOT_RECORDED_NOT_ALLOCATED 0x02
402 #define EXTENT_NEXT_EXTENT_ALLOCDECS 0x03
403
404 /* Long Allocation Descriptor (ECMA 167 4/14.14.2) */
405 typedef struct {
406 Uint32 extLength;
407 lb_addr extLocation;
408 Uint8 impUse[6];
409 } long_ad;
410 /* upper 2 bits of extLength indicate type */
411
412 /* File Set Descriptor (ECMA 167 4/14.1) */
413 struct FileSetDesc {
414 tag descTag;
415 timestamp recordingDateAndTime;
416 Uint16 interchangeLvl;
417 Uint16 maxInterchangeLvl;
418 Uint32 charSetList;
419 Uint32 maxCharSetList;
420 Uint32 fileSetNum;
421 Uint32 fileSetDescNum;
422 charspec logicalVolIdentCharSet;
423 dstring logicalVolIdent[128];
424 charspec fileSetCharSet;
425 dstring fileSetIdent[32];
426 dstring copyrightFileIdent[32];
427 dstring abstractFileIdent[32];
428 long_ad rootDirectoryICB;
429 EntityID domainIdent;
430 long_ad nextExt;
431 long_ad streamDirectoryICB;
432 Uint8 reserved[32];
433 };
434
435 /* Short Allocation Descriptor (ECMA 167 4/14.14.1) */
436 typedef struct {
437 Uint32 extLength;
438 Uint32 extPosition;
439 } short_ad;
440
441 /* Partition Header Descriptor (ECMA 167 4/14.3) */
442 struct PartitionHeaderDesc {
443 short_ad unallocatedSpaceTable;
444 short_ad unallocatedSpaceBitmap;
445 short_ad partitionIntegrityTable;
446 short_ad freedSpaceTable;
447 short_ad freedSpaceBitmap;
448 Uint8 reserved[88];
449 };
450
451 /* File Identifier Descriptor (ECMA 167 4/14.4) */
452 struct FileIdentDesc
453 {
454 tag descTag;
455 Uint16 fileVersionNum; /* 1 */
456 Uint8 fileCharacteristics;
457 Uint8 lengthFileIdent;
458 long_ad icb;
459 Uint16 lengthOfImpUse;
460 Uint8 impUse[0];
461 Uint8 fileIdent[0];
462 Uint8 padding[0];
463 };
464
465 /* File Characteristics (ECMA 167 4/14.4.3) */
466 #define FILE_HIDDEN 1
467 #define FILE_DIRECTORY 2
468 #define FILE_DELETED 4
469 #define FILE_PARENT 8
470 #define FILE_METADATA 0x10 /* UDF 2.0 */
471
472 /* Allocation Ext Descriptor (ECMA 167 4/14.5) */
473 struct AllocExtDesc
474 {
475 tag descTag;
476 Uint32 previousAllocExtLocation;
477 Uint32 lengthAllocDescs;
478 };
479
480 /* ICB Tag (ECMA 167 4/14.6) */
481 typedef struct {
482 Uint32 priorRecordedNumDirectEntries;
483 Uint16 strategyType;
484 Uint16 strategyParameter;
485 Uint16 numEntries;
486 Uint8 reserved;
487 Uint8 fileType;
488 lb_addr parentICBLocation;
489 Uint16 flags;
490 } icbtag;
491
492 /* ICB File Type (ECMA 167 4/14.6.6) */
493 #define FILE_TYPE_NONE 0x00U
494 #define FILE_TYPE_UNALLOC 0x01U
495 #define FILE_TYPE_INTEGRITY 0x02U
496 #define FILE_TYPE_INDIRECT 0x03U
497 #define FILE_TYPE_DIRECTORY 0x04U
498 #define FILE_TYPE_REGULAR 0x05U
499 #define FILE_TYPE_BLOCK 0x06U
500 #define FILE_TYPE_CHAR 0x07U
501 #define FILE_TYPE_EXTENDED 0x08U
502 #define FILE_TYPE_FIFO 0x09U
503 #define FILE_TYPE_SOCKET 0x0aU
504 #define FILE_TYPE_TERMINAL 0x0bU
505 #define FILE_TYPE_SYMLINK 0x0cU
506 #define FILE_TYPE_STREAMDIR 0x0dU /* ECMA 167 4/13 */
507
508 /* ICB Flags (ECMA 167 4/14.6.8) */
509 #define ICB_FLAG_ALLOC_MASK 0x0007U
510 #define ICB_FLAG_SORTED 0x0008U
511 #define ICB_FLAG_NONRELOCATABLE 0x0010U
512 #define ICB_FLAG_ARCHIVE 0x0020U
513 #define ICB_FLAG_SETUID 0x0040U
514 #define ICB_FLAG_SETGID 0x0080U
515 #define ICB_FLAG_STICKY 0x0100U
516 #define ICB_FLAG_CONTIGUOUS 0x0200U
517 #define ICB_FLAG_SYSTEM 0x0400U
518 #define ICB_FLAG_TRANSFORMED 0x0800U
519 #define ICB_FLAG_MULTIVERSIONS 0x1000U
520
521 /* ICB Flags Allocation type(ECMA 167 4/14.6.8) */
522 #define ICB_FLAG_AD_SHORT 0
523 #define ICB_FLAG_AD_LONG 1
524 #define ICB_FLAG_AD_EXTENDED 2
525 #define ICB_FLAG_AD_IN_ICB 3
526
527 /* Indirect Entry (ECMA 167 4/14.7) */
528 struct IndirectEntry {
529 tag descTag;
530 icbtag icbTag;
531 long_ad indirectICB;
532 };
533
534 /* Terminal Entry (ECMA 167 4/14.8) */
535 struct TerminalEntry {
536 tag descTag;
537 icbtag icbTag;
538 };
539
540 /* File Entry (ECMA 167 4/14.9) */
541 struct FileEntry {
542 tag descTag;
543 icbtag icbTag;
544 Uint32 uid;
545 Uint32 gid;
546 Uint32 permissions;
547 Uint16 fileLinkCount;
548 Uint8 recordFormat;
549 Uint8 recordDisplayAttr;
550 Uint32 recordLength;
551 Uint64 informationLength;
552 Uint64 logicalBlocksRecorded;
553 timestamp accessTime;
554 timestamp modificationTime;
555 timestamp attrTime;
556 Uint32 checkpoint;
557 long_ad extendedAttrICB;
558 EntityID impIdent;
559 Uint64 uniqueID; /* 0= root, 16- (2^32-1) */
560 Uint32 lengthExtendedAttr;
561 Uint32 lengthAllocDescs;
562 Uint8 extendedAttr[0];
563 Uint8 allocDescs[0];
564 };
565
566 /* File Permissions (ECMA 167 4/14.9.5) */
567 #define PERM_O_EXEC 0x00000001U
568 #define PERM_O_WRITE 0x00000002U
569 #define PERM_O_READ 0x00000004U
570 #define PERM_O_CHATTR 0x00000008U
571 #define PERM_O_DELETE 0x00000010U
572 #define PERM_G_EXEC 0x00000020U
573 #define PERM_G_WRITE 0x00000040U
574 #define PERM_G_READ 0x00000080U
575 #define PERM_G_CHATTR 0x00000100U
576 #define PERM_G_DELETE 0x00000200U
577 #define PERM_U_EXEC 0x00000400U
578 #define PERM_U_WRITE 0x00000800U
579 #define PERM_U_READ 0x00001000U
580 #define PERM_U_CHATTR 0x00002000U
581 #define PERM_U_DELETE 0x00004000U
582
583 /* File Record Format (ECMA 167 4/14.9.7) */
584 #define RECORD_FMT_NONE 0
585 #define RECORD_FMT_FIXED_PAD 1
586 #define RECORD_FMT_FIXED 2
587 #define RECORD_FMT_VARIABLE8 3
588 #define RECORD_FMT_VARIABLE16 4
589 #define RECORD_FMT_VARIABLE16_MSB 5
590 #define RECORD_FMT_VARIABLE32 6
591 #define RECORD_FMT_PRINT 7
592 #define RECORD_FMT_LF 8
593 #define RECORD_FMT_CR 9
594 #define RECORD_FMT_CRLF 10
595 #define RECORD_FMT_LFCR 10
596
597 /* Extended Attribute Header Descriptor (ECMA 167 4/14.10.1) */
598 struct ExtendedAttrHeaderDesc {
599 tag descTag;
600 Uint32 impAttrLocation;
601 Uint32 appAttrLocation;
602 };
603
604 /* Generic Attribute Format (ECMA 4/14.10.2) */
605 struct GenericAttrFormat {
606 Uint32 attrType;
607 Uint8 attrSubtype;
608 Uint8 reserved[3];
609 Uint32 attrLength;
610 Uint8 attrData[0];
611 };
612
613 /* Character Set Attribute Format (ECMA 4/14.10.3) */
614 struct CharSetAttrFormat {
615 Uint32 attrType; /* 1 */
616 Uint8 attrSubtype; /* 1 */
617 Uint8 reserved[3];
618 Uint32 attrLength;
619 Uint32 escapeSeqLength;
620 Uint8 charSetType;
621 Uint8 escapeSeq[0];
622 };
623
624 /* Alternate Permissions (ECMA 167 4/14.10.4) */
625 struct AlternatePermissionsExtendedAttr {
626 Uint32 attrType; /* 3 */
627 Uint8 attrSubtype; /* 1 */
628 Uint8 reserved[3];
629 Uint32 attrLength;
630 Uint16 ownerIdent;
631 Uint16 groupIdent;
632 Uint16 permission;
633 };
634
635 /* File Times Extended Attribute (ECMA 167 4/14.10.5) */
636 struct FileTimesExtendedAttr {
637 Uint32 attrType; /* 5 */
638 Uint8 attrSubtype; /* 1 */
639 Uint8 reserved[3];
640 Uint32 attrLength;
641 Uint32 dataLength;
642 Uint32 fileTimeExistence;
643 Uint8 fileTimes;
644 };
645
646 /* FileTimeExistence (ECMA 167 4/14.10.5.6) */
647 #define FTE_CREATION 0
648 #define FTE_DELETION 2
649 #define FTE_EFFECTIVE 3
650 #define FTE_BACKUP 5
651
652 /* Information Times Extended Attribute (ECMA 167 4/14.10.6) */
653 struct InfoTimesExtendedAttr {
654 Uint32 attrType; /* 6 */
655 Uint8 attrSubtype; /* 1 */
656 Uint8 reserved[3];
657 Uint32 attrLength;
658 Uint32 dataLength;
659 Uint32 infoTimeExistence;
660 Uint8 infoTimes[0];
661 };
662
663 /* Device Specification Extended Attribute (ECMA 167 4/14.10.7) */
664 struct DeviceSpecificationExtendedAttr {
665 Uint32 attrType; /* 12 */
666 Uint8 attrSubtype; /* 1 */
667 Uint8 reserved[3];
668 Uint32 attrLength;
669 Uint32 impUseLength;
670 Uint32 majorDeviceIdent;
671 Uint32 minorDeviceIdent;
672 Uint8 impUse[0];
673 };
674
675 /* Implementation Use Extended Attr (ECMA 167 4/14.10.8) */
676 struct ImpUseExtendedAttr {
677 Uint32 attrType; /* 2048 */
678 Uint8 attrSubtype; /* 1 */
679 Uint8 reserved[3];
680 Uint32 attrLength;
681 Uint32 impUseLength;
682 EntityID impIdent;
683 Uint8 impUse[0];
684 };
685
686 /* Application Use Extended Attribute (ECMA 167 4/14.10.9) */
687 struct AppUseExtendedAttr {
688 Uint32 attrType; /* 65536 */
689 Uint8 attrSubtype; /* 1 */
690 Uint8 reserved[3];
691 Uint32 attrLength;
692 Uint32 appUseLength;
693 EntityID appIdent;
694 Uint8 appUse[0];
695 };
696
697 #define EXTATTR_CHAR_SET 1
698 #define EXTATTR_ALT_PERMS 3
699 #define EXTATTR_FILE_TIMES 5
700 #define EXTATTR_INFO_TIMES 6
701 #define EXTATTR_DEV_SPEC 12
702 #define EXTATTR_IMP_USE 2048
703 #define EXTATTR_APP_USE 65536
704
705
706 /* Unallocated Space Entry (ECMA 167 4/14.11) */
707 struct UnallocatedSpaceEntry {
708 tag descTag;
709 icbtag icbTag;
710 Uint32 lengthAllocDescs;
711 Uint8 allocDescs[0];
712 };
713
714 /* Space Bitmap Descriptor (ECMA 167 4/14.12) */
715 struct SpaceBitmapDesc {
716 tag descTag;
717 Uint32 numOfBits;
718 Uint32 numOfBytes;
719 Uint8 bitmap[0];
720 };
721
722 /* Partition Integrity Entry (ECMA 167 4/14.13) */
723 struct PartitionIntegrityEntry {
724 tag descTag;
725 icbtag icbTag;
726 timestamp recordingDateAndTime;
727 Uint8 integrityType;
728 Uint8 reserved[175];
729 EntityID impIdent;
730 Uint8 impUse[256];
731 };
732
733 /* Extended Allocation Descriptor (ECMA 167 4/14.14.3) */
734 typedef struct { /* ECMA 167 4/14.14.3 */
735 Uint32 extLength;
736 Uint32 recordedLength;
737 Uint32 informationLength;
738 lb_addr extLocation;
739 } ext_ad;
740
741 /* Logical Volume Header Descriptor (ECMA 167 4/14.5) */
742 struct LogicalVolHeaderDesc {
743 Uint64 uniqueID;
744 Uint8 reserved[24];
745 };
746
747 /* Path Component (ECMA 167 4/14.16.1) */
748 struct PathComponent {
749 Uint8 componentType;
750 Uint8 lengthComponentIdent;
751 Uint16 componentFileVersionNum;
752 dstring componentIdent[0];
753 };
754
755 /* File Entry (ECMA 167 4/14.17) */
756 struct ExtendedFileEntry {
757 tag descTag;
758 icbtag icbTag;
759 Uint32 uid;
760 Uint32 gid;
761 Uint32 permissions;
762 Uint16 fileLinkCount;
763 Uint8 recordFormat;
764 Uint8 recordDisplayAttr;
765 Uint32 recordLength;
766 Uint64 informationLength;
767 Uint64 objectSize;
768 Uint64 logicalBlocksRecorded;
769 timestamp accessTime;
770 timestamp modificationTime;
771 timestamp createTime;
772 timestamp attrTime;
773 Uint32 checkpoint;
774 Uint32 reserved;
775 long_ad extendedAttrICB;
776 long_ad streamDirectoryICB;
777 EntityID impIdent;
778 Uint64 uniqueID;
779 Uint32 lengthExtendedAttr;
780 Uint32 lengthAllocDescs;
781 Uint8 extendedAttr[0];
782 Uint8 allocDescs[0];
783 };
784 #pragma pack()
785
786 #endif /* !defined(_LINUX_UDF_167_H) */
787
This page was automatically generated by the
LXR engine.
Visit the LXR main site for more
information.