patch-2.3.17 linux/include/linux/udf_167.h

Next file: linux/include/linux/udf_fs.h
Previous file: linux/include/linux/tty.h
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.3.16/linux/include/linux/udf_167.h linux/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) */

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)