udf_167.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:19k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. #if !defined(_LINUX_UDF_167_H)
  2. #define _LINUX_UDF_167_H
  3. /*
  4.  * udf_167.h
  5.  *
  6.  * DESCRIPTION
  7.  * Definitions from the ECMA 167 standard.
  8.  * http://www.ecma.ch/
  9.  *
  10.  * These abbreviations are used to keep the symbols short:
  11.  * Alloc Allocation
  12.  * App Application
  13.  * Attr Attribute
  14.  * Char Characters
  15.  * Desc Descriptor
  16.  * Descs Descriptors
  17.  * Ext Extent
  18.  * Ident Identifier
  19.  * Imp Implementation
  20.  * Lvl Level
  21.  * Max Maximum
  22.  * Num Number
  23.  * Ptr Pointer
  24.  * Seq Sequence
  25.  * Std Standard
  26.  * Struct Structure
  27.  * Vol Volume
  28.  * The symbols are otherwise identical to the standard, and the
  29.  * sections of the standard to refer to are indicated.
  30.  *
  31.  * CONTACTS
  32.  * E-mail regarding any portion of the Linux UDF file system should be
  33.  * directed to the development team mailing list (run by majordomo):
  34.  * linux_udf@hpesjro.fc.hp.com
  35.  *
  36.  * COPYRIGHT
  37.  * This file is distributed under the terms of the GNU General Public
  38.  * License (GPL). Copies of the GPL can be obtained from:
  39.  * ftp://prep.ai.mit.edu/pub/gnu/GPL
  40.  * Each contributing author retains all rights to their own work.
  41.  *
  42.  * HISTORY
  43.  * July 12, 1997 - Andrew E. Mileski
  44.  * Adapted from the ECMA-167 standard.
  45.  *
  46.  * 10/2/98 dgb Adaptation
  47.  * 10/4/98  Changes by HJA Sandkuyl
  48.  * 10/7/98 Changed FILE_EXISTENCE to FILE_HIDDEN, per UDF 2.0 spec
  49.  * 11/26/98 Modifed some entries for UDF 1.5/2.0
  50.  * 11/26/98 bf  Fixed typos, non-linux types, more structures
  51.  * 12/5/98 dgb  Adjusted structure and content of include files.
  52.  */
  53. #ifdef __KERNEL__
  54. #include <linux/types.h>
  55. #define Uint8 __u8
  56. #define Sint8 __s8
  57. #define Uint16 __u16
  58. #define Sint16 __s16
  59. #define Uint32 __u32
  60. #define Sint32 __s32
  61. #define Uint64 __u64
  62. #define Sint64 __s64
  63. typedef Uint8 dstring;
  64. #else
  65. #define Uint8 unsigned char
  66. #define Sint8 char
  67. #define Uint16 unsigned short
  68. #define Sint16 short
  69. #define Uint32 unsigned int
  70. #define Sint32 int
  71. #define Uint64 unsigned long long
  72. #define Sint64 long long
  73. typedef Uint8 dstring;
  74. #endif
  75. /* make sure all structures are packed! */
  76. #pragma pack(1)
  77. /* CS0 Charspec (ECMA 167 1/7.2.1) */
  78. typedef struct {
  79. Uint8 charSetType;
  80. Uint8 charSetInfo[63];
  81. } charspec;
  82. /* Timestamp (ECMA 167 1/7.3) */
  83. typedef struct {
  84. Uint16 typeAndTimezone;
  85. Uint16 year;
  86. Uint8 month;
  87. Uint8 day;
  88. Uint8 hour;
  89. Uint8 minute;
  90. Uint8 second;
  91. Uint8 centiseconds;
  92. Uint8 hundredsOfMicroseconds;
  93. Uint8 microseconds;
  94. } timestamp;
  95. /* Timestamp types (ECMA 167 1/7.3.1) */
  96. #define TIMESTAMP_TYPE_CUT 0x0000U
  97. #define TIMESTAMP_TYPE_LOCAL 0x0001U
  98. #define TIMESTAMP_TYPE_AGREEMENT 0x0002U
  99. /* Entity Identifier (ECMA 167 1/7.4) */
  100. typedef struct {
  101. Uint8 flags;
  102. Uint8 ident[23];
  103. Uint8 identSuffix[8];
  104. } EntityID;
  105. #define regid EntityID
  106. /* Entity identifier flags (ECMA 167 1/7.4.1) */
  107. #define ENTITYID_FLAGS_DIRTY 0x01U
  108. #define ENTITYID_FLAGS_PROTECTED 0x02U
  109. /* Volume Structure Descriptor (ECMA 167 2/9.1) */
  110. #define STD_ID_LEN 5
  111. struct VolStructDesc {
  112. Uint8 structType;
  113. Uint8 stdIdent[STD_ID_LEN];
  114. Uint8 structVersion;
  115. Uint8 structData[2041];
  116. };
  117. /* Std structure identifiers (ECMA 167 2/9.1.2) */
  118. #define STD_ID_BEA01 "BEA01"
  119. #define STD_ID_BOOT2 "BOOT2"
  120. #define STD_ID_CD001 "CD001"
  121. #define STD_ID_CDW02 "CDW02"
  122. #define STD_ID_NSR02 "NSR02"
  123. #define STD_ID_NSR03 "NSR03"
  124. #define STD_ID_TEA01 "TEA01"
  125. /* Beginning Extended Area Descriptor (ECMA 167 2/9.2) */
  126. struct BeginningExtendedAreaDesc {
  127. Uint8 structType;
  128. Uint8 stdIdent[STD_ID_LEN];
  129. Uint8 structVersion;
  130. Uint8 structData[2041];
  131. };
  132. /* Terminating Extended Area Descriptor (ECMA 167 2/9.3) */
  133. struct TerminatingExtendedAreaDesc {
  134. Uint8 structType;
  135. Uint8 stdIdent[STD_ID_LEN];
  136. Uint8 structVersion;
  137. Uint8 structData[2041];
  138. };
  139. /* Boot Descriptor (ECMA 167 2/9.4) */
  140. struct BootDesc {
  141. Uint8 structType;
  142. Uint8 stdIdent[STD_ID_LEN];
  143. Uint8 structVersion;
  144. Uint8 reserved1;
  145. EntityID architectureType;
  146. EntityID bootIdent;
  147. Uint32 bootExtLocation;
  148. Uint32 bootExtLength;
  149. Uint64 loadAddress;
  150. Uint64 startAddress;
  151. timestamp descCreationDateAndTime;
  152. Uint16 flags;
  153. Uint8 reserved2[32];
  154. Uint8 bootUse[1906];
  155. };
  156. /* Boot flags (ECMA 167 2/9.4.12) */
  157. #define BOOT_FLAGS_ERASE 1
  158. /* Extent Descriptor (ECMA 167 3/7.1) */
  159. typedef struct {
  160. Uint32 extLength;
  161. Uint32 extLocation;
  162. } extent_ad;
  163. /* Descriptor Tag (ECMA 167 3/7.2) */
  164. typedef struct {
  165. Uint16 tagIdent;
  166. Uint16 descVersion;
  167. Uint8 tagChecksum;
  168. Uint8 reserved;
  169. Uint16 tagSerialNum;
  170. Uint16 descCRC;
  171. Uint16 descCRCLength;
  172. Uint32 tagLocation;
  173. } tag;
  174. /* Tag Identifiers (ECMA 167 3/7.2.1) */
  175. #define TID_UNUSED_DESC 0x0000U
  176. #define TID_PRIMARY_VOL_DESC 0x0001U
  177. #define TID_ANCHOR_VOL_DESC_PTR 0x0002U
  178. #define TID_VOL_DESC_PTR 0x0003U
  179. #define TID_IMP_USE_VOL_DESC 0x0004U
  180. #define TID_PARTITION_DESC 0x0005U
  181. #define TID_LOGICAL_VOL_DESC 0x0006U
  182. #define TID_UNALLOC_SPACE_DESC 0x0007U
  183. #define TID_TERMINATING_DESC 0x0008U
  184. #define TID_LOGICAL_VOL_INTEGRITY_DESC 0x0009U
  185. /* Tag Identifiers (ECMA 167 4/7.2.1) */
  186. #define TID_FILE_SET_DESC 0x0100U
  187. #define TID_FILE_IDENT_DESC 0x0101U
  188. #define TID_ALLOC_EXTENT_DESC 0x0102U
  189. #define TID_INDIRECT_ENTRY 0x0103U
  190. #define TID_TERMINAL_ENTRY 0x0104U
  191. #define TID_FILE_ENTRY 0x0105U
  192. #define TID_EXTENDED_ATTRE_HEADER_DESC 0x0106U
  193. #define TID_UNALLOCATED_SPACE_ENTRY 0x0107U
  194. #define TID_SPACE_BITMAP_DESC 0x0108U
  195. #define TID_PARTITION_INTEGRITY_ENTRY 0x0109U
  196. #define TID_EXTENDED_FILE_ENTRY 0x010AU
  197. /* NSR Descriptor (ECMA 167 3/9.1) */
  198. struct NSRDesc {
  199. Uint8 structType;
  200. Uint8 stdIdent[STD_ID_LEN];
  201. Uint8 structVersion;
  202. Uint8 reserved;
  203. Uint8 structData[2040];
  204. };
  205. /* Primary Volume Descriptor (ECMA 167 3/10.1) */
  206. struct PrimaryVolDesc {
  207. tag descTag;
  208. Uint32 volDescSeqNum;
  209. Uint32 primaryVolDescNum;
  210. dstring volIdent[32];
  211. Uint16 volSeqNum;
  212. Uint16 maxVolSeqNum;
  213. Uint16 interchangeLvl;
  214. Uint16 maxInterchangeLvl;
  215. Uint32 charSetList;
  216. Uint32 maxCharSetList;
  217. dstring volSetIdent[128];
  218. charspec descCharSet;
  219. charspec explanatoryCharSet;
  220. extent_ad volAbstract;
  221. extent_ad volCopyright;
  222. EntityID appIdent;
  223. timestamp recordingDateAndTime;
  224. EntityID impIdent;
  225. Uint8 impUse[64];
  226. Uint32 predecessorVolDescSeqLocation;
  227. Uint16 flags;
  228. Uint8 reserved[22];
  229. };
  230. /* Primary volume descriptor flags (ECMA 167 3/10.1.21) */
  231. #define VOL_SET_IDENT 1
  232. /* Anchor Volume Descriptor Pointer (ECMA 167 3/10.2) */
  233. struct AnchorVolDescPtr {
  234. tag descTag;
  235. extent_ad mainVolDescSeqExt;
  236. extent_ad reserveVolDescSeqExt;
  237. Uint8 reserved[480];
  238. };
  239. /* Volume Descriptor Pointer (ECMA 167 3/10.3) */
  240. struct VolDescPtr {
  241. tag descTag;
  242. Uint32 volDescSeqNum;
  243. extent_ad nextVolDescSeqExt;
  244. Uint8 reserved[484];
  245. };
  246. /* Implementation Use Volume Descriptor (ECMA 167 3/10.4) */
  247. struct ImpUseVolDesc {
  248. tag descTag;
  249. Uint32 volDescSeqNum;
  250. EntityID impIdent;
  251. Uint8 impUse[460];
  252. };
  253. /* Partition Descriptor (ECMA 167 3/10.5) */
  254. struct PartitionDesc {
  255. tag descTag;
  256. Uint32 volDescSeqNum;
  257. Uint16 partitionFlags;
  258. Uint16 partitionNumber;
  259. EntityID partitionContents;
  260. Uint8 partitionContentsUse[128];
  261. Uint32 accessType;
  262. Uint32 partitionStartingLocation;
  263. Uint32 partitionLength;
  264. EntityID impIdent;
  265. Uint8 impUse[128];
  266. Uint8 reserved[156];
  267. };
  268. /* Partition Flags (ECMA 167 3/10.5.3) */
  269. #define PARTITION_FLAGS_ALLOC 1
  270. /* Partition Contents (ECMA 167 3/10.5.5) */
  271. #define PARTITION_CONTENTS_FDC01 "+FDC01"
  272. #define PARTITION_CONTENTS_CD001 "+CD001"
  273. #define PARTITION_CONTENTS_CDW02 "+CDW02"
  274. #define PARTITION_CONTENTS_NSR02 "+NSR02"
  275. #define PARTITION_CONTENTS_NSR03 "+NSR03"
  276. /* Partition Access Types (ECMA 167 3/10.5.7) */
  277. #define PARTITION_ACCESS_NONE 0
  278. #define PARTITION_ACCESS_R 1
  279. #define PARTITION_ACCESS_WO 2
  280. #define PARTITION_ACCESS_RW 3
  281. #define PARTITION_ACCESS_OW 4
  282. /* Logical Volume Descriptor (ECMA 167 3/10.6) */
  283. struct LogicalVolDesc {
  284. tag descTag;
  285. Uint32 volDescSeqNum;
  286. charspec descCharSet;
  287. dstring logicalVolIdent[128];
  288. Uint32 logicalBlockSize;
  289. EntityID domainIdent;
  290. Uint8 logicalVolContentsUse[16]; /* used to find fileset */
  291. Uint32 mapTableLength;
  292. Uint32 numPartitionMaps;
  293. EntityID impIdent;
  294. Uint8 impUse[128];
  295. extent_ad integritySeqExt;
  296. Uint8 partitionMaps[0];
  297. };
  298. /* Generic Partition Map (ECMA 167 3/10.7.1) */
  299. struct GenericPartitionMap {
  300. Uint8 partitionMapType;
  301. Uint8 partitionMapLength;
  302. Uint8 partitionMapping[0];
  303. };
  304. /* Partition Map Type (ECMA 167 3/10.7.1.1) */
  305. #define PARTITION_MAP_TYPE_NONE 0
  306. #define PARTITION_MAP_TYPE_1 1
  307. #define PARTITION_MAP_TYPE_2 2
  308. /* Type 1 Partition Map (ECMA 167 3/10.7.2) */
  309. struct GenericPartitionMap1 {
  310. Uint8 partitionMapType;
  311. Uint8 partitionMapLength;
  312. Uint16 volSeqNum;
  313. Uint16 partitionNum;
  314. };
  315. /* Type 2 Partition Map (ECMA 167 3/10.7.3) */
  316. struct GenericPartitionMap2 {
  317. Uint8 partitionMapType; /* 2 */
  318. Uint8 partitionMapLength; 
  319. Uint8 partitionIdent[62];
  320. };
  321. /* Unallocated Space Descriptor (ECMA 167 3/10.8) */
  322. struct UnallocatedSpaceDesc {
  323. tag descTag;
  324. Uint32 volDescSeqNum;
  325. Uint32 numAllocDescs;
  326. extent_ad allocDescs[0];
  327. };
  328. /* Terminating Descriptor (ECMA 3/10.9) */
  329. struct TerminatingDesc {
  330. tag descTag;
  331. Uint8 reserved[496];
  332. };
  333. struct GenericDesc
  334. {
  335.         tag descTag;
  336.         Uint32 volDescSeqNum;
  337. };
  338. /* Logical Volume Integrity Descriptor (ECMA 167 3/10.10) */
  339. struct LogicalVolIntegrityDesc {
  340. tag descTag;
  341. timestamp recordingDateAndTime;
  342. Uint32 integrityType;
  343. extent_ad nextIntegrityExt;
  344. Uint8 logicalVolContentsUse[32];
  345. Uint32 numOfPartitions;
  346. Uint32 lengthOfImpUse;
  347. Uint32 freeSpaceTable[0];
  348. Uint32 sizeTable[0];
  349. Uint8 impUse[0];
  350. };
  351. /* Integrity Types (ECMA 167 3/10.10.3) */
  352. #define INTEGRITY_TYPE_OPEN 0
  353. #define INTEGRITY_TYPE_CLOSE 1
  354. /* Recorded Address (ECMA 167 4/7.1) */
  355. typedef struct {
  356. Uint32 logicalBlockNum;
  357. Uint16 partitionReferenceNum;
  358. } lb_addr;
  359. /* Extent interpretation (ECMA 167 4/14.14.1.1) */
  360. #define EXTENT_RECORDED_ALLOCATED               0x00
  361. #define EXTENT_NOT_RECORDED_ALLOCATED           0x01
  362. #define EXTENT_NOT_RECORDED_NOT_ALLOCATED       0x02
  363. #define EXTENT_NEXT_EXTENT_ALLOCDECS            0x03
  364. /* Long Allocation Descriptor (ECMA 167 4/14.14.2) */
  365. typedef struct {
  366. Uint32 extLength;
  367. lb_addr extLocation;
  368. Uint8 impUse[6];
  369. } long_ad;
  370. /* upper 2 bits of extLength indicate type */
  371. /* File Set Descriptor (ECMA 167 4/14.1) */
  372. struct FileSetDesc {
  373. tag descTag;
  374. timestamp recordingDateAndTime;
  375. Uint16 interchangeLvl;
  376. Uint16 maxInterchangeLvl;
  377. Uint32 charSetList;
  378. Uint32 maxCharSetList;
  379. Uint32 fileSetNum;
  380. Uint32 fileSetDescNum;
  381. charspec logicalVolIdentCharSet;
  382. dstring logicalVolIdent[128];
  383. charspec fileSetCharSet;
  384. dstring fileSetIdent[32];
  385. dstring copyrightFileIdent[32];
  386. dstring abstractFileIdent[32];
  387. long_ad rootDirectoryICB;
  388. EntityID domainIdent;
  389. long_ad nextExt;
  390. long_ad streamDirectoryICB;
  391. Uint8 reserved[32];
  392. };
  393. /* Short Allocation Descriptor (ECMA 167 4/14.14.1) */
  394. typedef struct {
  395. Uint32 extLength;
  396. Uint32 extPosition;
  397. } short_ad;
  398. /* Partition Header Descriptor (ECMA 167 4/14.3) */
  399. struct PartitionHeaderDesc {
  400. short_ad unallocatedSpaceTable;
  401. short_ad unallocatedSpaceBitmap;
  402. short_ad partitionIntegrityTable;
  403. short_ad freedSpaceTable;
  404. short_ad freedSpaceBitmap;
  405. Uint8 reserved[88];
  406. };
  407. /* File Identifier Descriptor (ECMA 167 4/14.4) */
  408. struct FileIdentDesc
  409. {
  410. tag descTag;
  411. Uint16 fileVersionNum; /* 1 */
  412. Uint8 fileCharacteristics;
  413. Uint8 lengthFileIdent;
  414. long_ad icb;
  415. Uint16 lengthOfImpUse;
  416. Uint8 impUse[0];
  417. Uint8 fileIdent[0];
  418. Uint8 padding[0];
  419. };
  420. /* File Characteristics (ECMA 167 4/14.4.3) */
  421. #define FILE_HIDDEN 1
  422. #define FILE_DIRECTORY 2
  423. #define FILE_DELETED 4
  424. #define FILE_PARENT 8
  425. #define FILE_METADATA 0x10 /* UDF 2.0 */
  426. /* Allocation Ext Descriptor (ECMA 167 4/14.5) */
  427. struct AllocExtDesc
  428. {
  429. tag descTag;
  430. Uint32 previousAllocExtLocation;
  431. Uint32 lengthAllocDescs;
  432. };
  433. /* ICB Tag (ECMA 167 4/14.6) */
  434. typedef struct {
  435. Uint32 priorRecordedNumDirectEntries;
  436. Uint16 strategyType;
  437. Uint16 strategyParameter;
  438. Uint16 numEntries;
  439. Uint8 reserved;
  440. Uint8 fileType;
  441. lb_addr parentICBLocation;
  442. Uint16 flags;
  443. } icbtag;
  444. /* ICB File Type (ECMA 167 4/14.6.6) */
  445. #define FILE_TYPE_NONE 0x00U
  446. #define FILE_TYPE_UNALLOC 0x01U
  447. #define FILE_TYPE_INTEGRITY 0x02U
  448. #define FILE_TYPE_INDIRECT 0x03U
  449. #define FILE_TYPE_DIRECTORY 0x04U
  450. #define FILE_TYPE_REGULAR 0x05U
  451. #define FILE_TYPE_BLOCK 0x06U
  452. #define FILE_TYPE_CHAR 0x07U
  453. #define FILE_TYPE_EXTENDED 0x08U
  454. #define FILE_TYPE_FIFO 0x09U
  455. #define FILE_TYPE_SOCKET 0x0aU
  456. #define FILE_TYPE_TERMINAL 0x0bU
  457. #define FILE_TYPE_SYMLINK 0x0cU
  458. #define FILE_TYPE_STREAMDIR 0x0dU /* ECMA 167 4/13 */
  459. /* ICB Flags (ECMA 167 4/14.6.8) */
  460. #define ICB_FLAG_ALLOC_MASK 0x0007U
  461. #define ICB_FLAG_SORTED 0x0008U
  462. #define ICB_FLAG_NONRELOCATABLE 0x0010U
  463. #define ICB_FLAG_ARCHIVE 0x0020U
  464. #define ICB_FLAG_SETUID 0x0040U
  465. #define ICB_FLAG_SETGID 0x0080U
  466. #define ICB_FLAG_STICKY 0x0100U
  467. #define ICB_FLAG_CONTIGUOUS 0x0200U
  468. #define ICB_FLAG_SYSTEM 0x0400U
  469. #define ICB_FLAG_TRANSFORMED 0x0800U
  470. #define ICB_FLAG_MULTIVERSIONS 0x1000U
  471. /* ICB Flags Allocation type(ECMA 167 4/14.6.8) */
  472. #define ICB_FLAG_AD_SHORT 0
  473. #define ICB_FLAG_AD_LONG 1
  474. #define ICB_FLAG_AD_EXTENDED 2
  475. #define ICB_FLAG_AD_IN_ICB 3
  476. /* Indirect Entry (ECMA 167 4/14.7) */
  477. struct IndirectEntry {
  478. tag descTag;
  479. icbtag icbTag;
  480. long_ad indirectICB;
  481. };
  482. /* Terminal Entry (ECMA 167 4/14.8) */
  483. struct TerminalEntry {
  484. tag descTag;
  485. icbtag icbTag;
  486. };
  487. /* File Entry (ECMA 167 4/14.9) */
  488. struct FileEntry {
  489. tag descTag;
  490. icbtag icbTag;
  491. Uint32 uid;
  492. Uint32 gid;
  493. Uint32 permissions;
  494. Uint16 fileLinkCount;
  495. Uint8 recordFormat;
  496. Uint8 recordDisplayAttr;
  497. Uint32 recordLength;
  498. Uint64 informationLength;
  499. Uint64 logicalBlocksRecorded;
  500. timestamp accessTime;
  501. timestamp modificationTime;
  502. timestamp attrTime;
  503. Uint32 checkpoint;
  504. long_ad extendedAttrICB;
  505. EntityID impIdent;
  506. Uint64 uniqueID; /* 0= root, 16- (2^32-1) */
  507. Uint32 lengthExtendedAttr;
  508. Uint32 lengthAllocDescs;
  509. Uint8 extendedAttr[0];
  510. Uint8 allocDescs[0];
  511. };
  512. /* File Permissions (ECMA 167 4/14.9.5) */
  513. #define PERM_O_EXEC 0x00000001U
  514. #define PERM_O_WRITE 0x00000002U
  515. #define PERM_O_READ 0x00000004U
  516. #define PERM_O_CHATTR 0x00000008U
  517. #define PERM_O_DELETE 0x00000010U
  518. #define PERM_G_EXEC 0x00000020U
  519. #define PERM_G_WRITE 0x00000040U
  520. #define PERM_G_READ 0x00000080U
  521. #define PERM_G_CHATTR 0x00000100U
  522. #define PERM_G_DELETE 0x00000200U
  523. #define PERM_U_EXEC 0x00000400U
  524. #define PERM_U_WRITE 0x00000800U
  525. #define PERM_U_READ 0x00001000U
  526. #define PERM_U_CHATTR 0x00002000U
  527. #define PERM_U_DELETE 0x00004000U
  528. /* File Record Format (ECMA 167 4/14.9.7) */
  529. #define RECORD_FMT_NONE 0
  530. #define RECORD_FMT_FIXED_PAD 1
  531. #define RECORD_FMT_FIXED 2
  532. #define RECORD_FMT_VARIABLE8 3
  533. #define RECORD_FMT_VARIABLE16 4
  534. #define RECORD_FMT_VARIABLE16_MSB 5
  535. #define RECORD_FMT_VARIABLE32 6
  536. #define RECORD_FMT_PRINT 7
  537. #define RECORD_FMT_LF 8
  538. #define RECORD_FMT_CR 9
  539. #define RECORD_FMT_CRLF 10
  540. #define RECORD_FMT_LFCR 10
  541. /* Extended Attribute Header Descriptor (ECMA 167 4/14.10.1) */
  542. struct ExtendedAttrHeaderDesc {
  543. tag descTag;
  544. Uint32 impAttrLocation;
  545. Uint32 appAttrLocation;
  546. };
  547. /* Generic Attribute Format (ECMA 4/14.10.2) */
  548. struct GenericAttrFormat {
  549. Uint32 attrType;
  550. Uint8 attrSubtype;
  551. Uint8 reserved[3];
  552. Uint32 attrLength;
  553. Uint8 attrData[0];
  554. };
  555. /* Character Set Attribute Format (ECMA 4/14.10.3) */
  556. struct CharSetAttrFormat {
  557. Uint32 attrType; /* 1 */
  558. Uint8 attrSubtype; /* 1 */
  559. Uint8 reserved[3];
  560. Uint32 attrLength;
  561. Uint32 escapeSeqLength;
  562. Uint8 charSetType;
  563. Uint8 escapeSeq[0];
  564. };
  565. /* Alternate Permissions (ECMA 167 4/14.10.4) */
  566. struct AlternatePermissionsExtendedAttr {
  567. Uint32 attrType; /* 3 */
  568. Uint8 attrSubtype; /* 1 */
  569. Uint8 reserved[3];
  570. Uint32 attrLength;
  571. Uint16 ownerIdent;
  572. Uint16 groupIdent;
  573. Uint16 permission;
  574. };
  575. /* File Times Extended Attribute (ECMA 167 4/14.10.5) */
  576. struct FileTimesExtendedAttr {
  577. Uint32 attrType; /* 5 */
  578. Uint8 attrSubtype; /* 1 */
  579. Uint8 reserved[3];
  580. Uint32 attrLength;
  581. Uint32 dataLength;
  582. Uint32 fileTimeExistence;
  583. Uint8 fileTimes;
  584. };
  585. /* FileTimeExistence (ECMA 167 4/14.10.5.6) */
  586. #define FTE_CREATION 0
  587. #define FTE_DELETION 2
  588. #define FTE_EFFECTIVE 3
  589. #define FTE_BACKUP 5
  590. /* Information Times Extended Attribute (ECMA 167 4/14.10.6) */
  591. struct InfoTimesExtendedAttr {
  592. Uint32 attrType; /* 6 */
  593. Uint8 attrSubtype; /* 1 */
  594. Uint8 reserved[3];
  595. Uint32 attrLength;
  596. Uint32 dataLength;
  597. Uint32 infoTimeExistence;
  598. Uint8 infoTimes[0];
  599. };
  600. /* Device Specification Extended Attribute (ECMA 167 4/14.10.7) */
  601. struct DeviceSpecificationExtendedAttr {
  602. Uint32 attrType; /* 12 */
  603. Uint8 attrSubtype; /* 1 */
  604. Uint8 reserved[3];
  605. Uint32 attrLength;
  606. Uint32 impUseLength;
  607. Uint32 majorDeviceIdent;
  608. Uint32 minorDeviceIdent;
  609. Uint8 impUse[0];
  610. };
  611. /* Implementation Use Extended Attr (ECMA 167 4/14.10.8) */
  612. struct ImpUseExtendedAttr {
  613. Uint32 attrType; /* 2048 */
  614. Uint8 attrSubtype; /* 1 */
  615. Uint8 reserved[3];
  616. Uint32 attrLength;
  617. Uint32 impUseLength;
  618. EntityID impIdent;
  619. Uint8 impUse[0];
  620. };
  621. /* Application Use Extended Attribute (ECMA 167 4/14.10.9) */
  622. struct AppUseExtendedAttr {
  623. Uint32 attrType; /* 65536 */
  624. Uint8 attrSubtype; /* 1 */
  625. Uint8 reserved[3];
  626. Uint32 attrLength;
  627. Uint32 appUseLength;
  628. EntityID appIdent;
  629. Uint8 appUse[0];
  630. };
  631. #define EXTATTR_CHAR_SET 1
  632. #define EXTATTR_ALT_PERMS 3
  633. #define EXTATTR_FILE_TIMES 5
  634. #define EXTATTR_INFO_TIMES 6
  635. #define EXTATTR_DEV_SPEC 12
  636. #define EXTATTR_IMP_USE 2048
  637. #define EXTATTR_APP_USE 65536
  638. /* Unallocated Space Entry (ECMA 167 4/14.11) */
  639. struct UnallocatedSpaceEntry {
  640. tag descTag;
  641. icbtag icbTag;
  642. Uint32 lengthAllocDescs;
  643. Uint8 allocDescs[0];
  644. };
  645. /* Space Bitmap Descriptor (ECMA 167 4/14.12) */
  646. struct SpaceBitmapDesc {
  647. tag descTag;
  648. Uint32 numOfBits;
  649. Uint32 numOfBytes;
  650. Uint8 bitmap[0];
  651. };
  652. /* Partition Integrity Entry (ECMA 167 4/14.13) */
  653. struct PartitionIntegrityEntry {
  654. tag descTag;
  655. icbtag icbTag;
  656. timestamp recordingDateAndTime;
  657. Uint8 integrityType;
  658. Uint8 reserved[175];
  659. EntityID impIdent;
  660. Uint8 impUse[256];
  661. };
  662. /* Extended Allocation Descriptor (ECMA 167 4/14.14.3) */
  663. typedef struct { /* ECMA 167 4/14.14.3 */
  664. Uint32 extLength;
  665. Uint32 recordedLength;
  666. Uint32 informationLength;
  667. lb_addr extLocation;
  668. } ext_ad;
  669. /* Logical Volume Header Descriptor (ECMA 167 4/14.5) */
  670. struct LogicalVolHeaderDesc {
  671. Uint64 uniqueID;
  672. Uint8 reserved[24];
  673. };
  674. /* Path Component (ECMA 167 4/14.16.1) */
  675. struct PathComponent {
  676. Uint8 componentType;
  677. Uint8 lengthComponentIdent;
  678. Uint16 componentFileVersionNum;
  679. dstring componentIdent[0];
  680. };
  681. /* File Entry (ECMA 167 4/14.17) */
  682. struct ExtendedFileEntry {
  683. tag descTag;
  684. icbtag icbTag;
  685. Uint32 uid;
  686. Uint32 gid;
  687. Uint32 permissions;
  688. Uint16 fileLinkCount;
  689. Uint8 recordFormat;
  690. Uint8 recordDisplayAttr;
  691. Uint32 recordLength;
  692. Uint64 informationLength;
  693. Uint64 objectSize;
  694. Uint64 logicalBlocksRecorded;
  695. timestamp accessTime;
  696. timestamp modificationTime;
  697. timestamp createTime;
  698. timestamp attrTime;
  699. Uint32 checkpoint;
  700. Uint32 reserved;
  701. long_ad extendedAttrICB;
  702. long_ad streamDirectoryICB;
  703. EntityID impIdent;
  704. Uint64 uniqueID;
  705. Uint32 lengthExtendedAttr;
  706. Uint32 lengthAllocDescs;
  707. Uint8 extendedAttr[0];
  708. Uint8 allocDescs[0];
  709. };
  710. #pragma pack()
  711. #endif /* !defined(_LINUX_UDF_167_H) */