Commit 61464467 authored by Pali Rohár's avatar Pali Rohár Committed by Jan Kara
Browse files

udf: Update header files to UDF 2.60

This change synchronizes header files ecma_167.h and osta_udf.h with
udftools 2.2 project which already has definitions for UDF 2.60 revision.

Link: https://lore.kernel.org/r/20200107212904.30471-3-pali.rohar@gmail.com


Signed-off-by: default avatarPali Rohár <pali.rohar@gmail.com>
Signed-off-by: default avatarJan Kara <jack@suse.cz>
parent 871b9b14
Loading
Loading
Loading
Loading
+23 −3
Original line number Diff line number Diff line
@@ -4,7 +4,8 @@
 * This file is based on ECMA-167 3rd edition (June 1997)
 * http://www.ecma.ch
 *
 * Copyright (c) 2001-2002  Ben Fennema <bfennema@falcon.csc.calpoly.edu>
 * Copyright (c) 2001-2002  Ben Fennema
 * Copyright (c) 2017-2019  Pali Rohár <pali.rohar@gmail.com>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
@@ -32,11 +33,19 @@
 * SUCH DAMAGE.
 */

/**
 * @file
 * ECMA-167r3 defines and structure definitions
 */

#include <linux/types.h>

#ifndef _ECMA_167_H
#define _ECMA_167_H 1

/* Character sets and coding - d-characters (ECMA 167r3 1/7.2) */
typedef uint8_t		dchars;

