⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ecma_167.h

📁 这是Linux系统下的对UDF文件系统新增的功能
💻 H
📖 第 1 页 / 共 2 页
字号:
/* * ecma_167.h * * This file is based on ECMA-167 3rd edition (June 1997) * http://www.ecma.ch * * Copyright (c) 2001-2003  Ben Fennema <bfennema@falcon.csc.calpoly.edu> * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions, and the following disclaimer, *    without modification. * 2. The name of the author may not be used to endorse or promote products *    derived from this software without specific prior written permission. * * Alternatively, this software may be distributed under the terms of the * GNU Public License ("GPL"). * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */#include <linux/types.h>#ifndef _ECMA_167_H#define _ECMA_167_H 1/* Character set specification (ECMA 167r3 1/7.2.1) */typedef struct{	uint8_t		charSetType;	uint8_t		charSetInfo[63];} __attribute__ ((packed)) charspec;/* Character Set Type (ECMA 167r3 1/7.2.1.1) */#define CHARSPEC_TYPE_CS0		0x00	/* (1/7.2.2) */#define CHARSPEC_TYPE_CS1		0x01	/* (1/7.2.3) */#define CHARSPEC_TYPE_CS2		0x02	/* (1/7.2.4) */#define CHARSPEC_TYPE_CS3		0x03	/* (1/7.2.5) */#define CHARSPEC_TYPE_CS4		0x04	/* (1/7.2.6) */#define CHARSPEC_TYPE_CS5		0x05	/* (1/7.2.7) */#define CHARSPEC_TYPE_CS6		0x06	/* (1/7.2.8) */#define CHARSPEC_TYPE_CS7		0x07	/* (1/7.2.9) */#define CHARSPEC_TYPE_CS8		0x08	/* (1/7.2.10) */typedef uint8_t		dstring;/* Timestamp (ECMA 167r3 1/7.3) */typedef struct{	uint16_t	typeAndTimezone;	int16_t		year;	uint8_t		month;	uint8_t		day;	uint8_t		hour;	uint8_t		minute;	uint8_t		second;	uint8_t		centiseconds;	uint8_t		hundredsOfMicroseconds;	uint8_t		microseconds;} __attribute__ ((packed)) timestamp;/* Type and Time Zone (ECMA 167r3 1/7.3.1) */#define TIMESTAMP_TYPE_MASK		0xF000#define TIMESTAMP_TYPE_CUT		0x0000#define TIMESTAMP_TYPE_LOCAL		0x1000#define TIMESTAMP_TYPE_AGREEMENT	0x2000#define TIMESTAMP_TIMEZONE_MASK		0x0FFF/* Entity identifier (ECMA 167r3 1/7.4) */typedef struct{	uint8_t		flags;	uint8_t		ident[23];	uint8_t		identSuffix[8];} __attribute__ ((packed)) regid;/* Flags (ECMA 167r3 1/7.4.1) */#define ENTITYID_FLAGS_DIRTY		0x00#define ENTITYID_FLAGS_PROTECTED	0x01/* Volume Structure Descriptor (ECMA 167r3 2/9.1) */#define VSD_STD_ID_LEN			5struct volStructDesc{	uint8_t		structType;	uint8_t		stdIdent[VSD_STD_ID_LEN];	uint8_t		structVersion;	uint8_t		structData[2041];} __attribute__ ((packed));/* Standard Identifier (EMCA 167r2 2/9.1.2) */#define VSD_STD_ID_NSR02		"NSR02"	/* (3/9.1) *//* Standard Identifier (ECMA 167r3 2/9.1.2) */#define VSD_STD_ID_BEA01		"BEA01"	/* (2/9.2) */#define VSD_STD_ID_BOOT2		"BOOT2"	/* (2/9.4) */#define VSD_STD_ID_CD001		"CD001"	/* (ECMA-119) */#define VSD_STD_ID_CDW02		"CDW02"	/* (ECMA-168) */#define VSD_STD_ID_NSR03		"NSR03"	/* (3/9.1) */#define VSD_STD_ID_TEA01		"TEA01"	/* (2/9.3) *//* Beginning Extended Area Descriptor (ECMA 167r3 2/9.2) */struct beginningExtendedAreaDesc{	uint8_t		structType;	uint8_t		stdIdent[VSD_STD_ID_LEN];	uint8_t		structVersion;	uint8_t		structData[2041];} __attribute__ ((packed));/* Terminating Extended Area Descriptor (ECMA 167r3 2/9.3) */struct terminatingExtendedAreaDesc{	uint8_t		structType;	uint8_t		stdIdent[VSD_STD_ID_LEN];	uint8_t		structVersion;	uint8_t		structData[2041];} __attribute__ ((packed));/* Boot Descriptor (ECMA 167r3 2/9.4) */struct bootDesc{	uint8_t		structType;	uint8_t		stdIdent[VSD_STD_ID_LEN];	uint8_t		structVersion;	uint8_t		reserved1;	regid		archType;	regid		bootIdent;	uint32_t	bootExtLocation;	uint32_t	bootExtLength;	uint64_t	loadAddress;	uint64_t	startAddress;	timestamp	descCreationDateAndTime;	uint16_t	flags;	uint8_t		reserved2[32];	uint8_t		bootUse[1906];} __attribute__ ((packed));/* Flags (ECMA 167r3 2/9.4.12) */#define BOOT_FLAGS_ERASE		0x01/* Extent Descriptor (ECMA 167r3 3/7.1) */typedef struct{	uint32_t	extLength;	uint32_t	extLocation;} __attribute__ ((packed)) extent_ad;/* Descriptor Tag (ECMA 167r3 3/7.2) */typedef struct{	uint16_t	tagIdent;	uint16_t	descVersion;	uint8_t		tagChecksum;	uint8_t		reserved;	uint16_t	tagSerialNum;	uint16_t	descCRC;	uint16_t	descCRCLength;	uint32_t	tagLocation;} __attribute__ ((packed)) tag;/* Tag Identifier (ECMA 167r3 3/7.2.1) */#define TAG_IDENT_PVD			0x0001#define TAG_IDENT_AVDP			0x0002#define TAG_IDENT_VDP			0x0003#define TAG_IDENT_IUVD			0x0004#define TAG_IDENT_PD			0x0005#define TAG_IDENT_LVD			0x0006#define TAG_IDENT_USD			0x0007#define TAG_IDENT_TD			0x0008#define TAG_IDENT_LVID			0x0009/* NSR Descriptor (ECMA 167r3 3/9.1) */struct NSRDesc{	uint8_t		structType;	uint8_t		stdIdent[VSD_STD_ID_LEN];	uint8_t		structVersion;	uint8_t		reserved;	uint8_t		structData[2040];} __attribute__ ((packed));	/* Primary Volume Descriptor (ECMA 167r3 3/10.1) */struct primaryVolDesc{	tag		descTag;	uint32_t	volDescSeqNum;	uint32_t	primaryVolDescNum;	dstring		volIdent[32];	uint16_t	volSeqNum;	uint16_t	maxVolSeqNum;	uint16_t	interchangeLvl;	uint16_t	maxInterchangeLvl;	uint32_t	charSetList;	uint32_t	maxCharSetList;	dstring		volSetIdent[128];	charspec	descCharSet;	charspec	explanatoryCharSet;	extent_ad	volAbstract;	extent_ad	volCopyright;	regid		appIdent;	timestamp	recordingDateAndTime;	regid		impIdent;	uint8_t		impUse[64];	uint32_t	predecessorVolDescSeqLocation;	uint16_t	flags;	uint8_t		reserved[22];} __attribute__ ((packed));/* Flags (ECMA 167r3 3/10.1.21) */#define PVD_FLAGS_VSID_COMMON		0x0001/* Anchor Volume Descriptor Pointer (ECMA 167r3 3/10.2) */struct anchorVolDescPtr{	tag		descTag;	extent_ad	mainVolDescSeqExt;	extent_ad	reserveVolDescSeqExt;	uint8_t	 	reserved[480];} __attribute__ ((packed));/* Volume Descriptor Pointer (ECMA 167r3 3/10.3) */struct volDescPtr{	tag		descTag;	uint32_t	volDescSeqNum;	extent_ad	nextVolDescSeqExt;	uint8_t		reserved[484];} __attribute__ ((packed));/* Implementation Use Volume Descriptor (ECMA 167r3 3/10.4) */struct impUseVolDesc{	tag		descTag;	uint32_t	volDescSeqNum;	regid		impIdent;	uint8_t		impUse[460];} __attribute__ ((packed));/* Partition Descriptor (ECMA 167r3 3/10.5) */struct partitionDesc{	tag		descTag;	uint32_t	volDescSeqNum;	uint16_t	partitionFlags;	uint16_t	partitionNumber;	regid		partitionContents;	uint8_t		partitionContentsUse[128];	uint32_t	accessType;	uint32_t	partitionStartingLocation;	uint32_t	partitionLength;	regid		impIdent;	uint8_t		impUse[128];	uint8_t		reserved[156];} __attribute__ ((packed));/* Partition Flags (ECMA 167r3 3/10.5.3) */#define PD_PARTITION_FLAGS_ALLOC	0x0001/* Partition Contents (ECMA 167r2 3/10.5.3) */#define PD_PARTITION_CONTENTS_NSR02	"+NSR02"/* Partition Contents (ECMA 167r3 3/10.5.5) */#define PD_PARTITION_CONTENTS_FDC01	"+FDC01"#define PD_PARTITION_CONTENTS_CD001	"+CD001"#define PD_PARTITION_CONTENTS_CDW02	"+CDW02"#define PD_PARTITION_CONTENTS_NSR03	"+NSR03"/* Access Type (ECMA 167r3 3/10.5.7) */#define PD_ACCESS_TYPE_NONE		0x00000000#define PD_ACCESS_TYPE_READ_ONLY	0x00000001#define PD_ACCESS_TYPE_WRITE_ONCE	0x00000002#define PD_ACCESS_TYPE_REWRITABLE	0x00000003#define PD_ACCESS_TYPE_OVERWRITABLE	0x00000004/* Logical Volume Descriptor (ECMA 167r3 3/10.6) */struct logicalVolDesc{	tag		descTag;	uint32_t	volDescSeqNum;	charspec	descCharSet;	dstring		logicalVolIdent[128];	uint32_t	logicalBlockSize;	regid		domainIdent;	uint8_t		logicalVolContentsUse[16];	uint32_t	mapTableLength;	uint32_t	numPartitionMaps;	regid		impIdent;	uint8_t		impUse[128];	extent_ad	integritySeqExt;	uint8_t		partitionMaps[0];} __attribute__ ((packed));/* Generic Partition Map (ECMA 167r3 3/10.7.1) */struct genericPartitionMap{	uint8_t		partitionMapType;	uint8_t		partitionMapLength;	uint8_t		partitionMapping[0];} __attribute__ ((packed));/* 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_2		0x02/* Type 1 Partition Map (ECMA 167r3 3/10.7.2) */struct genericPartitionMap1{	uint8_t		partitionMapType;	uint8_t		partitionMapLength;	uint16_t	volSeqNum;	uint16_t	partitionNum;} __attribute__ ((packed));/* Type 2 Partition Map (ECMA 167r3 3/10.7.3) */struct genericPartitionMap2{	uint8_t		partitionMapType;	uint8_t		partitionMapLength; 	uint8_t		partitionIdent[62];} __attribute__ ((packed));/* Unallocated Space Descriptor (ECMA 167r3 3/10.8) */struct unallocSpaceDesc{	tag		descTag;	uint32_t	volDescSeqNum;	uint32_t	numAllocDescs;	extent_ad	allocDescs[0];} __attribute__ ((packed));/* Terminating Descriptor (ECMA 167r3 3/10.9) */struct terminatingDesc{	tag		descTag;	uint8_t		reserved[496];} __attribute__ ((packed));/* Logical Volume Integrity Descriptor (ECMA 167r3 3/10.10) */struct logicalVolIntegrityDesc{	tag		descTag;	timestamp	recordingDateAndTime;	uint32_t	integrityType;	extent_ad	nextIntegrityExt;	uint8_t		logicalVolContentsUse[32];	uint32_t	numOfPartitions;	uint32_t	lengthOfImpUse;	uint32_t	freeSpaceTable[0];	uint32_t	sizeTable[0];	uint8_t		impUse[0];} __attribute__ ((packed));/* Integrity Type (ECMA 167r3 3/10.10.3) */#define LVID_INTEGRITY_TYPE_OPEN	0x00000000#define LVID_INTEGRITY_TYPE_CLOSE	0x00000001/* Recorded Address (ECMA 167r3 4/7.1) */typedef struct {	uint32_t	logicalBlockNum;	uint16_t	partitionReferenceNum;} __attribute__ ((packed)) lb_addr;/* Short Allocation Descriptor (ECMA 167r3 4/14.14.1) */typedef struct{        uint32_t	extLength;        uint32_t	extPosition;} __attribute__ ((packed)) short_ad;/* Long Allocation Descriptor (ECMA 167r3 4/14.14.2) */typedef struct{	uint32_t	extLength;	lb_addr		extLocation;	uint8_t		impUse[6];} __attribute__ ((packed)) long_ad;/* Extended Allocation Descriptor (ECMA 167r3 4/14.14.3) */typedef struct{	uint32_t	extLength;	uint32_t	recordedLength;	uint32_t	informationLength;	lb_addr		extLocation;} __attribute__ ((packed)) ext_ad;/* Descriptor Tag (ECMA 167r3 4/7.2 - See 3/7.2) *//* Tag Identifier (ECMA 167r3 4/7.2.1) */#define TAG_IDENT_FSD			0x0100#define TAG_IDENT_FID			0x0101#define TAG_IDENT_AED			0x0102#define TAG_IDENT_IE			0x0103#define TAG_IDENT_TE			0x0104#define TAG_IDENT_FE			0x0105#define TAG_IDENT_EAHD			0x0106

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -