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 #include <linux/types.h>
36
37 #ifndef _ECMA_167_H
38 #define _ECMA_167_H 1
39
40
41 struct charspec {
42 uint8_t charSetType;
43 uint8_t charSetInfo[63];
44 } __packed;
45
46
47 #define CHARSPEC_TYPE_CS0 0x00
48 #define CHARSPEC_TYPE_CS1 0x01
49 #define CHARSPEC_TYPE_CS2 0x02
50 #define CHARSPEC_TYPE_CS3 0x03
51 #define CHARSPEC_TYPE_CS4 0x04
52 #define CHARSPEC_TYPE_CS5 0x05
53 #define CHARSPEC_TYPE_CS6 0x06
54 #define CHARSPEC_TYPE_CS7 0x07
55 #define CHARSPEC_TYPE_CS8 0x08
56
57 typedef uint8_t dstring;
58
59
60 struct timestamp {
61 __le16 typeAndTimezone;
62 __le16 year;
63 uint8_t month;
64 uint8_t day;
65 uint8_t hour;
66 uint8_t minute;
67 uint8_t second;
68 uint8_t centiseconds;
69 uint8_t hundredsOfMicroseconds;
70 uint8_t microseconds;
71 } __packed;
72
73
74 #define TIMESTAMP_TYPE_MASK 0xF000
75 #define TIMESTAMP_TYPE_CUT 0x0000
76 #define TIMESTAMP_TYPE_LOCAL 0x1000
77 #define TIMESTAMP_TYPE_AGREEMENT 0x2000
78 #define TIMESTAMP_TIMEZONE_MASK 0x0FFF
79
80
81 struct regid {
82 uint8_t flags;
83 uint8_t ident[23];
84 uint8_t identSuffix[8];
85 } __packed;
86
87
88 #define ENTITYID_FLAGS_DIRTY 0x00
89 #define ENTITYID_FLAGS_PROTECTED 0x01
90
91
92 #define UDF_ID_COMPLIANT "*OSTA UDF Compliant"
93
94
95 struct domainEntityIDSuffix {
96 uint16_t revision;
97 uint8_t flags;
98 uint8_t reserved[5];
99 };
100
101
102 #define ENTITYIDSUFFIX_FLAGS_HARDWRITEPROTECT 0
103 #define ENTITYIDSUFFIX_FLAGS_SOFTWRITEPROTECT 1
104
105
106 #define VSD_STD_ID_LEN 5
107 struct volStructDesc {
108 uint8_t structType;
109 uint8_t stdIdent[VSD_STD_ID_LEN];
110 uint8_t structVersion;
111 uint8_t structData[2041];
112 } __packed;
113
114
115 #define VSD_STD_ID_NSR02 "NSR02"
116
117
118 #define VSD_STD_ID_BEA01 "BEA01"
119 #define VSD_STD_ID_BOOT2 "BOOT2"
120 #define VSD_STD_ID_CD001 "CD001"
121 #define VSD_STD_ID_CDW02 "CDW02"
122 #define VSD_STD_ID_NSR03 "NSR03"
123 #define VSD_STD_ID_TEA01 "TEA01"
124
125
126 struct beginningExtendedAreaDesc {
127 uint8_t structType;
128 uint8_t stdIdent[VSD_STD_ID_LEN];
129 uint8_t structVersion;
130 uint8_t structData[2041];
131 } __packed;
132
133
134 struct terminatingExtendedAreaDesc {
135 uint8_t structType;
136 uint8_t stdIdent[VSD_STD_ID_LEN];
137 uint8_t structVersion;
138 uint8_t structData[2041];
139 } __packed;
140
141
142 struct bootDesc {
143 uint8_t structType;
144 uint8_t stdIdent[VSD_STD_ID_LEN];
145 uint8_t structVersion;
146 uint8_t reserved1;
147 struct regid archType;
148 struct regid bootIdent;
149 __le32 bootExtLocation;
150 __le32 bootExtLength;
151 __le64 loadAddress;
152 __le64 startAddress;
153 struct timestamp descCreationDateAndTime;
154 __le16 flags;
155 uint8_t reserved2[32];
156 uint8_t bootUse[1906];
157 } __packed;
158
159
160 #define BOOT_FLAGS_ERASE 0x01
161
162
163 struct extent_ad {
164 __le32 extLength;
165 __le32 extLocation;
166 } __packed;
167
168 struct kernel_extent_ad {
169 uint32_t extLength;
170 uint32_t extLocation;
171 };
172
173
174 struct tag {
175 __le16 tagIdent;
176 __le16 descVersion;
177 uint8_t tagChecksum;
178 uint8_t reserved;
179 __le16 tagSerialNum;
180 __le16 descCRC;
181 __le16 descCRCLength;
182 __le32 tagLocation;
183 } __packed;
184
185
186 #define TAG_IDENT_PVD 0x0001
187 #define TAG_IDENT_AVDP 0x0002
188 #define TAG_IDENT_VDP 0x0003
189 #define TAG_IDENT_IUVD 0x0004
190 #define TAG_IDENT_PD 0x0005
191 #define TAG_IDENT_LVD 0x0006
192 #define TAG_IDENT_USD 0x0007
193 #define TAG_IDENT_TD 0x0008
194 #define TAG_IDENT_LVID 0x0009
195
196
197 struct NSRDesc {
198 uint8_t structType;
199 uint8_t stdIdent[VSD_STD_ID_LEN];
200 uint8_t structVersion;
201 uint8_t reserved;
202 uint8_t structData[2040];
203 } __packed;
204
205
206 struct primaryVolDesc {
207 struct tag descTag;
208 __le32 volDescSeqNum;
209 __le32 primaryVolDescNum;
210 dstring volIdent[32];
211 __le16 volSeqNum;
212 __le16 maxVolSeqNum;
213 __le16 interchangeLvl;
214 __le16 maxInterchangeLvl;
215 __le32 charSetList;
216 __le32 maxCharSetList;
217 dstring volSetIdent[128];
218 struct charspec descCharSet;
219 struct charspec explanatoryCharSet;
220 struct extent_ad volAbstract;
221 struct extent_ad volCopyright;
222 struct regid appIdent;
223 struct timestamp recordingDateAndTime;
224 struct regid impIdent;
225 uint8_t impUse[64];
226 __le32 predecessorVolDescSeqLocation;
227 __le16 flags;
228 uint8_t reserved[22];
229 } __packed;
230
231
232 #define PVD_FLAGS_VSID_COMMON 0x0001
233
234
235 struct anchorVolDescPtr {
236 struct tag descTag;
237 struct extent_ad mainVolDescSeqExt;
238 struct extent_ad reserveVolDescSeqExt;
239 uint8_t reserved[480];
240 } __packed;
241
242
243 struct volDescPtr {
244 struct tag descTag;
245 __le32 volDescSeqNum;
246 struct extent_ad nextVolDescSeqExt;
247 uint8_t reserved[484];
248 } __packed;
249
250
251 struct impUseVolDesc {
252 struct tag descTag;
253 __le32 volDescSeqNum;
254 struct regid impIdent;
255 uint8_t impUse[460];
256 } __packed;
257
258
259 struct partitionDesc {
260 struct tag descTag;
261 __le32 volDescSeqNum;
262 __le16 partitionFlags;
263 __le16 partitionNumber;
264 struct regid partitionContents;
265 uint8_t partitionContentsUse[128];
266 __le32 accessType;
267 __le32 partitionStartingLocation;
268 __le32 partitionLength;
269 struct regid impIdent;
270 uint8_t impUse[128];
271 uint8_t reserved[156];
272 } __packed;
273
274
275 #define PD_PARTITION_FLAGS_ALLOC 0x0001
276
277
278 #define PD_PARTITION_CONTENTS_NSR02 "+NSR02"
279
280
281 #define PD_PARTITION_CONTENTS_FDC01 "+FDC01"
282 #define PD_PARTITION_CONTENTS_CD001 "+CD001"
283 #define PD_PARTITION_CONTENTS_CDW02 "+CDW02"
284 #define PD_PARTITION_CONTENTS_NSR03 "+NSR03"
285
286
287 #define PD_ACCESS_TYPE_NONE 0x00000000
288 #define PD_ACCESS_TYPE_READ_ONLY 0x00000001
289 #define PD_ACCESS_TYPE_WRITE_ONCE 0x00000002
290 #define PD_ACCESS_TYPE_REWRITABLE 0x00000003
291 #define PD_ACCESS_TYPE_OVERWRITABLE 0x00000004
292
293
294 struct logicalVolDesc {
295 struct tag descTag;
296 __le32 volDescSeqNum;
297 struct charspec descCharSet;
298 dstring logicalVolIdent[128];
299 __le32 logicalBlockSize;
300 struct regid domainIdent;
301 uint8_t logicalVolContentsUse[16];
302 __le32 mapTableLength;
303 __le32 numPartitionMaps;
304 struct regid impIdent;
305 uint8_t impUse[128];
306 struct extent_ad integritySeqExt;
307 uint8_t partitionMaps[0];
308 } __packed;
309
310
311 struct genericPartitionMap {
312 uint8_t partitionMapType;
313 uint8_t partitionMapLength;
314 uint8_t partitionMapping[0];
315 } __packed;
316
317
318 #define GP_PARTITION_MAP_TYPE_UNDEF 0x00
319 #define GP_PARTIITON_MAP_TYPE_1 0x01
320 #define GP_PARTITION_MAP_TYPE_2 0x02
321
322
323 struct genericPartitionMap1 {
324 uint8_t partitionMapType;
325 uint8_t partitionMapLength;
326 __le16 volSeqNum;
327 __le16 partitionNum;
328 } __packed;
329
330
331 struct genericPartitionMap2 {
332 uint8_t partitionMapType;
333 uint8_t partitionMapLength;
334 uint8_t partitionIdent[62];
335 } __packed;
336
337
338 struct unallocSpaceDesc {
339 struct tag descTag;
340 __le32 volDescSeqNum;
341 __le32 numAllocDescs;
342 struct extent_ad allocDescs[0];
343 } __packed;
344
345
346 struct terminatingDesc {
347 struct tag descTag;
348 uint8_t reserved[496];
349 } __packed;
350
351
352 struct logicalVolIntegrityDesc {
353 struct tag descTag;
354 struct timestamp recordingDateAndTime;
355 __le32 integrityType;
356 struct extent_ad nextIntegrityExt;
357 uint8_t logicalVolContentsUse[32];
358 __le32 numOfPartitions;
359 __le32 lengthOfImpUse;
360 __le32 freeSpaceTable[0];
361 __le32 sizeTable[0];
362 uint8_t impUse[0];
363 } __packed;
364
365
366 #define LVID_INTEGRITY_TYPE_OPEN 0x00000000
367 #define LVID_INTEGRITY_TYPE_CLOSE 0x00000001
368
369
370 struct lb_addr {
371 __le32 logicalBlockNum;
372 __le16 partitionReferenceNum;
373 } __packed;
374
375
376 struct kernel_lb_addr {
377 uint32_t logicalBlockNum;
378 uint16_t partitionReferenceNum;
379 };
380
381
382 struct short_ad {
383 __le32 extLength;
384 __le32 extPosition;
385 } __packed;
386
387
388 struct long_ad {
389 __le32 extLength;
390 struct lb_addr extLocation;
391 uint8_t impUse[6];
392 } __packed;
393
394 struct kernel_long_ad {
395 uint32_t extLength;
396 struct kernel_lb_addr extLocation;
397 uint8_t impUse[6];
398 };
399
400
401 struct ext_ad {
402 __le32 extLength;
403 __le32 recordedLength;
404 __le32 informationLength;
405 struct lb_addr extLocation;
406 } __packed;
407
408 struct kernel_ext_ad {
409 uint32_t extLength;
410 uint32_t recordedLength;
411 uint32_t informationLength;
412 struct kernel_lb_addr extLocation;
413 };
414
415
416
417
418 #define TAG_IDENT_FSD 0x0100
419 #define TAG_IDENT_FID 0x0101
420 #define TAG_IDENT_AED 0x0102
421 #define TAG_IDENT_IE 0x0103
422 #define TAG_IDENT_TE 0x0104
423 #define TAG_IDENT_FE 0x0105
424 #define TAG_IDENT_EAHD 0x0106
425 #define TAG_IDENT_USE 0x0107
426 #define TAG_IDENT_SBD 0x0108
427 #define TAG_IDENT_PIE 0x0109
428 #define TAG_IDENT_EFE 0x010A
429
430
431 struct fileSetDesc {
432 struct tag descTag;
433 struct timestamp recordingDateAndTime;
434 __le16 interchangeLvl;
435 __le16 maxInterchangeLvl;
436 __le32 charSetList;
437 __le32 maxCharSetList;
438 __le32 fileSetNum;
439 __le32 fileSetDescNum;
440 struct charspec logicalVolIdentCharSet;
441 dstring logicalVolIdent[128];
442 struct charspec fileSetCharSet;
443 dstring fileSetIdent[32];
444 dstring copyrightFileIdent[32];
445 dstring abstractFileIdent[32];
446 struct long_ad rootDirectoryICB;
447 struct regid domainIdent;
448 struct long_ad nextExt;
449 struct long_ad streamDirectoryICB;
450 uint8_t reserved[32];
451 } __packed;
452
453
454 struct partitionHeaderDesc {
455 struct short_ad unallocSpaceTable;
456 struct short_ad unallocSpaceBitmap;
457 struct short_ad partitionIntegrityTable;
458 struct short_ad freedSpaceTable;
459 struct short_ad freedSpaceBitmap;
460 uint8_t reserved[88];
461 } __packed;
462
463
464 struct fileIdentDesc {
465 struct tag descTag;
466 __le16 fileVersionNum;
467 uint8_t fileCharacteristics;
468 uint8_t lengthFileIdent;
469 struct long_ad icb;
470 __le16 lengthOfImpUse;
471 uint8_t impUse[0];
472 uint8_t fileIdent[0];
473 uint8_t padding[0];
474 } __packed;
475
476
477 #define FID_FILE_CHAR_HIDDEN 0x01
478 #define FID_FILE_CHAR_DIRECTORY 0x02
479 #define FID_FILE_CHAR_DELETED 0x04
480 #define FID_FILE_CHAR_PARENT 0x08
481 #define FID_FILE_CHAR_METADATA 0x10
482
483
484 struct allocExtDesc {
485 struct tag descTag;
486 __le32 previousAllocExtLocation;
487 __le32 lengthAllocDescs;
488 } __packed;
489
490
491 struct icbtag {
492 __le32 priorRecordedNumDirectEntries;
493 __le16 strategyType;
494 __le16 strategyParameter;
495 __le16 numEntries;
496 uint8_t reserved;
497 uint8_t fileType;
498 struct lb_addr parentICBLocation;
499 __le16 flags;
500 } __packed;
501
502
503 #define ICBTAG_STRATEGY_TYPE_UNDEF 0x0000
504 #define ICBTAG_STRATEGY_TYPE_1 0x0001
505 #define ICBTAG_STRATEGY_TYPE_2 0x0002
506 #define ICBTAG_STRATEGY_TYPE_3 0x0003
507 #define ICBTAG_STRATEGY_TYPE_4 0x0004
508
509
510 #define ICBTAG_FILE_TYPE_UNDEF 0x00
511 #define ICBTAG_FILE_TYPE_USE 0x01
512 #define ICBTAG_FILE_TYPE_PIE 0x02
513 #define ICBTAG_FILE_TYPE_IE 0x03
514 #define ICBTAG_FILE_TYPE_DIRECTORY 0x04
515 #define ICBTAG_FILE_TYPE_REGULAR 0x05
516 #define ICBTAG_FILE_TYPE_BLOCK 0x06
517 #define ICBTAG_FILE_TYPE_CHAR 0x07
518 #define ICBTAG_FILE_TYPE_EA 0x08
519 #define ICBTAG_FILE_TYPE_FIFO 0x09
520 #define ICBTAG_FILE_TYPE_SOCKET 0x0A
521 #define ICBTAG_FILE_TYPE_TE 0x0B
522 #define ICBTAG_FILE_TYPE_SYMLINK 0x0C
523 #define ICBTAG_FILE_TYPE_STREAMDIR 0x0D
524
525
526 #define ICBTAG_FLAG_AD_MASK 0x0007
527 #define ICBTAG_FLAG_AD_SHORT 0x0000
528 #define ICBTAG_FLAG_AD_LONG 0x0001
529 #define ICBTAG_FLAG_AD_EXTENDED 0x0002
530 #define ICBTAG_FLAG_AD_IN_ICB 0x0003
531 #define ICBTAG_FLAG_SORTED 0x0008
532 #define ICBTAG_FLAG_NONRELOCATABLE 0x0010
533 #define ICBTAG_FLAG_ARCHIVE 0x0020
534 #define ICBTAG_FLAG_SETUID 0x0040
535 #define ICBTAG_FLAG_SETGID 0x0080
536 #define ICBTAG_FLAG_STICKY 0x0100
537 #define ICBTAG_FLAG_CONTIGUOUS 0x0200
538 #define ICBTAG_FLAG_SYSTEM 0x0400
539 #define ICBTAG_FLAG_TRANSFORMED 0x0800
540 #define ICBTAG_FLAG_MULTIVERSIONS 0x1000
541 #define ICBTAG_FLAG_STREAM 0x2000
542
543
544 struct indirectEntry {
545 struct tag descTag;
546 struct icbtag icbTag;
547 struct long_ad indirectICB;
548 } __packed;
549
550
551 struct terminalEntry {
552 struct tag descTag;
553 struct icbtag icbTag;
554 } __packed;
555
556
557 struct fileEntry {
558 struct tag descTag;
559 struct icbtag icbTag;
560 __le32 uid;
561 __le32 gid;
562 __le32 permissions;
563 __le16 fileLinkCount;
564 uint8_t recordFormat;
565 uint8_t recordDisplayAttr;
566 __le32 recordLength;
567 __le64 informationLength;
568 __le64 logicalBlocksRecorded;
569 struct timestamp accessTime;
570 struct timestamp modificationTime;
571 struct timestamp attrTime;
572 __le32 checkpoint;
573 struct long_ad extendedAttrICB;
574 struct regid impIdent;
575 __le64 uniqueID;
576 __le32 lengthExtendedAttr;
577 __le32 lengthAllocDescs;
578 uint8_t extendedAttr[0];
579 uint8_t allocDescs[0];
580 } __packed;
581
582
583 #define FE_PERM_O_EXEC 0x00000001U
584 #define FE_PERM_O_WRITE 0x00000002U
585 #define FE_PERM_O_READ 0x00000004U
586 #define FE_PERM_O_CHATTR 0x00000008U
587 #define FE_PERM_O_DELETE 0x00000010U
588 #define FE_PERM_G_EXEC 0x00000020U
589 #define FE_PERM_G_WRITE 0x00000040U
590 #define FE_PERM_G_READ 0x00000080U
591 #define FE_PERM_G_CHATTR 0x00000100U
592 #define FE_PERM_G_DELETE 0x00000200U
593 #define FE_PERM_U_EXEC 0x00000400U
594 #define FE_PERM_U_WRITE 0x00000800U
595 #define FE_PERM_U_READ 0x00001000U
596 #define FE_PERM_U_CHATTR 0x00002000U
597 #define FE_PERM_U_DELETE 0x00004000U
598
599
600 #define FE_RECORD_FMT_UNDEF 0x00
601 #define FE_RECORD_FMT_FIXED_PAD 0x01
602 #define FE_RECORD_FMT_FIXED 0x02
603 #define FE_RECORD_FMT_VARIABLE8 0x03
604 #define FE_RECORD_FMT_VARIABLE16 0x04
605 #define FE_RECORD_FMT_VARIABLE16_MSB 0x05
606 #define FE_RECORD_FMT_VARIABLE32 0x06
607 #define FE_RECORD_FMT_PRINT 0x07
608 #define FE_RECORD_FMT_LF 0x08
609 #define FE_RECORD_FMT_CR 0x09
610 #define FE_RECORD_FMT_CRLF 0x0A
611 #define FE_RECORD_FMT_LFCR 0x0B
612
613
614 #define FE_RECORD_DISPLAY_ATTR_UNDEF 0x00
615 #define FE_RECORD_DISPLAY_ATTR_1 0x01
616 #define FE_RECORD_DISPLAY_ATTR_2 0x02
617 #define FE_RECORD_DISPLAY_ATTR_3 0x03
618
619
620 struct extendedAttrHeaderDesc {
621 struct tag descTag;
622 __le32 impAttrLocation;
623 __le32 appAttrLocation;
624 } __packed;
625
626
627 struct genericFormat {
628 __le32 attrType;
629 uint8_t attrSubtype;
630 uint8_t reserved[3];
631 __le32 attrLength;
632 uint8_t attrData[0];
633 } __packed;
634
635
636 struct charSetInfo {
637 __le32 attrType;
638 uint8_t attrSubtype;
639 uint8_t reserved[3];
640 __le32 attrLength;
641 __le32 escapeSeqLength;
642 uint8_t charSetType;
643 uint8_t escapeSeq[0];
644 } __packed;
645
646
647 struct altPerms {
648 __le32 attrType;
649 uint8_t attrSubtype;
650 uint8_t reserved[3];
651 __le32 attrLength;
652 __le16 ownerIdent;
653 __le16 groupIdent;
654 __le16 permission;
655 } __packed;
656
657
658 struct fileTimesExtAttr {
659 __le32 attrType;
660 uint8_t attrSubtype;
661 uint8_t reserved[3];
662 __le32 attrLength;
663 __le32 dataLength;
664 __le32 fileTimeExistence;
665 uint8_t fileTimes;
666 } __packed;
667
668
669 #define FTE_CREATION 0x00000001
670 #define FTE_DELETION 0x00000004
671 #define FTE_EFFECTIVE 0x00000008
672 #define FTE_BACKUP 0x00000002
673
674
675 struct infoTimesExtAttr {
676 __le32 attrType;
677 uint8_t attrSubtype;
678 uint8_t reserved[3];
679 __le32 attrLength;
680 __le32 dataLength;
681 __le32 infoTimeExistence;
682 uint8_t infoTimes[0];
683 } __packed;
684
685
686 struct deviceSpec {
687 __le32 attrType;
688 uint8_t attrSubtype;
689 uint8_t reserved[3];
690 __le32 attrLength;
691 __le32 impUseLength;
692 __le32 majorDeviceIdent;
693 __le32 minorDeviceIdent;
694 uint8_t impUse[0];
695 } __packed;
696
697
698 struct impUseExtAttr {
699 __le32 attrType;
700 uint8_t attrSubtype;
701 uint8_t reserved[3];
702 __le32 attrLength;
703 __le32 impUseLength;
704 struct regid impIdent;
705 uint8_t impUse[0];
706 } __packed;
707
708
709 struct appUseExtAttr {
710 __le32 attrType;
711 uint8_t attrSubtype;
712 uint8_t reserved[3];
713 __le32 attrLength;
714 __le32 appUseLength;
715 struct regid appIdent;
716 uint8_t appUse[0];
717 } __packed;
718
719 #define EXTATTR_CHAR_SET 1
720 #define EXTATTR_ALT_PERMS 3
721 #define EXTATTR_FILE_TIMES 5
722 #define EXTATTR_INFO_TIMES 6
723 #define EXTATTR_DEV_SPEC 12
724 #define EXTATTR_IMP_USE 2048
725 #define EXTATTR_APP_USE 65536
726
727
728 struct unallocSpaceEntry {
729 struct tag descTag;
730 struct icbtag icbTag;
731 __le32 lengthAllocDescs;
732 uint8_t allocDescs[0];
733 } __packed;
734
735
736 struct spaceBitmapDesc {
737 struct tag descTag;
738 __le32 numOfBits;
739 __le32 numOfBytes;
740 uint8_t bitmap[0];
741 } __packed;
742
743
744 struct partitionIntegrityEntry {
745 struct tag descTag;
746 struct icbtag icbTag;
747 struct timestamp recordingDateAndTime;
748 uint8_t integrityType;
749 uint8_t reserved[175];
750 struct regid impIdent;
751 uint8_t impUse[256];
752 } __packed;
753
754
755
756
757 #define EXT_RECORDED_ALLOCATED 0x00000000
758 #define EXT_NOT_RECORDED_ALLOCATED 0x40000000
759 #define EXT_NOT_RECORDED_NOT_ALLOCATED 0x80000000
760 #define EXT_NEXT_EXTENT_ALLOCDECS 0xC0000000
761
762
763
764
765
766
767 struct logicalVolHeaderDesc {
768 __le64 uniqueID;
769 uint8_t reserved[24];
770 } __packed;
771
772
773 struct pathComponent {
774 uint8_t componentType;
775 uint8_t lengthComponentIdent;
776 __le16 componentFileVersionNum;
777 dstring componentIdent[0];
778 } __packed;
779
780
781 struct extendedFileEntry {
782 struct tag descTag;
783 struct icbtag icbTag;
784 __le32 uid;
785 __le32 gid;
786 __le32 permissions;
787 __le16 fileLinkCount;
788 uint8_t recordFormat;
789 uint8_t recordDisplayAttr;
790 __le32 recordLength;
791 __le64 informationLength;
792 __le64 objectSize;
793 __le64 logicalBlocksRecorded;
794 struct timestamp accessTime;
795 struct timestamp modificationTime;
796 struct timestamp createTime;
797 struct timestamp attrTime;
798 __le32 checkpoint;
799 __le32 reserved;
800 struct long_ad extendedAttrICB;
801 struct long_ad streamDirectoryICB;
802 struct regid impIdent;
803 __le64 uniqueID;
804 __le32 lengthExtendedAttr;
805 __le32 lengthAllocDescs;
806 uint8_t extendedAttr[0];
807 uint8_t allocDescs[0];
808 } __packed;
809
810 #endif