osta_udf.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:7k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * osta_udf.h
  3.  *
  4.  * This file is based on OSTA UDF(tm) 2.01 (March 15, 2000)
  5.  * http://www.osta.org
  6.  *
  7.  * Copyright (c) 2001-2002  Ben Fennema <bfennema@falcon.csc.calpoly.edu>
  8.  * All rights reserved.
  9.  *
  10.  * Redistribution and use in source and binary forms, with or without
  11.  * modification, are permitted provided that the following conditions
  12.  * are met:
  13.  * 1. Redistributions of source code must retain the above copyright
  14.  *    notice, this list of conditions, and the following disclaimer,
  15.  *    without modification.
  16.  * 2. The name of the author may not be used to endorse or promote products
  17.  *    derived from this software without specific prior written permission.
  18.  *
  19.  * Alternatively, this software may be distributed under the terms of the
  20.  * GNU Public License ("GPL").
  21.  *
  22.  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
  23.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  24.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  25.  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
  26.  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  27.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  28.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  29.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  30.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  31.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  32.  * SUCH DAMAGE.
  33.  */
  34. #include "ecma_167.h"
  35. #ifndef _OSTA_UDF_H
  36. #define _OSTA_UDF_H 1
  37. /* OSTA CS0 Charspec (UDF 2.01 2.1.2) */
  38. #define UDF_CHAR_SET_TYPE 0
  39. #define UDF_CHAR_SET_INFO "OSTA Compressed Unicode"
  40. /* Entity Identifier (UDF 2.01 2.1.5) */
  41. /* Identifiers (UDF 2.01 2.1.5.2) */
  42. #define UDF_ID_DEVELOPER "*Linux UDFFS"
  43. #define UDF_ID_COMPLIANT "*OSTA UDF Compliant"
  44. #define UDF_ID_LV_INFO "*UDF LV Info"
  45. #define UDF_ID_FREE_EA "*UDF FreeEASpace"
  46. #define UDF_ID_FREE_APP_EA "*UDF FreeAppEASpace"
  47. #define UDF_ID_DVD_CGMS "*UDF DVD CGMS Info"
  48. #define UDF_ID_OS2_EA "*UDF OS/2 EA"
  49. #define UDF_ID_OS2_EA_LENGTH "*UDF OS/2 EALength"
  50. #define UDF_ID_MAC_VOLUME "*UDF Mac VolumeInfo"
  51. #define UDF_ID_MAC_FINDER "*UDF Mac FinderInfo"
  52. #define UDF_ID_MAC_UNIQUE "*UDF Mac UniqueIDTable"
  53. #define UDF_ID_MAC_RESOURCE "*UDF Mac ResourceFork"
  54. #define UDF_ID_VIRTUAL "*UDF Virtual Partition"
  55. #define UDF_ID_SPARABLE "*UDF Sparable Partition"
  56. #define UDF_ID_ALLOC "*UDF Virtual Alloc Tbl"
  57. #define UDF_ID_SPARING "*UDF Sparing Table"
  58. /* Identifier Suffix (UDF 2.01 2.1.5.3) */
  59. #define IS_DF_HARD_WRITE_PROTECT 0x01
  60. #define IS_DF_SOFT_WRITE_PROTECT 0x02
  61. struct UDFIdentSuffix
  62. {
  63. uint16_t UDFRevision;
  64. uint8_t OSClass;
  65. uint8_t OSIdentifier;
  66. uint8_t reserved[4];
  67. } __attribute__ ((packed));
  68. struct impIdentSuffix
  69. {
  70. uint8_t OSClass;
  71. uint8_t OSIdentifier;
  72. uint8_t reserved[6];
  73. } __attribute__ ((packed));
  74. struct appIdentSuffix
  75. {
  76. uint8_t impUse[8];
  77. } __attribute__ ((packed));
  78.  
  79. /* Logical Volume Integrity Descriptor (UDF 2.01 2.2.6) */
  80. /* Implementation Use (UDF 2.01 2.2.6.4) */
  81. struct logicalVolIntegrityDescImpUse
  82. {
  83. regid impIdent;
  84. uint32_t numFiles;
  85. uint32_t numDirs;
  86. uint16_t minUDFReadRev;
  87. uint16_t minUDFWriteRev;
  88. uint16_t maxUDFWriteRev;
  89. uint8_t impUse[0];
  90. } __attribute__ ((packed));
  91. /* Implementation Use Volume Descriptor (UDF 2.01 2.2.7) */
  92. /* Implementation Use (UDF 2.01 2.2.7.2) */
  93. struct impUseVolDescImpUse
  94. {
  95. charspec LVICharset;
  96. dstring logicalVolIdent[128];
  97. dstring LVInfo1[36];
  98. dstring LVInfo2[36];
  99. dstring LVInfo3[36];
  100. regid impIdent;
  101. uint8_t impUse[128];
  102. } __attribute__ ((packed));
  103. struct udfPartitionMap2
  104. {
  105. uint8_t partitionMapType;
  106. uint8_t partitionMapLength;
  107. uint8_t reserved1[2];
  108. regid partIdent;
  109. uint16_t volSeqNum;
  110. uint16_t partitionNum;
  111. } __attribute__ ((packed));
  112. /* Virtual Partition Map (UDF 2.01 2.2.8) */
  113. struct virtualPartitionMap
  114. {
  115. uint8_t partitionMapType;
  116. uint8_t partitionMapLength;
  117. uint8_t reserved1[2];
  118. regid partIdent;
  119. uint16_t volSeqNum;
  120. uint16_t partitionNum;
  121. uint8_t reserved2[24];
  122. } __attribute__ ((packed));
  123. /* Sparable Partition Map (UDF 2.01 2.2.9) */
  124. struct sparablePartitionMap
  125. {
  126. uint8_t partitionMapType;
  127. uint8_t partitionMapLength;
  128. uint8_t reserved1[2];
  129. regid partIdent;
  130. uint16_t volSeqNum;
  131. uint16_t partitionNum;
  132. uint16_t packetLength;
  133. uint8_t numSparingTables;
  134. uint8_t reserved2[1];
  135. uint32_t sizeSparingTable;
  136. uint32_t locSparingTable[4];
  137. } __attribute__ ((packed));
  138. /* Virtual Allocation Table (UDF 1.5 2.2.10) */
  139. struct virtualAllocationTable15
  140. {
  141. uint32_t VirtualSector[0];
  142. regid ident;
  143. uint32_t previousVATICB;
  144. } __attribute__ ((packed));  
  145. #define ICBTAG_FILE_TYPE_VAT15 0x00U
  146. /* Virtual Allocation Table (UDF 2.01 2.2.10) */
  147. struct virtualAllocationTable20
  148. {
  149. uint16_t lengthHeader;
  150. uint16_t lengthImpUse;
  151. dstring logicalVolIdent[128];
  152. uint32_t previousVatICBLoc;
  153. uint32_t numFIDSFiles;
  154. uint32_t numFIDSDirectories;
  155. uint16_t minReadRevision;
  156. uint16_t minWriteRevision;
  157. uint16_t maxWriteRevision;
  158. uint16_t reserved;
  159. uint8_t impUse[0];
  160. uint32_t vatEntry[0];
  161. } __attribute__ ((packed));
  162. #define ICBTAG_FILE_TYPE_VAT20 0xF8U
  163. /* Sparing Table (UDF 2.01 2.2.11) */
  164. struct sparingEntry
  165. {
  166. uint32_t origLocation;
  167. uint32_t mappedLocation;
  168. } __attribute__ ((packed));
  169. struct sparingTable
  170. {
  171. tag  descTag;
  172. regid sparingIdent;
  173. uint16_t reallocationTableLen;
  174. uint16_t reserved;
  175. uint32_t sequenceNum;
  176. struct sparingEntry
  177. mapEntry[0];
  178. } __attribute__ ((packed));
  179. /* struct long_ad ICB - ADImpUse (UDF 2.01 2.2.4.3) */
  180. struct allocDescImpUse
  181. {
  182. uint16_t flags;
  183. uint8_t impUse[4];
  184. } __attribute__ ((packed));
  185. #define AD_IU_EXT_ERASED 0x0001
  186. /* Real-Time Files (UDF 2.01 6.11) */
  187. #define ICBTAG_FILE_TYPE_REALTIME 0xF9U
  188. /* Implementation Use Extended Attribute (UDF 2.01 3.3.4.5) */
  189. /* FreeEASpace (UDF 2.01 3.3.4.5.1.1) */
  190. struct freeEaSpace
  191. {
  192. uint16_t headerChecksum;
  193. uint8_t freeEASpace[0];
  194. } __attribute__ ((packed));
  195. /* DVD Copyright Management Information (UDF 2.01 3.3.4.5.1.2) */
  196. struct DVDCopyrightImpUse 
  197. {
  198. uint16_t headerChecksum;
  199. uint8_t CGMSInfo;
  200. uint8_t dataType;
  201. uint8_t protectionSystemInfo[4];
  202. } __attribute__ ((packed));
  203. /* Application Use Extended Attribute (UDF 2.01 3.3.4.6) */
  204. /* FreeAppEASpace (UDF 2.01 3.3.4.6.1) */
  205. struct freeAppEASpace
  206. {
  207. uint16_t headerChecksum;
  208. uint8_t freeEASpace[0];
  209. } __attribute__ ((packed));
  210. /* UDF Defined System Stream (UDF 2.01 3.3.7) */
  211. #define UDF_ID_UNIQUE_ID "*UDF Unique ID Mapping Data"
  212. #define UDF_ID_NON_ALLOC "*UDF Non-Allocatable Space"
  213. #define UDF_ID_POWER_CAL "*UDF Power Cal Table"
  214. #define UDF_ID_BACKUP "*UDF Backup"
  215. /* Operating System Identifiers (UDF 2.01 6.3) */
  216. #define UDF_OS_CLASS_UNDEF 0x00U
  217. #define UDF_OS_CLASS_DOS 0x01U
  218. #define UDF_OS_CLASS_OS2 0x02U
  219. #define UDF_OS_CLASS_MAC 0x03U
  220. #define UDF_OS_CLASS_UNIX 0x04U
  221. #define UDF_OS_CLASS_WIN9X 0x05U
  222. #define UDF_OS_CLASS_WINNT 0x06U
  223. #define UDF_OS_CLASS_OS400 0x07U
  224. #define UDF_OS_CLASS_BEOS 0x08U
  225. #define UDF_OS_CLASS_WINCE 0x09U
  226. #define UDF_OS_ID_UNDEF 0x00U
  227. #define UDF_OS_ID_DOS 0x00U
  228. #define UDF_OS_ID_OS2 0x00U
  229. #define UDF_OS_ID_MAC 0x00U
  230. #define UDF_OS_ID_UNIX 0x00U
  231. #define UDF_OS_ID_AIX 0x01U
  232. #define UDF_OS_ID_SOLARIS 0x02U
  233. #define UDF_OS_ID_HPUX 0x03U
  234. #define UDF_OS_ID_IRIX 0x04U
  235. #define UDF_OS_ID_LINUX 0x05U
  236. #define UDF_OS_ID_MKLINUX 0x06U
  237. #define UDF_OS_ID_FREEBSD 0x07U
  238. #define UDF_OS_ID_WIN9X 0x00U
  239. #define UDF_OS_ID_WINNT 0x00U
  240. #define UDF_OS_ID_OS400 0x00U
  241. #define UDF_OS_ID_BEOS 0x00U
  242. #define UDF_OS_ID_WINCE 0x00U
  243. #endif /* _OSTA_UDF_H */