cdromFsLib.h
上传用户:luoyougen
上传日期:2008-05-12
资源大小:23136k
文件大小:18k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* cdromFsLib.h - ISO 9660 File System definitions */
  2. /* Copyright 1984-1995 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01b,07dec98,lrn  add C++ support (SPR#23776)
  7. 01a,10apr97,dds  SPR#7538: add CDROM file system support to vxWorks.
  8. */
  9. /*
  10.  * currently only ISO 9660 is supported. All data dependent on this 
  11.  * standard has prefix "ISO", or "iso" or "Iso"
  12.  */
  13. #ifndef cdromFsLib_h
  14. #define cdromFsLib_h
  15. #ifdef __cplusplus
  16. extern "C" {
  17. #endif
  18. #include <vxWorks.h>
  19. #include <iosLib.h>
  20. #include <lstLib.h>
  21. #include <semLib.h>
  22. #include <blkIo.h> /* for BLK_DEV */
  23. #include <time.h>
  24. #define KB *1024
  25. #define CDROM_STD_LS_SIZE (2 KB) /* standard cdrom logical sector size */
  26. #if (_BYTE_ORDER == _LITTLE_ENDIAN)
  27. #define BYTE_ORDER_LITTLE_ENDIAN
  28. #define ENDIAN_OFF_SHORT 0
  29. #define ENDIAN_OFF_LONG 0
  30. #elif (_BYTE_ORDER == _BIG_ENDIAN)
  31. #define BYTE_ORDER_BIG_ENDIAN
  32. #define ENDIAN_OFF_SHORT 2
  33. #define ENDIAN_OFF_LONG 4
  34. #else
  35. #error "_BYTE_ORDER must be defined, check compilation flags"
  36. #endif /* (_BYTE_ORDER == _LITTLE_ENDIAN) */
  37. #define LEN32 4 /* for fields reading in CD data descriptors */
  38. #define LEN16 2
  39. #define VD_SET_MAG (0x06200556)
  40. #define VD_LIST_MAG (0x03110364)
  41. #define FD_MAG (0x08211061)
  42. #define SEC_BUF_MAG (0x05071163)
  43. /* ----------- ISO Volume Descriptors ----------- */
  44. /* constants */
  45. #define ISO_PVD_BASE_LS 16
  46. #define ISO_STD_ID "CD001" /* must be in each VD */
  47. #define ISO_STD_ID_SIZE 5 /* must be in each VD */
  48. #define ISO_VD_SIZE 2048
  49. /* VD types: */
  50. #define ISO_VD_BOOT ((u_char)0)
  51. #define ISO_VD_PRIMARY ((u_char)1)
  52. #define ISO_VD_SUPPLEM ((u_char)2)
  53. #define ISO_VD_PARTN ((u_char)3)
  54. #define ISO_VD_SETTERM ((u_char)255)
  55. #define ISO_VD_VERSION ((u_char)1)
  56. /* VD header, may be used as mask, since byte order is stored */
  57. typedef struct isoVdHead
  58.     {
  59.     u_char type; /* any of VD types */
  60.     u_char stdID[ ISO_STD_ID_SIZE ]; /* have to be ISO_STD_ID */
  61.     u_char version; /* have to be ISO_VD_VERSION */
  62.     } T_ISO_VD_HEAD;
  63. typedef T_ISO_VD_HEAD * T_ISO_VD_HEAD_ID;
  64. /*
  65.  * VD-descriptor structure fields data types 
  66.  * volume date-time fields sizes and offsets 
  67.  */
  68. #define ISO_V_DATE_TIME_YEAR         0
  69. #define ISO_V_DATE_TIME_YEAR_SIZE 4
  70. #define ISO_V_DATE_TIME_FIELD_STD_SIZE 2
  71. #define ISO_V_DATE_TIME_MONTH 4
  72. #define ISO_V_DATE_TIME_DAY 6
  73. #define ISO_V_DATE_TIME_HOUR 8
  74. #define ISO_V_DATE_TIME_MINUTE 10
  75. #define ISO_V_DATE_TIME_SEC 12
  76. #define ISO_V_DATE_TIME_100_OF_SEC 14
  77. #define ISO_V_DATE_TIME_FROM_GREENW_OFF 16
  78. #define ISO_V_DATE_TIME_FROM_GREENW_NIMUTE 15
  79. typedef struct isoVDDateTime
  80.     {
  81.     u_char year[ ISO_V_DATE_TIME_YEAR_SIZE ]; /* 1-9999 */
  82.     u_char month[ ISO_V_DATE_TIME_FIELD_STD_SIZE ]; /* 1-12 */
  83.     u_char day[ ISO_V_DATE_TIME_FIELD_STD_SIZE ]; /* 1-31 */
  84.     u_char hour[ ISO_V_DATE_TIME_FIELD_STD_SIZE ]; /* 0-23 */
  85.     u_char minute[ ISO_V_DATE_TIME_FIELD_STD_SIZE ]; /* 0-59 */
  86.     u_char sec[ ISO_V_DATE_TIME_FIELD_STD_SIZE ]; /* 0-59 */
  87.     u_char sec100[ ISO_V_DATE_TIME_FIELD_STD_SIZE ]; /* 0-99 */
  88.     u_char greenwOffBy15Minute;
  89.     } T_ISO_VD_DATE_TIME;
  90. typedef T_ISO_VD_DATE_TIME * T_ISO_VD_DATE_TIME_ID;
  91. /* PVD and SVD fields offsets and sizes */
  92. #define ISO_VD_SYSTEM_ID 8
  93. #define ISO_VD_SYSTEM_ID_SIZE (40-8)
  94. #define ISO_VD_VOLUME_ID 40
  95. #define ISO_VD_VOLUME_ID_SIZE (72-40)
  96. #define ISO_VD_VOL_SPACE_SIZE (80+ENDIAN_OFF_LONG)
  97. #define ISO_VD_ESCAPE_SEC 88
  98. #define ISO_VD_ESCAPE_SEC_SIZE (120-88)
  99. #define ISO_VD_VOL_SET_SIZE (120+ENDIAN_OFF_SHORT)
  100. #define ISO_VD_VOL_SEQUENCE_N (124+ENDIAN_OFF_SHORT)
  101. #define ISO_VD_LB_SIZE (128+ENDIAN_OFF_SHORT)
  102. #define ISO_VD_PT_SIZE (132+ENDIAN_OFF_LONG)
  103. /* 
  104.  * ISO 9660 structures contan some data in both Big and Little endian order
  105.  * Hopefully all mastering software implementations fill them all in 
  106.  */
  107. #ifdef BYTE_ORDER_BIG_ENDIAN
  108. #define ISO_VD_PT_OCCUR 148 /* u_long */
  109. #define ISO_VD_PT_OPT_OCCUR 152 /* u_long */
  110. #else /* BYTE_ORDER_LITTLE_ENDIAN */
  111. #define ISO_VD_PT_OCCUR 140 /* u_long */
  112. #define ISO_VD_PT_OPT_OCCUR 144 /* u_long */
  113. #endif /* BYTE_ORDER_BIG_ENDIAN */
  114. #define ISO_VD_ROOT_DIR_REC 156
  115. #define ISO_VD_ROOT_DIR_REC_SIZE (190-156)
  116. #define ISO_VD_ID_STD_SIZE 128
  117. #define ISO_VD_VOL_SET_ID 190
  118. #define ISO_VD_PUBLISH_ID 318
  119. #define ISO_VD_DATA_PREP_ID 446
  120. #define ISO_VD_APPLIC_ID 574
  121. #define ISO_VD_F_ID_STD_SIZE 37
  122. #define ISO_VD_COPYR_F_ID 702
  123. #define ISO_VD_ABSTR_F_ID 739
  124. #define ISO_VD_BIBLIOGR_F_ID 776
  125. #define ISO_VD_VOL_DATE_TIME_STD_SIZE 17
  126. #define ISO_VD_VOL_CR_DATE_TIME 813
  127. #define ISO_VD_VOL_MODIF_DATE_TIME 830
  128. #define ISO_VD_VOL_EXPIR_DATE_TIME 847
  129. #define ISO_VD_VOL_EFFECT_DATE_TIME 864
  130. #define ISO_VD_FILE_STRUCT_VER 881
  131. #define CDROM_MAX_DIR_LEV 8 /* max dir nesting level */
  132. /* Primary / Supplementary VD, for internal use, not defined by ISO 9660 */
  133. typedef struct isoPrimarySuplementaryVolDescriptor
  134.     {
  135.     u_long volSize; /* logical sector per volume */
  136.     u_long PTSize; /* bytes per Path Table */
  137.     u_long      PTOccur; /* Path table occurence */
  138.     u_long PTOptOccur; /* optional occurence */
  139.     u_long rootDirSize; /* bytes per Root Directory */
  140.     u_long rootDirStartLB; /* where root dir starts */
  141.     u_short volSetSize; /* number of phis devices in set */
  142.     u_short volSeqNum; /* device number in set */
  143.     u_short LBSize; /* pytes per Logical Block */
  144.     u_char type; /* volume descriptor type, have to be one */
  145. /* of ISO_VD_PRIMARY or ISO_VD_SUPPLEM */
  146.     u_char fileStructVersion; /* currently 1 only (ISO) */
  147.     u_char stdID[ ISO_STD_ID_SIZE + 1 ]; /* currently have to be */
  148.      /* ISO_STD_ID */
  149.     u_char systemId[ ISO_VD_SYSTEM_ID_SIZE +1 ]; /* a-u_chars */
  150.     u_char volumeId[ ISO_VD_VOLUME_ID_SIZE +1 ]; /* d-u_chars */
  151.     u_char volSetId[ ISO_VD_ID_STD_SIZE +1 ]; /* d-u_chars */
  152.     u_char publisherId[ ISO_VD_ID_STD_SIZE +1 ]; /* a-u_chars */
  153.     u_char preparerId[ ISO_VD_ID_STD_SIZE +1 ];  /* a-u_chars */
  154.     u_char applicatId[ ISO_VD_ID_STD_SIZE +1 ]; /* a-u_chars */
  155.     u_char cprightFId[ ISO_VD_F_ID_STD_SIZE +1 ];  /* file ID */
  156.     u_char abstractFId[ ISO_VD_F_ID_STD_SIZE +1 ]; /* file ID */
  157.     u_char bibliogrFId[ ISO_VD_F_ID_STD_SIZE +1 ]; /* file ID */
  158.     T_ISO_VD_DATE_TIME creationDate;
  159.     T_ISO_VD_DATE_TIME modificationDate;
  160.     T_ISO_VD_DATE_TIME expirationDate;
  161.     T_ISO_VD_DATE_TIME  effectiveDate;
  162.     } T_ISO_PVD_SVD;
  163. typedef T_ISO_PVD_SVD * T_ISO_PVD_SVD_ID;
  164. /* structure to hold data while files are opened. */
  165. typedef struct secBuf /* buffer for reading sectors */
  166.     {
  167.     u_long startSecNum;
  168.     u_long numSects;
  169.     int    magic;   /* SEC_BUF_MAG after sectData allocation */
  170.     u_char * sectData;
  171.     } SEC_BUF;
  172. typedef SEC_BUF * SEC_BUF_ID;
  173. /* 
  174.  * CDROM_VOL_DESCR - 
  175.  * Since in future it will cover, we'll hope, Rock Ridge extensions, a name
  176.  * has no preffix 'ISO'.
  177.  * Many fields, pertaining to T_ISO_PVD_SVD, are excluded from
  178.  * CDROMFS_VOL_DESCR for memory saving and code simplicity,
  179.  * since they aren't realy use for device control (such as publisherId ...).
  180.  */
  181. typedef struct cdromVolDescr
  182.     {
  183.     DEV_HDR    devHdr; /* for adding to device table */
  184.     int        magic; /* VD_SET_MAG */
  185.     BLK_DEV *  pBlkDev;         /* Ptr to Block Device structure. */
  186.     SEM_ID     mDevSem;         /* device mutual-exclusion semaphore */
  187.     SEC_BUF    sectBuf;         /* Sector reading buffer. must be inited */
  188. /* over cdromFsDevCreate() */
  189.     u_int      sectSize; /* device sector size, copy of  */
  190. /* bd_bytesPerBlk in BLK_DEV */
  191.     LIST       VDList; /* VD list header. All device VD (at least */
  192. /* one primary and each supplementary, if */
  193. /* any exist) are connected to linked list */
  194.     LIST       FDList; /* FD list header. All file descriptors are */
  195. /* connected to linked list for to arrive */
  196. /* each of them in case vol unmount */
  197.     u_char     LSToPhSSizeMult; /* LSSize/PhSSize ( may be need in case */
  198.      /* any blkDevDrv understand cdrom LS size */
  199.      /* less then 2Kb ) */
  200.     u_char     unmounted; /* != 0 => VDList must be bult newrly */
  201.     } CDROM_VOL_DESC;
  202. typedef CDROM_VOL_DESC * CDROM_VOL_DESC_ID;
  203. /* device VDs-list element */
  204. typedef struct cdromVDLst
  205.     {
  206.     NODE list;
  207.     int magic;               /* VD_LIST_MAG */
  208.     CDROM_VOL_DESC_ID pVolDesc; /* ptr to list header's CDROM_VOL_DESC, */
  209.   /* may be uzed as BLK_DEV ptr */
  210.     u_long VDInSector;   /* number of sector, VD is layed in */
  211.     u_long VDOffInSect;   /* VD start offset in the sector */
  212.     u_long volSize;   /* LS per volume */
  213.     u_long PTSize;   /* bytes per Path Table */
  214.     u_long PTStartLB;
  215.     u_long rootDirSize;   /* bytes per Root Directory */
  216.     u_long rootDirStartLB;
  217.     u_short volSetSize;   /* number of phis devices in set */
  218.     u_short volSeqNum;   /* device number in set */
  219.     u_short LBSize;   /* pytes per Logical Block */
  220.     /* In accordance with ISO9660 all directory records in
  221.      * PT are sorted by hierarchy levels and are numbered from 1
  222.      * ( only root has number 1 and is always placed on level 1 ).
  223.      * Number of levels is restricted by 8.
  224.      * dirLevBordersOff[ n ] contains offset of first PT record on level
  225.      * (n+2) (root is excluded and array is encountered from 0) from PT start.
  226.      * dirLevLastRecNum[ n ] contains number of last PT record on level
  227.      * (n+2).
  228.      */
  229.     u_short dirLevBordersOff[ CDROM_MAX_DIR_LEV ]; /* first PT-record */
  230. /* offset in each */
  231. /* level */
  232.     u_short dirLevLastRecNum[ CDROM_MAX_DIR_LEV ]; /* last PT-record */
  233. /* number in each */
  234. /* level */
  235.     u_short numDirLevs; /* number of PT dir hierarchy levels, */
  236. /* exclude root */
  237.     u_short numPTRecs; /* last PT record number (number of records) */
  238.     u_char LBToLSShift; /* to get LS number, containes given LS */
  239. /* number of last may be just shifted */
  240.     u_short type; /* volume descriptor type, have to be one */
  241. /*  of ISO_VD_PRIMARY or ISO_VD_SUPPLEM */
  242.     /* currently 1 only (ISO) */
  243.     u_short fileStructVersion;
  244.     SEC_BUF PTBuf; /* buffer for permanent storage PT during */
  245.      /* volume is mounted */
  246.     } T_CDROMFS_VD_LST;
  247. typedef T_CDROMFS_VD_LST * T_CDROMFS_VD_LST_ID;
  248. /* ISO Path Table record fields offsets and sizes */
  249. #define ISO_PT_REC_LEN_DI 0
  250. #define ISO_PT_REC_EAR_LEN 1
  251. #define ISO_PT_REC_EXTENT_LOCATION 2
  252. #define ISO_PT_REC_PARENT_DIR_N 6 /* short in format due to PT type */
  253. #define ISO_PT_REC_DI 8
  254. /* ISO Directory Record fields offsets and sizes */
  255. #define ISO_DIR_REC_REC_LEN 0
  256. #define ISO_DIR_REC_EAR_LEN 1
  257. #define ISO_DIR_REC_EXTENT_LOCATION (2+ENDIAN_OFF_LONG)
  258. #define ISO_DIR_REC_DATA_LEN (10+ENDIAN_OFF_LONG)
  259. #define ISO_DIR_REC_DATA_TIME 18
  260. #define ISO_DIR_REC_FLAGS 25
  261. #define ISO_DIR_REC_FU_SIZE 26
  262. #define ISO_DIR_REC_IGAP_SIZE 27
  263. #define ISO_DIR_REC_VOL_SEQU_N (28+ENDIAN_OFF_SHORT)
  264. #define ISO_DIR_REC_LEN_FI 32
  265. #define ISO_DIR_REC_FI 33
  266. /* flags masks */
  267. #define DRF_DIRECTORY 0x02
  268. #define DRF_IS_REC_DESCRIPT 0x04 /* file records are described in EAR */
  269. #define DRF_PROTECT             0x10    /* location of user's permissions */
  270. #define DRF_LAST_REC 0x80 /* last file-record */
  271. /* ISO Extended Attribute Record fields offsets and sizes */
  272. #define ISO_EAR_ONER (0+ENDIAN_OFF_SHORT)
  273. #define ISO_EAR_GROUPE (4+ENDIAN_OFF_SHORT)
  274. #define ISO_EAR_PERMIT 8
  275. #define ISO_EAR_F_CR_DATE_TIME_SIZE ISO_VD_VOL_DATE_TIME_STD_SIZE
  276. #define ISO_EAR_F_CR_DATE_TIME 10
  277. #define ISO_EAR_F_MODIF_DATE_TIME 27
  278. #define ISO_EAR_F_EXPIR_DATE_TIME 44
  279. #define ISO_EAR_F_EFFECT_DATE_TIME 81
  280. #define ISO_EAR_REC_FORMAT 78
  281. #define ISO_EAR_REC_ATTR 79
  282. #define ISO_EAR_REC_LEN (80+ENDIAN_OFF_SHORT)
  283. #define ISO_EAR_SYS_ID 84
  284. #define ISO_EAR_SYS_ID_SIZE (116-84)
  285. #define ISO_EAR_SYS_USE 116
  286. #define ISO_EAR_SYS_USE_SIZE (180-116)
  287. #define ISO_EAR_VERSION 180   /* currently have to be 1 (ISO) */
  288. /* EAR-Record Format values */
  289. #define EAR_REC_FORM_IGNORE ((u_char)0)
  290. #define EAR_REC_FORM_FIX_LEN CDROM_MDU_TYPE_FIX
  291. #define EAR_REC_FORM_VAR_LEN_LE CDROM_MDU_TYPE_VAR_LE /* RCW in 7.2.1 */
  292. #define EAR_REC_FORM_FIX_LEN_BE CDROM_MDU_TYPE_VAR_BE /* RCW in 7.2.2 */
  293. /* EAR-Record Attribute values */
  294. #define EAR_REC_ATTR_LF_CR ((u_char)0) /* cr-record-lf */
  295. #define EAR_REC_ATTR_VERT_SP ((u_char)1)
  296. #define EAR_REC_ATTR_CONTROL ((u_char)3)
  297. typedef struct cdromFileDateTime /* directory record date time may be */
  298.     { /* copied directly to this structure */
  299.     u_char year; /* from 1900 */
  300.     u_char month;
  301.     u_char day;
  302.     u_char hour;
  303.     u_char minuts;
  304.     u_char seconds;
  305.     u_char fromGreenwOf;
  306.     } T_FILE_DATE_TIME;
  307. typedef T_FILE_DATE_TIME * T_FILE_DATE_TIME_ID;
  308. #define CDROM_MAX_PATH_LEN 1024
  309. #define CDROM_MAX_FILE_NAME_LEN 64
  310. #define CDROM_MDU_TYPE_FIX ((u_char)1)
  311. #define CDROM_MDU_TYPE_VAR_LE ((u_char)2) /* RCW in 7.2.1 */
  312. #define CDROM_MDU_TYPE_VAR_BE ((u_char)3) /* RCW in 7.2.2 */
  313. #define CDROM_NOT_INTERLEAVED 0
  314. #define CDROM_INTERLEAVED 1
  315. typedef struct cdromFile
  316.     {
  317.     NODE list;
  318.     int magic;   /* FD_MAG */
  319.     u_char inList;   /* != 0 <=> FD added to volume FD list */
  320.     T_CDROMFS_VD_LST_ID pVDList;  /* not need to comment */
  321.     u_char volUnmount;   /* (!= 0) => file unaccessable */
  322.     /* File (F) static data */
  323.     u_char name[ CDROM_MAX_FILE_NAME_LEN + 1 ];
  324.     u_short parentDirNum; /* parent dir PT number */
  325.     u_int parentDirPTOffset; /* parent dir record offset in PT */
  326.     u_long parentDirStartLB;       /* parent DIR start LB     */
  327.     u_long FFirstRecLBNum; /* LB in which file's dir records */
  328.      /* start */
  329.     u_int FFirstDirRecOffInDir; /* offset of first FDR in dir */   
  330.     u_int     FFirstDirRecOffInLB; /* offset of first FDR in  curr LB */
  331.     u_int FNumRecs; /* number of File's Dir Records */
  332.     u_char * FRecords; /* File's Directory Records buffer */
  333.     u_long FStartLB;          /* file first LB ( include EAR ) */
  334.     u_long FDataStartOffInLB; /* file data start LB ( exclude EAR ) */
  335.     u_long FSize;    /* total file data size (netto) */
  336.     u_short FType;    /*  Proper constants are contained in */
  337.         /*  ioLib.h                           */
  338.     u_char FMDUType;    /* EAR_REC_FORM_IGNORE/ */
  339.    /* CDROM_MDU_TYPE_FIX/ */
  340.    /* CDROM_MDU_TYPE_VAR_LE/ */
  341.    /* CDROM_MDU_TYPE_VAR_BE */
  342.     u_short FMDUSize;    /* byte per MDU (=0, in case MDU varLen) */
  343.     /* time-date */
  344.     T_FILE_DATE_TIME FDateTime;
  345.     time_t FDateTimeLong; /* 32-bit seconds */
  346.     SEC_BUF sectBuf; /* Sector reading buffer. must be inited */
  347. /* over openDir() (and may be, over open */
  348. /* too )                                 */
  349.     /* 
  350.      * File Current (FC) Dir Record and File Current Section descriptions 
  351.      * this fields are together used in case directory was opened (not file) 
  352.      */
  353.     u_char * FCDirRecPtr; /* ptr on current dir rec in dir rec buffer */
  354.     u_int FCDirRecNum; /* current dir rec sequence number */
  355.      /* ( counts from 0 )         */
  356.     u_int FCDirRecAbsOff; /* current dir rec offset in directory      */
  357.     u_int FCDirRecOffInLB; /* current dir rec offset within LB        */
  358.     u_long FCDirRecLB; /* number of LB, containing directory record */
  359.     u_long FCSStartLB; /* File Section first LB ( after EAR ) */
  360.     u_long FCSSize; /* FS bytes (exclude EAR) */
  361.     u_long FCSSizeLB; /* LB per FS (exclude EAR) */
  362.     u_long FCSAbsOff; /* total data size in all previous sections */
  363.     u_short FDType; /*  Proper constants are contained in */
  364.      /*  ioLib.h        (use for readdir)  */
  365.     u_char FCSSequenceSetNum; /* current section Volume */
  366. /* Set Setsequence number */
  367.     u_char FCSInterleaved; /* CDROM_INTERLEAVED/CDROM_NOT_INTERLEAVED */
  368. /* just may be checked as bolean */
  369.     u_char FCSFUSizeLB; /* LB per FileUnit */
  370.     u_char FCSGapSizeLB; /* LB per Gap */
  371.     u_char FCSFlags; /* current file section flags */
  372.     /* File Current MDU  (FCMDU)description */
  373.     u_long FCMDUStartLB; /* current MDU start LB number */
  374.     u_short FCMDUSize; /* byte per current MDU */
  375.     /* File Current Data (FCD) positions description */
  376.     u_long FCDAbsLB; /* current absolute LB  number */
  377.     u_long FCDAbsPos; /* current absolute position in file */
  378.     u_int FCDOffInLB; /* offset within current LB */
  379.     u_short FCDOffInMDU; /* offset in current MDU */
  380.     int FCEOF; /* !=0 <=> EOF encounted */
  381.     /* some fields for using this structure for directories */
  382.     u_short DNumInPT; /* Directory record number in PT */
  383.     u_int DRecOffInPT; /* not need to comment              */
  384.     u_long DRecLBPT; /* absolute LB number, that contain  */
  385.      /* PT directory record                 */
  386.     u_int DRecOffLBPT; /* PT Directory record offset within LB */
  387.     } T_CDROM_FILE;
  388. typedef T_CDROM_FILE * T_CDROM_FILE_ID; /* not to mix with ISO */
  389. /* file ID, that equevalents */
  390. /* to file name in fact */
  391. /* ========= errno codes =========== */
  392. #define S_cdromFsLib_ALREADY_INIT (M_cdromFsLib | 1)
  393. #define S_cdromFsLib_DEVICE_REMOVED (M_cdromFsLib | 3)
  394. #define S_cdromFsLib_SUCH_PATH_TABLE_SIZE_NOT_SUPPORTED (M_cdromFsLib | 4)
  395. #define S_cdromFsLib_ONE_OF_VALUES_NOT_POWER_OF_2 (M_cdromFsLib | 5)
  396. #define S_cdromFsLib_UNNOWN_FILE_SYSTEM (M_cdromFsLib | 6)
  397. #define S_cdromFsLib_INVAL_VOL_DESCR (M_cdromFsLib | 7)
  398. #define S_cdromFsLib_INVALID_PATH_STRING (M_cdromFsLib | 8)
  399. #define S_cdromFsLib_MAX_DIR_HIERARCHY_LEVEL_OVERFLOW (M_cdromFsLib | 9)
  400. #define S_cdromFsLib_NO_SUCH_FILE_OR_DIRECTORY (M_cdromFsLib | 10)
  401. #define S_cdromFsLib_INVALID_DIRECTORY_STRUCTURE (M_cdromFsLib | 11)
  402. #define S_cdromFsLib_INVALID_FILE_DESCRIPTOR (M_cdromFsLib | 12)
  403. #define S_cdromFsLib_READ_ONLY_DEVICE (M_cdromFsLib | 13)
  404. #define S_cdromFsLib_END_OF_FILE (M_cdromFsLib | 14)
  405. #define S_cdromFsLib_INV_ARG_VALUE (M_cdromFsLib | 15)
  406. #define S_cdromFsLib_SEMTAKE_ERROR (M_cdromFsLib | 16)
  407. #define S_cdromFsLib_SEMGIVE_ERROR (M_cdromFsLib | 17)
  408. #define S_cdromFsLib_VOL_UNMOUNTED (M_cdromFsLib | 18)
  409. #define S_cdromFsLib_INVAL_DIR_OPER (M_cdromFsLib | 19)
  410. #define S_cdromFsLib_READING_FAILURE (M_cdromFsLib | 20)
  411. #define S_cdromFsLib_INVALID_DIR_REC_STRUCT             (M_cdromFsLib | 21)
  412. /* user-callable functions prototypes */
  413. #if defined(__STDC__) || defined(__cplusplus)
  414. extern CDROM_VOL_DESC_ID cdromFsDevReset( void * pVolDesc, STATUS retStat );
  415. extern CDROM_VOL_DESC_ID cdromFsDevCreate( char * devName, BLK_DEV * pBlkDev );
  416. #else /* __STDC__ */
  417. extern CDROM_VOL_DESC_ID cdromFsDevReset ();
  418. extern CDROM_VOL_DESC_ID cdromFsDevCreate ();
  419. #endif /* __STDC__ */
  420. #ifdef __cplusplus
  421. }
  422. #endif
  423. #endif /* cdromFsLib_h */