udf_167.h
上传用户:poi891205
上传日期:2013-07-15
资源大小:9745k
文件大小:27k
源码类别:

DVD

开发平台:

C/C++

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