summaryrefslogtreecommitdiffstats
path: root/include/linux/udf_167.h
diff options
context:
space:
mode:
authorRalf Baechle <ralf@linux-mips.org>1999-10-09 00:00:47 +0000
committerRalf Baechle <ralf@linux-mips.org>1999-10-09 00:00:47 +0000
commitd6434e1042f3b0a6dfe1b1f615af369486f9b1fa (patch)
treee2be02f33984c48ec019c654051d27964e42c441 /include/linux/udf_167.h
parent609d1e803baf519487233b765eb487f9ec227a18 (diff)
Merge with 2.3.19.
Diffstat (limited to 'include/linux/udf_167.h')
-rw-r--r--include/linux/udf_167.h778
1 files changed, 778 insertions, 0 deletions
diff --git a/include/linux/udf_167.h b/include/linux/udf_167.h
new file mode 100644
index 000000000..0fe77d0ef
--- /dev/null
+++ b/include/linux/udf_167.h
@@ -0,0 +1,778 @@
+#if !defined(_LINUX_UDF_167_H)
+#define _LINUX_UDF_167_H
+/*
+ * udf_167.h
+ *
+ * DESCRIPTION
+ * Definitions from the ECMA 167 standard.
+ * http://www.ecma.ch/
+ *
+ * These abbreviations are used to keep the symbols short:
+ * Alloc Allocation
+ * App Application
+ * Attr Attribute
+ * Char Characters
+ * Desc Descriptor
+ * Descs Descriptors
+ * Ext Extent
+ * Ident Identifier
+ * Imp Implementation
+ * Lvl Level
+ * Max Maximum
+ * Num Number
+ * Ptr Pointer
+ * Seq Sequence
+ * Std Standard
+ * Struct Structure
+ * Vol Volume
+ * The symbols are otherwise identical to the standard, and the
+ * sections of the standard to refer to are indicated.
+ *
+ * CONTACTS
+ * E-mail regarding any portion of the Linux UDF file system should be
+ * directed to the development team mailing list (run by majordomo):
+ * linux_udf@hootie.lvld.hp.com
+ *
+ * COPYRIGHT
+ * This file is distributed under the terms of the GNU General Public
+ * License (GPL). Copies of the GPL can be obtained from:
+ * ftp://prep.ai.mit.edu/pub/gnu/GPL
+ * Each contributing author retains all rights to their own work.
+ *
+ * HISTORY
+ * July 12, 1997 - Andrew E. Mileski
+ * Adapted from the ECMA-167 standard.
+ *
+ * 10/2/98 dgb Adaptation
+ * 10/4/98 Changes by HJA Sandkuyl
+ * 10/7/98 Changed FILE_EXISTENCE to FILE_HIDDEN, per UDF 2.0 spec
+ * 11/26/98 Modifed some entries for UDF 1.5/2.0
+ * 11/26/98 bf Fixed typos, non-linux types, more structures
+ * 12/5/98 dgb Adjusted structure and content of include files.
+ */
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#define Uint8 __u8
+#define Uint16 __u16
+#define Uint32 __u32
+#define Uint64 __u64
+typedef Uint8 dstring;
+#else
+#define Uint8 unsigned char
+#define Uint16 unsigned short
+#define Uint32 unsigned int
+#define Uint64 unsigned long long
+typedef Uint8 dstring;
+#endif
+
+/* make sure all structures are packed! */
+#pragma pack(1)
+
+/* CS0 Charspec (ECMA 167 1/7.2.1) */
+typedef struct {
+ Uint8 charSetType;
+ Uint8 charSetInfo[63];
+} charspec;
+
+/* Timestamp (ECMA 167 1/7.3) */
+typedef struct {
+ Uint16 typeAndTimezone;
+ Uint16 year;
+ Uint8 month;
+ Uint8 day;
+ Uint8 hour;
+ Uint8 minute;
+ Uint8 second;
+ Uint8 centiseconds;
+ Uint8 hundredsOfMicroseconds;
+ Uint8 microseconds;
+} timestamp;
+
+/* Timestamp types (ECMA 167 1/7.3.1) */
+#define TIMESTAMP_TYPE_CUT 0x0000U
+#define TIMESTAMP_TYPE_LOCAL 0x0001U
+#define TIMESTAMP_TYPE_AGREEMENT 0x0002U
+
+/* Entity Identifier (ECMA 167 1/7.4) */
+typedef struct {
+ Uint8 flags;
+ Uint8 ident[23];
+ Uint8 identSuffix[8];
+} EntityID;
+#define regid EntityID
+
+/* Entity identifier flags (ECMA 167 1/7.4.1) */
+#define ENTITYID_FLAGS_DIRTY 0x01U
+#define ENTITYID_FLAGS_PROTECTED 0x02U
+
+/* Volume Structure Descriptor (ECMA 167 2/9.1) */
+#define STD_ID_LEN 5
+struct VolStructDesc {
+ Uint8 structType;
+ Uint8 stdIdent[STD_ID_LEN];
+ Uint8 structVersion;
+ Uint8 structData[2041];
+};
+
+/* Std structure identifiers (ECMA 167 2/9.1.2) */
+#define STD_ID_BEA01 "BEA01"
+#define STD_ID_BOOT2 "BOOT2"
+#define STD_ID_CD001 "CD001"
+#define STD_ID_CDW02 "CDW02"
+#define STD_ID_NSR02 "NSR02"
+#define STD_ID_NSR03 "NSR03"
+#define STD_ID_TEA01 "TEA01"
+
+/* Beginning Extended Area Descriptor (ECMA 167 2/9.2) */
+struct BeginningExtendedAreaDesc {
+ Uint8 structType;
+ Uint8 stdIdent[STD_ID_LEN];
+ Uint8 structVersion;
+ Uint8 structData[2041];
+};
+
+/* Terminating Extended Area Descriptor (ECMA 167 2/9.3) */
+struct TerminatingExtendedAreaDesc {
+ Uint8 structType;
+ Uint8 stdIdent[STD_ID_LEN];
+ Uint8 structVersion;
+ Uint8 structData[2041];
+};
+
+/* Boot Descriptor (ECMA 167 2/9.4) */
+struct BootDesc {
+ Uint8 structType;
+ Uint8 stdIdent[STD_ID_LEN];
+ Uint8 structVersion;
+ Uint8 reserved1;
+ EntityID architectureType;
+ EntityID bootIdent;
+ Uint32 bootExtLocation;
+ Uint32 bootExtLength;
+ Uint64 loadAddress;
+ Uint64 startAddress;
+ timestamp descCreationDateAndTime;
+ Uint16 flags;
+ Uint8 reserved2[32];
+ Uint8 bootUse[1906];
+};
+
+/* Boot flags (ECMA 167 2/9.4.12) */
+#define BOOT_FLAGS_ERASE 1
+
+/* Extent Descriptor (ECMA 167 3/7.1) */
+typedef struct {
+ Uint32 extLength;
+ Uint32 extLocation;
+} extent_ad;
+
+/* Descriptor Tag (ECMA 167 3/7.2) */
+typedef struct {
+ Uint16 tagIdent;
+ Uint16 descVersion;
+ Uint8 tagChecksum;
+ Uint8 reserved;
+ Uint16 tagSerialNum;
+ Uint16 descCRC;
+ Uint16 descCRCLength;
+ Uint32 tagLocation;
+} tag;
+
+/* Tag Identifiers (ECMA 167 3/7.2.1) */
+#define TID_UNUSED_DESC 0x0000U
+#define TID_PRIMARY_VOL_DESC 0x0001U
+#define TID_ANCHOR_VOL_DESC_PTR 0x0002U
+#define TID_VOL_DESC_PTR 0x0003U
+#define TID_IMP_USE_VOL_DESC 0x0004U
+#define TID_PARTITION_DESC 0x0005U
+#define TID_LOGICAL_VOL_DESC 0x0006U
+#define TID_UNALLOC_SPACE_DESC 0x0007U
+#define TID_TERMINATING_DESC 0x0008U
+#define TID_LOGICAL_VOL_INTEGRITY_DESC 0x0009U
+
+/* Tag Identifiers (ECMA 167 4/7.2.1) */
+#define TID_FILE_SET_DESC 0x0100U
+#define TID_FILE_IDENT_DESC 0x0101U
+#define TID_ALLOC_EXTENT_DESC 0x0102U
+#define TID_INDIRECT_ENTRY 0x0103U
+#define TID_TERMINAL_ENTRY 0x0104U
+#define TID_FILE_ENTRY 0x0105U
+#define TID_EXTENDED_ATTRE_HEADER_DESC 0x0106U
+#define TID_UNALLOCATED_SPACE_ENTRY 0x0107U
+#define TID_SPACE_BITMAP_DESC 0x0108U
+#define TID_PARTITION_INTEGRITY_ENTRY 0x0109U
+#define TID_EXTENDED_FILE_ENTRY 0x010AU
+
+/* NSR Descriptor (ECMA 167 3/9.1) */
+struct NSRDesc {
+ Uint8 structType;
+ Uint8 stdIdent[STD_ID_LEN];
+ Uint8 structVersion;
+ Uint8 reserved;
+ Uint8 structData[2040];
+};
+
+/* Primary Volume Descriptor (ECMA 167 3/10.1) */
+struct PrimaryVolDesc {
+ tag descTag;
+ Uint32 volDescSeqNum;
+ Uint32 primaryVolDescNum;
+ dstring volIdent[32];
+ Uint16 volSeqNum;
+ Uint16 maxVolSeqNum;
+ Uint16 interchangeLvl;
+ Uint16 maxInterchangeLvl;
+ Uint32 charSetList;
+ Uint32 maxCharSetList;
+ dstring volSetIdent[128];
+ charspec descCharSet;
+ charspec explanatoryCharSet;
+ extent_ad volAbstract;
+ extent_ad volCopyright;
+ EntityID appIdent;
+ timestamp recordingDateAndTime;
+ EntityID impIdent;
+ Uint8 impUse[64];
+ Uint32 predecessorVolDescSeqLocation;
+ Uint16 flags;
+ Uint8 reserved[22];
+};
+
+/* Primary volume descriptor flags (ECMA 167 3/10.1.21) */
+#define VOL_SET_IDENT 1
+
+/* Anchor Volume Descriptor Pointer (ECMA 167 3/10.2) */
+struct AnchorVolDescPtr {
+ tag descTag;
+ extent_ad mainVolDescSeqExt;
+ extent_ad reserveVolDescSeqExt;
+ Uint8 reserved[480];
+};
+
+/* Volume Descriptor Pointer (ECMA 167 3/10.3) */
+struct VolDescPtr {
+ tag descTag;
+ Uint32 volDescSeqNum;
+ extent_ad nextVolDescSeqExt;
+ Uint8 reserved[484];
+};
+
+/* Implementation Use Volume Descriptor (ECMA 167 3/10.4) */
+struct ImpUseVolDesc {
+ tag descTag;
+ Uint32 volDescSeqNum;
+ EntityID impIdent;
+ Uint8 impUse[460];
+};
+
+/* Partition Descriptor (ECMA 167 3/10.5) */
+struct PartitionDesc {
+ tag descTag;
+ Uint32 volDescSeqNum;
+ Uint16 partitionFlags;
+ Uint16 partitionNumber;
+ EntityID partitionContents;
+ Uint8 partitionContentsUse[128];
+ Uint32 accessType;
+ Uint32 partitionStartingLocation;
+ Uint32 partitionLength;
+ EntityID impIdent;
+ Uint8 impUse[128];
+ Uint8 reserved[156];
+};
+
+/* Partition Flags (ECMA 167 3/10.5.3) */
+#define PARTITION_FLAGS_ALLOC 1
+
+/* Partition Contents (ECMA 167 3/10.5.5) */
+#define PARTITION_CONTENTS_FDC01 "+FDC01"
+#define PARTITION_CONTENTS_CD001 "+CD001"
+#define PARTITION_CONTENTS_CDW02 "+CDW02"
+#define PARTITION_CONTENTS_NSR02 "+NSR02"
+#define PARTITION_CONTENTS_NSR03 "+NSR03"
+
+/* Partition Access Types (ECMA 167 3/10.5.7) */
+#define PARTITION_ACCESS_NONE 0
+#define PARTITION_ACCESS_R 1
+#define PARTITION_ACCESS_WO 2
+#define PARTITION_ACCESS_RW 3
+#define PARTITION_ACCESS_OW 4
+
+/* Logical Volume Descriptor (ECMA 167 3/10.6) */
+struct LogicalVolDesc {
+ tag descTag;
+ Uint32 volDescSeqNum;
+ charspec descCharSet;
+ dstring logicalVolIdent[128];
+ Uint32 logicalBlockSize;
+ EntityID domainIdent;
+ Uint8 logicalVolContentsUse[16]; /* used to find fileset */
+ Uint32 mapTableLength;
+ Uint32 numPartitionMaps;
+ EntityID impIdent;
+ Uint8 impUse[128];
+ extent_ad integritySeqExt;
+ Uint8 partitionMaps[0];
+};
+
+/* Generic Partition Map (ECMA 167 3/10.7.1) */
+struct GenericPartitionMap {
+ Uint8 partitionMapType;
+ Uint8 partitionMapLength;
+ Uint8 partitionMapping[0];
+};
+
+/* Partition Map Type (ECMA 167 3/10.7.1.1) */
+#define PARTITION_MAP_TYPE_NONE 0
+#define PARTITION_MAP_TYPE_1 1
+#define PARTITION_MAP_TYPE_2 2
+
+/* Type 1 Partition Map (ECMA 167 3/10.7.2) */
+struct GenericPartitionMap1 {
+ Uint8 partitionMapType;
+ Uint8 partitionMapLength;
+ Uint16 volSeqNum;
+ Uint16 partitionNum;
+};
+
+/* Type 2 Partition Map (ECMA 167 3/10.7.3) */
+struct GenericPartitionMap2 {
+ Uint8 partitionMapType; /* 2 */
+ Uint8 partitionMapLength;
+ Uint8 partitionIdent[62];
+};
+
+/* Unallocated Space Descriptor (ECMA 167 3/10.8) */
+struct UnallocatedSpaceDesc {
+ tag descTag;
+ Uint32 volDescSeqNum;
+ Uint32 numAllocDescs;
+ extent_ad allocDescs[0];
+};
+
+/* Terminating Descriptor (ECMA 3/10.9) */
+struct TerminatingDesc {
+ tag descTag;
+ Uint8 reserved[496];
+};
+
+struct GenericDesc
+{
+ tag descTag;
+ Uint32 volDescSeqNum;
+};
+
+/* Logical Volume Integrity Descriptor (ECMA 167 3/10.10) */
+struct LogicalVolIntegrityDesc {
+ tag descTag;
+ timestamp recordingDateAndTime;
+ Uint32 integrityType;
+ extent_ad nextIntegrityExt;
+ Uint8 logicalVolContentsUse[32];
+ Uint32 numOfPartitions;
+ Uint32 lengthOfImpUse;
+ Uint32 freeSpaceTable[0];
+ Uint32 sizeTable[0];
+ Uint8 impUse[0];
+};
+
+/* Integrity Types (ECMA 167 3/10.10.3) */
+#define INTEGRITY_TYPE_OPEN 0
+#define INTEGRITY_TYPE_CLOSE 1
+
+/* Recorded Address (ECMA 167 4/7.1) */
+typedef struct {
+ Uint32 logicalBlockNum;
+ Uint16 partitionReferenceNum;
+} lb_addr;
+
+/* Extent interpretation (ECMA 167 4/14.14.1.1) */
+#define EXTENT_RECORDED_ALLOCATED 0x00
+#define EXTENT_NOT_RECORDED_ALLOCATED 0x01
+#define EXTENT_NOT_RECORDED_NOT_ALLOCATED 0x02
+#define EXTENT_NEXT_EXTENT_ALLOCDECS 0x03
+
+/* Long Allocation Descriptor (ECMA 167 4/14.14.2) */
+typedef struct {
+ Uint32 extLength;
+ lb_addr extLocation;
+ Uint8 impUse[6];
+} long_ad;
+ /* upper 2 bits of extLength indicate type */
+
+/* File Set Descriptor (ECMA 167 4/14.1) */
+struct FileSetDesc {
+ tag descTag;
+ timestamp recordingDateAndTime;
+ Uint16 interchangeLvl;
+ Uint16 maxInterchangeLvl;
+ Uint32 charSetList;
+ Uint32 maxCharSetList;
+ Uint32 fileSetNum;
+ Uint32 fileSetDescNum;
+ charspec logicalVolIdentCharSet;
+ dstring logicalVolIdent[128];
+ charspec fileSetCharSet;
+ dstring fileSetIdent[32];
+ dstring copyrightFileIdent[32];
+ dstring abstractFileIdent[32];
+ long_ad rootDirectoryICB;
+ EntityID domainIdent;
+ long_ad nextExt;
+ long_ad streamDirectoryICB;
+ Uint8 reserved[32];
+};
+
+/* Short Allocation Descriptor (ECMA 167 4/14.14.1) */
+typedef struct {
+ Uint32 extLength;
+ Uint32 extPosition;
+} short_ad;
+
+/* Partition Header Descriptor (ECMA 167 4/14.3) */
+struct PartitionHeaderDesc {
+ short_ad unallocatedSpaceTable;
+ short_ad unallocatedSpaceBitmap;
+ short_ad partitionIntegrityTable;
+ short_ad freedSpaceTable;
+ short_ad freedSpaceBitmap;
+ Uint8 reserved[88];
+};
+
+/* File Identifier Descriptor (ECMA 167 4/14.4) */
+struct FileIdentDesc
+{
+ tag descTag;
+ Uint16 fileVersionNum; /* 1 */
+ Uint8 fileCharacteristics;
+ Uint8 lengthFileIdent;
+ long_ad icb;
+ Uint16 lengthOfImpUse;
+ Uint8 impUse[0];
+ Uint8 fileIdent[0];
+ Uint8 padding[0];
+};
+
+/* File Characteristics (ECMA 167 4/14.4.3) */
+#define FILE_HIDDEN 1
+#define FILE_DIRECTORY 2
+#define FILE_DELETED 4
+#define FILE_PARENT 8
+#define FILE_METADATA 0x10 /* UDF 2.0 */
+
+/* Allocation Ext Descriptor (ECMA 167 4/14.5) */
+struct AllocExtDesc
+{
+ tag descTag;
+ Uint32 previousAllocExtLocation;
+ Uint32 lengthAllocDescs;
+};
+
+/* ICB Tag (ECMA 167 4/14.6) */
+typedef struct {
+ Uint32 priorRecordedNumDirectEntries;
+ Uint16 strategyType;
+ Uint16 strategyParameter;
+ Uint16 numEntries;
+ Uint8 reserved;
+ Uint8 fileType;
+ lb_addr parentICBLocation;
+ Uint16 flags;
+} icbtag;
+
+/* ICB File Type (ECMA 167 4/14.6.6) */
+#define FILE_TYPE_NONE 0x00U
+#define FILE_TYPE_UNALLOC 0x01U
+#define FILE_TYPE_INTEGRITY 0x02U
+#define FILE_TYPE_INDIRECT 0x03U
+#define FILE_TYPE_DIRECTORY 0x04U
+#define FILE_TYPE_REGULAR 0x05U
+#define FILE_TYPE_BLOCK 0x06U
+#define FILE_TYPE_CHAR 0x07U
+#define FILE_TYPE_EXTENDED 0x08U
+#define FILE_TYPE_FIFO 0x09U
+#define FILE_TYPE_SOCKET 0x0aU
+#define FILE_TYPE_TERMINAL 0x0bU
+#define FILE_TYPE_SYMLINK 0x0cU
+#define FILE_TYPE_STREAMDIR 0x0dU /* ECMA 167 4/13 */
+
+/* ICB Flags (ECMA 167 4/14.6.8) */
+#define ICB_FLAG_ALLOC_MASK 0x0007U
+#define ICB_FLAG_SORTED 0x0008U
+#define ICB_FLAG_NONRELOCATABLE 0x0010U
+#define ICB_FLAG_ARCHIVE 0x0020U
+#define ICB_FLAG_SETUID 0x0040U
+#define ICB_FLAG_SETGID 0x0080U
+#define ICB_FLAG_STICKY 0x0100U
+#define ICB_FLAG_CONTIGUOUS 0x0200U
+#define ICB_FLAG_SYSTEM 0x0400U
+#define ICB_FLAG_TRANSFORMED 0x0800U
+#define ICB_FLAG_MULTIVERSIONS 0x1000U
+
+/* ICB Flags Allocation type(ECMA 167 4/14.6.8) */
+#define ICB_FLAG_AD_SHORT 0
+#define ICB_FLAG_AD_LONG 1
+#define ICB_FLAG_AD_EXTENDED 2
+#define ICB_FLAG_AD_IN_ICB 3
+
+/* Indirect Entry (ECMA 167 4/14.7) */
+struct IndirectEntry {
+ tag descTag;
+ icbtag icbTag;
+ long_ad indirectICB;
+};
+
+/* Terminal Entry (ECMA 167 4/14.8) */
+struct TerminalEntry {
+ tag descTag;
+ icbtag icbTag;
+};
+
+/* File Entry (ECMA 167 4/14.9) */
+struct FileEntry {
+ tag descTag;
+ icbtag icbTag;
+ Uint32 uid;
+ Uint32 gid;
+ Uint32 permissions;
+ Uint16 fileLinkCount;
+ Uint8 recordFormat;
+ Uint8 recordDisplayAttr;
+ Uint32 recordLength;
+ Uint64 informationLength;
+ Uint64 logicalBlocksRecorded;
+ timestamp accessTime;
+ timestamp modificationTime;
+ timestamp attrTime;
+ Uint32 checkpoint;
+ long_ad extendedAttrICB;
+ EntityID impIdent;
+ Uint64 uniqueID; /* 0= root, 16- (2^32-1) */
+ Uint32 lengthExtendedAttr;
+ Uint32 lengthAllocDescs;
+ Uint8 extendedAttr[0];
+ Uint8 allocDescs[0];
+};
+
+/* File Permissions (ECMA 167 4/14.9.5) */
+#define PERM_O_EXEC 0x00000001U
+#define PERM_O_WRITE 0x00000002U
+#define PERM_O_READ 0x00000004U
+#define PERM_O_CHATTR 0x00000008U
+#define PERM_O_DELETE 0x00000010U
+#define PERM_G_EXEC 0x00000020U
+#define PERM_G_WRITE 0x00000040U
+#define PERM_G_READ 0x00000080U
+#define PERM_G_CHATTR 0x00000100U
+#define PERM_G_DELETE 0x00000200U
+#define PERM_U_EXEC 0x00000400U
+#define PERM_U_WRITE 0x00000800U
+#define PERM_U_READ 0x00001000U
+#define PERM_U_CHATTR 0x00002000U
+#define PERM_U_DELETE 0x00004000U
+
+/* File Record Format (ECMA 167 4/14.9.7) */
+#define RECORD_FMT_NONE 0
+#define RECORD_FMT_FIXED_PAD 1
+#define RECORD_FMT_FIXED 2
+#define RECORD_FMT_VARIABLE8 3
+#define RECORD_FMT_VARIABLE16 4
+#define RECORD_FMT_VARIABLE16_MSB 5
+#define RECORD_FMT_VARIABLE32 6
+#define RECORD_FMT_PRINT 7
+#define RECORD_FMT_LF 8
+#define RECORD_FMT_CR 9
+#define RECORD_FMT_CRLF 10
+#define RECORD_FMT_LFCR 10
+
+/* Extended Attribute Header Descriptor (ECMA 167 4/14.10.1) */
+struct ExtendedAttrHeaderDesc {
+ tag descTag;
+ Uint32 impAttrLocation;
+ Uint32 appAttrLocation;
+};
+
+/* Generic Attribute Format (ECMA 4/14.10.2) */
+struct GenericAttrFormat {
+ Uint32 attrType;
+ Uint8 attrSubtype;
+ Uint8 reserved[3];
+ Uint32 attrLength;
+ Uint8 attrData[0];
+};
+
+/* Character Set Attribute Format (ECMA 4/14.10.3) */
+struct CharSetAttrFormat {
+ Uint32 attrType; /* 1 */
+ Uint8 attrSubtype; /* 1 */
+ Uint8 reserved[3];
+ Uint32 attrLength;
+ Uint32 escapeSeqLength;
+ Uint8 charSetType;
+ Uint8 escapeSeq[0];
+};
+
+/* Alternate Permissions (ECMA 167 4/14.10.4) */
+struct AlternatePermissionsExtendedAttr {
+ Uint32 attrType; /* 3 */
+ Uint8 attrSubtype; /* 1 */
+ Uint8 reserved[3];
+ Uint32 attrLength;
+ Uint16 ownerIdent;
+ Uint16 groupIdent;
+ Uint16 permission;
+};
+
+/* File Times Extended Attribute (ECMA 167 4/14.10.5) */
+struct FileTimesExtendedAttr {
+ Uint32 attrType; /* 5 */
+ Uint8 attrSubtype; /* 1 */
+ Uint8 reserved[3];
+ Uint32 attrLength;
+ Uint32 dataLength;
+ Uint32 fileTimeExistence;
+ Uint8 fileTimes;
+};
+
+/* FileTimeExistence (ECMA 167 4/14.10.5.6) */
+#define FTE_CREATION 0
+#define FTE_DELETION 2
+#define FTE_EFFECTIVE 3
+#define FTE_BACKUP 5
+
+/* Information Times Extended Attribute (ECMA 167 4/14.10.6) */
+struct InfoTimesExtendedAttr {
+ Uint32 attrType; /* 6 */
+ Uint8 attrSubtype; /* 1 */
+ Uint8 reserved[3];
+ Uint32 attrLength;
+ Uint32 dataLength;
+ Uint32 infoTimeExistence;
+ Uint8 infoTimes[0];
+};
+
+/* Device Specification Extended Attribute (ECMA 167 4/14.10.7) */
+struct DeviceSpecificationExtendedAttr {
+ Uint32 attrType; /* 12 */
+ Uint8 attrSubtype; /* 1 */
+ Uint8 reserved[3];
+ Uint32 attrLength;
+ Uint32 impUseLength;
+ Uint32 majorDeviceIdent;
+ Uint32 minorDeviceIdent;
+ Uint8 impUse[0];
+};
+
+/* Implementation Use Extended Attr (ECMA 167 4/14.10.8) */
+struct ImpUseExtendedAttr {
+ Uint32 attrType; /* 2048 */
+ Uint8 attrSubtype; /* 1 */
+ Uint8 reserved[3];
+ Uint32 attrLength;
+ Uint32 impUseLength;
+ EntityID impIdent;
+ Uint8 impUse[0];
+};
+
+/* Application Use Extended Attribute (ECMA 167 4/14.10.9) */
+struct AppUseExtendedAttr {
+ Uint32 attrType; /* 65536 */
+ Uint8 attrSubtype; /* 1 */
+ Uint8 reserved[3];
+ Uint32 attrLength;
+ Uint32 appUseLength;
+ EntityID appIdent;
+ Uint8 appUse[0];
+};
+
+#define EXTATTR_CHAR_SET 1
+#define EXTATTR_ALT_PERMS 3
+#define EXTATTR_FILE_TIMES 5
+#define EXTATTR_INFO_TIMES 6
+#define EXTATTR_DEV_SPEC 12
+#define EXTATTR_IMP_USE 2048
+#define EXTATTR_APP_USE 65536
+
+
+/* Unallocated Space Entry (ECMA 167 4/14.11) */
+struct UnallocatedSpaceEntry {
+ tag descTag;
+ icbtag icbTag;
+ Uint32 lengthAllocDescs;
+ Uint8 allocDescs[0];
+};
+
+/* Space Bitmap Descriptor (ECMA 167 4/14.12) */
+struct SpaceBitmapDesc {
+ tag descTag;
+ Uint32 numOfBits;
+ Uint32 numOfBytes;
+ Uint8 bitmap[0];
+};
+
+/* Partition Integrity Entry (ECMA 167 4/14.13) */
+struct PartitionIntegrityEntry {
+ tag descTag;
+ icbtag icbTag;
+ timestamp recordingDateAndTime;
+ Uint8 integrityType;
+ Uint8 reserved[175];
+ EntityID impIdent;
+ Uint8 impUse[256];
+};
+
+/* Extended Allocation Descriptor (ECMA 167 4/14.14.3) */
+typedef struct { /* ECMA 167 4/14.14.3 */
+ Uint32 extLength;
+ Uint32 recordedLength;
+ Uint32 informationLength;
+ lb_addr extLocation;
+} ext_ad;
+
+/* Logical Volume Header Descriptor (ECMA 167 4/14.5) */
+struct LogicalVolHeaderDesc {
+ Uint64 uniqueID;
+ Uint8 reserved[24];
+};
+
+/* Path Component (ECMA 167 4/14.16.1) */
+struct PathComponent {
+ Uint8 componentType;
+ Uint8 lengthComponentIdent;
+ Uint16 componentFileVersionNum;
+ dstring componentIdent[0];
+};
+
+/* File Entry (ECMA 167 4/14.17) */
+struct ExtendedFileEntry {
+ tag descTag;
+ icbtag icbTag;
+ Uint32 uid;
+ Uint32 gid;
+ Uint32 permissions;
+ Uint16 fileLinkCount;
+ Uint8 recordFormat;
+ Uint8 recordDisplayAttr;
+ Uint32 recordLength;
+ Uint64 informationLength;
+ Uint64 objectSize;
+ Uint64 logicalBlocksRecorded;
+ timestamp accessTime;
+ timestamp modificationTime;
+ timestamp createTime;
+ timestamp attrTime;
+ Uint32 checkpoint;
+ Uint32 reserved;
+ long_ad extendedAttrICB;
+ long_ad streamDirectoryICB;
+ EntityID impIdent;
+ Uint64 uniqueID;
+ Uint32 lengthExtendedAttr;
+ Uint32 lengthAllocDescs;
+ Uint8 extendedAttr[0];
+ Uint8 allocDescs[0];
+};
+#pragma pack()
+
+#endif /* !defined(_LINUX_UDF_167_H) */