/* Character set specification (ECMA 167r3 1/7.2.1) */
struct charspec {
	uint8_t		charSetType;
@@ -54,6 +63,7 @@ struct charspec {
#define CHARSPEC_TYPE_CS7		0x07	/* (1/7.2.9) */
#define CHARSPEC_TYPE_CS8		0x08	/* (1/7.2.10) */

/* Fixed-length character fields - d-string (EMCA 167r3 1/7.2.12) */
typedef uint8_t		dstring;

/* Timestamp (ECMA 167r3 1/7.3) */
@@ -188,6 +198,13 @@ struct NSRDesc {
	uint8_t		structData[2040];
} __packed;

/* Generic Descriptor */
struct genericDesc {
	struct tag	descTag;
	__le32		volDescSeqNum;
	uint8_t		reserved[492];
} __packed;

/* Primary Volume Descriptor (ECMA 167r3 3/10.1) */
struct primaryVolDesc {
	struct tag		descTag;
@@ -302,7 +319,7 @@ struct genericPartitionMap {

/* Partition Map Type (ECMA 167r3 3/10.7.1.1) */
#define GP_PARTITION_MAP_TYPE_UNDEF	0x00
#define GP_PARTIITON_MAP_TYPE_1		0x01
#define GP_PARTITION_MAP_TYPE_1		0x01
#define GP_PARTITION_MAP_TYPE_2		0x02

/* Type 1 Partition Map (ECMA 167r3 3/10.7.2) */
@@ -709,6 +726,7 @@ struct appUseExtAttr {
#define EXTATTR_DEV_SPEC		12
#define EXTATTR_IMP_USE			2048
#define EXTATTR_APP_USE			65536
#define EXTATTR_SUBTYPE			1

/* Unallocated Space Entry (ECMA 167r3 4/14.11) */
struct unallocSpaceEntry {
@@ -740,6 +758,8 @@ struct partitionIntegrityEntry {
/* Short Allocation Descriptor (ECMA 167r3 4/14.14.1) */

/* Extent Length (ECMA 167r3 4/14.14.1.1) */
#define EXT_LENGTH_MASK			0x3FFFFFFF
#define EXT_TYPE_MASK			0xC0000000
#define EXT_RECORDED_ALLOCATED		0x00000000
#define EXT_NOT_RECORDED_ALLOCATED	0x40000000
#define EXT_NOT_RECORDED_NOT_ALLOCATED	0x80000000
@@ -760,7 +780,7 @@ struct pathComponent {
	uint8_t		componentType;
	uint8_t		lengthComponentIdent;
	__le16		componentFileVersionNum;
	dstring		componentIdent[0];
	dchars		componentIdent[0];
} __packed;

/* File Entry (ECMA 167r3 4/14.17) */
+60 −30
Original line number Diff line number Diff line
/*
 * osta_udf.h
 *
 * This file is based on OSTA UDF(tm) 2.50 (April 30, 2003)
 * This file is based on OSTA UDF(tm) 2.60 (March 1, 2005)
 * http://www.osta.org
 *
 * Copyright (c) 2001-2004  Ben Fennema <bfennema@falcon.csc.calpoly.edu>
 * Copyright (c) 2001-2004  Ben Fennema
 * Copyright (c) 2017-2019  Pali Rohár <pali.rohar@gmail.com>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
@@ -32,36 +33,49 @@
 * SUCH DAMAGE.
 */

/**
 * @file
 * OSTA-UDF defines and structure definitions
 */

#include "ecma_167.h"

#ifndef _OSTA_UDF_H
#define _OSTA_UDF_H 1

/* OSTA CS0 Charspec (UDF 2.50 2.1.2) */
/* OSTA CS0 Charspec (UDF 2.60 2.1.2) */
#define UDF_CHAR_SET_TYPE		0
#define UDF_CHAR_SET_INFO		"OSTA Compressed Unicode"

/* Entity Identifier (UDF 2.50 2.1.5) */
/* Identifiers (UDF 2.50 2.1.5.2) */
/* Entity Identifier (UDF 2.60 2.1.5) */
/* Identifiers (UDF 2.60 2.1.5.2) */
/* Implementation Use Extended Attribute (UDF 2.60 3.3.4.5) */
/* Virtual Allocation Table (UDF 1.50 2.2.10) */
/* Logical Volume Extended Information (UDF 1.50 Errata, DCN 5003, 3.3.4.5.1.3) */
/* OS2EA (UDF 1.50 3.3.4.5.3.1) */
/* MacUniqueIDTable (UDF 1.50 3.3.4.5.4.3) */
/* MacResourceFork (UDF 1.50 3.3.4.5.4.4) */
#define UDF_ID_DEVELOPER		"*Linux UDFFS"
#define	UDF_ID_COMPLIANT		"*OSTA UDF Compliant"
#define UDF_ID_LV_INFO			"*UDF LV Info"
#define UDF_ID_FREE_EA			"*UDF FreeEASpace"
#define UDF_ID_FREE_APP_EA		"*UDF FreeAppEASpace"
#define UDF_ID_DVD_CGMS			"*UDF DVD CGMS Info"
#define UDF_ID_VAT_LVEXTENSION		"*UDF VAT LVExtension"
#define UDF_ID_OS2_EA			"*UDF OS/2 EA"
#define UDF_ID_OS2_EA_LENGTH		"*UDF OS/2 EALength"
#define UDF_ID_MAC_VOLUME		"*UDF Mac VolumeInfo"
#define UDF_ID_MAC_FINDER		"*UDF Mac FinderInfo"
#define UDF_ID_MAC_UNIQUE		"*UDF Mac UniqueIDTable"
#define UDF_ID_MAC_RESOURCE		"*UDF Mac ResourceFork"
#define UDF_ID_OS400_DIRINFO		"*UDF OS/400 DirInfo"
#define UDF_ID_VIRTUAL			"*UDF Virtual Partition"
#define UDF_ID_SPARABLE			"*UDF Sparable Partition"
#define UDF_ID_ALLOC			"*UDF Virtual Alloc Tbl"
#define UDF_ID_SPARING			"*UDF Sparing Table"
#define UDF_ID_METADATA			"*UDF Metadata Partition"

/* Identifier Suffix (UDF 2.50 2.1.5.3) */
/* Identifier Suffix (UDF 2.60 2.1.5.3) */
#define DOMAIN_FLAGS_HARD_WRITE_PROTECT	0x01
#define DOMAIN_FLAGS_SOFT_WRITE_PROTECT	0x02

@@ -81,15 +95,15 @@ struct UDFIdentSuffix {
struct impIdentSuffix {
	uint8_t		OSClass;
	uint8_t		OSIdentifier;
	uint8_t		reserved[6];
	uint8_t		impUse[6];
} __packed;

struct appIdentSuffix {
	uint8_t		impUse[8];
} __packed;

/* Logical Volume Integrity Descriptor (UDF 2.50 2.2.6) */
/* Implementation Use (UDF 2.50 2.2.6.4) */
/* Logical Volume Integrity Descriptor (UDF 2.60 2.2.6) */
/* Implementation Use (UDF 2.60 2.2.6.4) */
struct logicalVolIntegrityDescImpUse {
	struct regid	impIdent;
	__le32		numFiles;
@@ -100,8 +114,8 @@ struct logicalVolIntegrityDescImpUse {
	uint8_t		impUse[0];
} __packed;

/* Implementation Use Volume Descriptor (UDF 2.50 2.2.7) */
/* Implementation Use (UDF 2.50 2.2.7.2) */
/* Implementation Use Volume Descriptor (UDF 2.60 2.2.7) */
/* Implementation Use (UDF 2.60 2.2.7.2) */
struct impUseVolDescImpUse {
	struct charspec	LVICharset;
	dstring		logicalVolIdent[128];
@@ -121,7 +135,7 @@ struct udfPartitionMap2 {
	__le16		partitionNum;
} __packed;

/* Virtual Partition Map (UDF 2.50 2.2.8) */
/* Virtual Partition Map (UDF 2.60 2.2.8) */
struct virtualPartitionMap {
	uint8_t		partitionMapType;
	uint8_t		partitionMapLength;
@@ -132,7 +146,7 @@ struct virtualPartitionMap {
	uint8_t		reserved2[24];
} __packed;

/* Sparable Partition Map (UDF 2.50 2.2.9) */
/* Sparable Partition Map (UDF 2.60 2.2.9) */
struct sparablePartitionMap {
	uint8_t partitionMapType;
	uint8_t partitionMapLength;
@@ -147,7 +161,7 @@ struct sparablePartitionMap {
	__le32 locSparingTable[4];
} __packed;

/* Metadata Partition Map (UDF 2.4.0 2.2.10) */
/* Metadata Partition Map (UDF 2.60 2.2.10) */
struct metadataPartitionMap {
	uint8_t		partitionMapType;
	uint8_t		partitionMapLength;
@@ -166,14 +180,14 @@ struct metadataPartitionMap {

/* Virtual Allocation Table (UDF 1.5 2.2.10) */
struct virtualAllocationTable15 {
	__le32		VirtualSector[0];
	__le32		vatEntry[0];
	struct regid	vatIdent;
	__le32		previousVATICBLoc;
} __packed;

#define ICBTAG_FILE_TYPE_VAT15		0x00U

/* Virtual Allocation Table (UDF 2.50 2.2.11) */
/* Virtual Allocation Table (UDF 2.60 2.2.11) */
struct virtualAllocationTable20 {
	__le16		lengthHeader;
	__le16		lengthImpUse;
@@ -181,9 +195,9 @@ struct virtualAllocationTable20 {
	__le32		previousVATICBLoc;
	__le32		numFiles;
	__le32		numDirs;
	__le16		minReadRevision;
	__le16		minWriteRevision;
	__le16		maxWriteRevision;
	__le16		minUDFReadRev;
	__le16		minUDFWriteRev;
	__le16		maxUDFWriteRev;
	__le16		reserved;
	uint8_t		impUse[0];
	__le32		vatEntry[0];
@@ -191,7 +205,7 @@ struct virtualAllocationTable20 {

#define ICBTAG_FILE_TYPE_VAT20		0xF8U

/* Sparing Table (UDF 2.50 2.2.12) */
/* Sparing Table (UDF 2.60 2.2.12) */
struct sparingEntry {
	__le32		origLocation;
	__le32		mappedLocation;
@@ -207,12 +221,12 @@ struct sparingTable {
			mapEntry[0];
} __packed;

/* Metadata File (and Metadata Mirror File) (UDF 2.50 2.2.13.1) */
/* Metadata File (and Metadata Mirror File) (UDF 2.60 2.2.13.1) */
#define ICBTAG_FILE_TYPE_MAIN		0xFA
#define ICBTAG_FILE_TYPE_MIRROR		0xFB
#define ICBTAG_FILE_TYPE_BITMAP		0xFC

/* struct struct long_ad ICB - ADImpUse (UDF 2.50 2.2.4.3) */
/* struct struct long_ad ICB - ADImpUse (UDF 2.60 2.2.4.3) */
struct allocDescImpUse {
	__le16		flags;
	uint8_t		impUse[4];
@@ -220,17 +234,17 @@ struct allocDescImpUse {

#define AD_IU_EXT_ERASED		0x0001

/* Real-Time Files (UDF 2.50 6.11) */
/* Real-Time Files (UDF 2.60 6.11) */
#define ICBTAG_FILE_TYPE_REALTIME	0xF9U

/* Implementation Use Extended Attribute (UDF 2.50 3.3.4.5) */
/* FreeEASpace (UDF 2.50 3.3.4.5.1.1) */
/* Implementation Use Extended Attribute (UDF 2.60 3.3.4.5) */
/* FreeEASpace (UDF 2.60 3.3.4.5.1.1) */
struct freeEaSpace {
	__le16		headerChecksum;
	uint8_t		freeEASpace[0];
} __packed;

/* DVD Copyright Management Information (UDF 2.50 3.3.4.5.1.2) */
/* DVD Copyright Management Information (UDF 2.60 3.3.4.5.1.2) */
struct DVDCopyrightImpUse {
	__le16		headerChecksum;
	uint8_t		CGMSInfo;
@@ -238,20 +252,35 @@ struct DVDCopyrightImpUse {
	uint8_t		protectionSystemInfo[4];
} __packed;

/* Application Use Extended Attribute (UDF 2.50 3.3.4.6) */
/* FreeAppEASpace (UDF 2.50 3.3.4.6.1) */
/* Logical Volume Extended Information (UDF 1.50 Errata, DCN 5003, 3.3.4.5.1.3) */
struct LVExtensionEA {
	__le16		headerChecksum;
	__le64		verificationID;
	__le32		numFiles;
	__le32		numDirs;
	dstring		logicalVolIdent[128];
} __packed;

/* Application Use Extended Attribute (UDF 2.60 3.3.4.6) */
/* FreeAppEASpace (UDF 2.60 3.3.4.6.1) */
struct freeAppEASpace {
	__le16		headerChecksum;
	uint8_t		freeEASpace[0];
} __packed;

/* UDF Defined System Stream (UDF 2.50 3.3.7) */
/* UDF Defined System Stream (UDF 2.60 3.3.7) */
#define UDF_ID_UNIQUE_ID		"*UDF Unique ID Mapping Data"
#define UDF_ID_NON_ALLOC		"*UDF Non-Allocatable Space"
#define UDF_ID_POWER_CAL		"*UDF Power Cal Table"
#define UDF_ID_BACKUP			"*UDF Backup"

/* Operating System Identifiers (UDF 2.50 6.3) */
/* UDF Defined Non-System Streams (UDF 2.60 3.3.8) */
#define UDF_ID_MAC_RESOURCE_FORK_STREAM	"*UDF Macintosh Resource Fork"
/* #define UDF_ID_OS2_EA		"*UDF OS/2 EA" */
#define UDF_ID_NT_ACL			"*UDF NT ACL"
#define UDF_ID_UNIX_ACL			"*UDF UNIX ACL"

/* Operating System Identifiers (UDF 2.60 6.3) */
#define UDF_OS_CLASS_UNDEF		0x00U
#define UDF_OS_CLASS_DOS		0x01U
#define UDF_OS_CLASS_OS2		0x02U
@@ -276,6 +305,7 @@ struct freeAppEASpace {
#define UDF_OS_ID_LINUX			0x05U
#define UDF_OS_ID_MKLINUX		0x06U
#define UDF_OS_ID_FREEBSD		0x07U
#define UDF_OS_ID_NETBSD		0x08U
#define UDF_OS_ID_WIN9X			0x00U
#define UDF_OS_ID_WINNT			0x00U
#define UDF_OS_ID_OS400			0x00U