dosFsLib.h
上传用户:nvosite88
上传日期:2007-01-17
资源大小:4983k
文件大小:10k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* dosFsLib.h - DOS file system header file */
  2. /* Copyright 1999-2002 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01p,04mar02,jkf  Adding dosSetVolCaseSens(),SPR#29751, orig by chn.
  7. 01o,30nov01,jkf  SPR#68203, adding dosFsLastAccessDateEnable().
  8. 01n,14nov01,jkf  SPR#71720, avoiding unaligned pointer accesses.
  9.                  added leading underscore to _WRS_PACK_ALIGN ifndef 
  10. 01m,11nov01,jkf  added WRS_PACK_ALIGN ifndef for AE 1.1 support, this 
  11.                  allows same dosFs2 files to build in AE 1.1 environment.
  12. 01l,10nov01,jkf  SPR#32178, made dosFsVolDescGet public
  13.                  Added WRS_PACK_ALIGN (2) to legacy struct for MIPS.
  14. 01k,21sep01,jkf  SPR#69031, common code for both AE & 5.x.
  15. 01j,21sep01,jkf  changed error codes to WRS standard.
  16. 01i,29feb00,jkf  T3 changes
  17. 01h,31aug99,jkf  changes for new CBIO API.
  18. 01g,31jul99,jkf  T2 merge, tidiness & spelling.
  19. 01f,15oct98,lrn  moved 64-bit extended ioctl codes to ioLib.h
  20. 01e,11sep98,vld  prototype of dosFsDevCreate() to accept arbitrary
  21.  block device ptr.
  22. 01d,09jul98,lrn  added more defines for back compatibility
  23. 01c,30jun98,lrn  moved ERRNO_PX_FLAG to errno.h, renamed dosFsInit to
  24.                  dosFsLibInit, added b.c., cosmetics
  25. 01b,28jun98,vld  tested and checked in
  26. 01a,22jan98,vld  written,
  27. */
  28. #ifndef __INCdoFsLib
  29. #define __INCdoFsLib
  30. #ifdef __cplusplus
  31. extern "C" {
  32. #endif
  33. #include <vxWorks.h>
  34. #include <cbioLib.h>
  35. /* defines */
  36. #define DOS_FS_COMPAT /* enable definition for backwards compatibility */
  37. /* check disk levels */
  38. #define DOS_CHK_ONLY 1
  39. #define DOS_CHK_REPAIR 2
  40. #define DOS_CHK_VERB_0 (0xff<<8)
  41. #define DOS_CHK_VERB_SILENT DOS_CHK_VERB_0
  42. #define DOS_CHK_VERB_1 (1<<8)
  43. #define DOS_CHK_VERB_2 (2<<8)
  44. #define DOS_MAX_DIR_LEVELS      20      /* max expected directory levels */
  45. #define DOS_VOL_LABEL_LEN  11 /* length of volume label */
  46. /* ioctl FIOCHKDSK - check disk levels */
  47. #define CHK_ONLY 1
  48. #define CHK_REPAIR 2
  49. /* additional open() flags */
  50. #define DOS_O_CONTIG_CHK 0x10000 /* check file for contiguity */
  51. #define DOS_O_CASENS 0x20000 /* case-sensitive file lookup */
  52. /* File attribute byte values */
  53. #define DOS_ATTR_RDONLY         0x01            /* read-only file */
  54. #define DOS_ATTR_HIDDEN         0x02            /* hidden file */
  55. #define DOS_ATTR_SYSTEM         0x04            /* system file */
  56. #define DOS_ATTR_VOL_LABEL      0x08            /* volume label (not a file) */
  57. #define DOS_ATTR_DIRECTORY      0x10            /* entry is a sub-directory */
  58. #define DOS_ATTR_ARCHIVE        0x20            /* file subject to archiving */
  59. /* volume format definitions */
  60. /* data types */
  61. /* Volume configuration data */
  62. typedef struct          /* DOS_VOL_CONFIG */
  63.     {                           /* Legend: M- modifiable, C- Calculated */
  64.     enum
  65.         { _AUTO=0, _FAT12=12, _FAT16=16, _FAT32=32 }
  66.                 fatType;        /* M- Fat format Type */
  67.     const char * sysId ;        /* M- sys ID string */
  68.     int         secPerClust;    /* M- sectors per cluster (minimum 1) */
  69.     short       nResrvd;        /* M- number of reserved sectors (min 1) */
  70.     short       maxRootEnts;    /* M- max number of entries in root dir */
  71.     char        nFats;          /* M- number of FAT copies (minimum 1) */
  72.     ULONG       secPerFat;      /* C- number of sectors per FAT copy */
  73.     ULONG       nClust;         /* C- # of clusters on disk */
  74.     ULONG       nHidden;        /* C- number of hidden sectors */
  75.     ULONG       volSerial ;     /* M- disk serial number */
  76.     int         secPerTrack;    /* M- sectors per track */
  77.     char        nHeads;         /* M- number of heads */
  78.     char        mediaByte;      /* M- media descriptor byte */
  79.     char        volLabel[ 11 ]; /* X- disk volume label */
  80.     } DOS_VOL_CONFIG;
  81. /* 
  82.  * A DOS_VOLUME_DESC_ID is pointer to DOS_VOLUME_DESC. For details
  83.  * see h/private/dosFsLibP.h.  Note: That is a WRS private header file.
  84.  */ 
  85. typedef struct DOS_VOLUME_DESC *        DOS_VOLUME_DESC_ID;
  86. /* dosFsVolFormat() options: */
  87. #define DOS_OPT_DEFAULT         0x0000  /* format with default options */
  88. #define DOS_OPT_PRESERVE        0x0001  /* preserve boot block if possible */
  89. #define DOS_OPT_BLANK           0x0002  /* create a clean boot block */
  90. #define DOS_OPT_QUIET           0x0004  /* dont produce any output */
  91. #define DOS_OPT_FAT16           0x0010  /* format with FAT16 file system */
  92. #define DOS_OPT_FAT32           0x0020  /* format with FAT32 file system */
  93. #define DOS_OPT_VXLONGNAMES     0x0100  /* format with VxLong file names */
  94. /* error codes */
  95. /*
  96.  * The codes which are defined with ERRNO_PX_FLAG can be mapped
  97.  * to POSIX error codes:
  98.  * if (errno & ERRNO_PX_FLAG) errno &= 0x7fff ;
  99.  */
  100. #define S_dosFsLib_32BIT_OVERFLOW (M_dosFsLib |  1)
  101. #define S_dosFsLib_DISK_FULL (M_dosFsLib |  2)
  102. #define S_dosFsLib_FILE_NOT_FOUND (M_dosFsLib |  3)
  103. #define S_dosFsLib_NO_FREE_FILE_DESCRIPTORS  (M_dosFsLib |  4)
  104. #define S_dosFsLib_NOT_FILE (M_dosFsLib |  5)
  105. #define S_dosFsLib_NOT_SAME_VOLUME         (M_dosFsLib |  6)
  106. #define S_dosFsLib_NOT_DIRECTORY (M_dosFsLib |  7)
  107. #define S_dosFsLib_DIR_NOT_EMPTY (M_dosFsLib |  8)
  108. #define S_dosFsLib_FILE_EXISTS (M_dosFsLib |  9)
  109. #define S_dosFsLib_INVALID_PARAMETER (M_dosFsLib | 10)
  110. #define S_dosFsLib_NAME_TOO_LONG (M_dosFsLib | 11)
  111. #define S_dosFsLib_UNSUPPORTED (M_dosFsLib | 12)
  112. #define S_dosFsLib_VOLUME_NOT_AVAILABLE (M_dosFsLib | 13)
  113. #define S_dosFsLib_INVALID_NUMBER_OF_BYTES (M_dosFsLib | 14)
  114. #define S_dosFsLib_ILLEGAL_NAME (M_dosFsLib | 15)
  115. #define S_dosFsLib_CANT_DEL_ROOT (M_dosFsLib | 16)
  116. #define S_dosFsLib_READ_ONLY (M_dosFsLib | 17)
  117. #define S_dosFsLib_ROOT_DIR_FULL (M_dosFsLib | 18)
  118. #define S_dosFsLib_NO_LABEL (M_dosFsLib | 19)
  119. #define S_dosFsLib_NO_CONTIG_SPACE (M_dosFsLib | 20)
  120. #define S_dosFsLib_FD_OBSOLETE (M_dosFsLib | 21)
  121. #define S_dosFsLib_DELETED (M_dosFsLib | 22)
  122. #define S_dosFsLib_INTERNAL_ERROR (M_dosFsLib | 23)
  123. #define S_dosFsLib_WRITE_ONLY (M_dosFsLib | 24)
  124. #define S_dosFsLib_ILLEGAL_PATH (M_dosFsLib | 25)
  125. #define S_dosFsLib_ACCESS_BEYOND_EOF (M_dosFsLib | 26)
  126. #define S_dosFsLib_DIR_READ_ONLY (M_dosFsLib | 27)
  127. #define S_dosFsLib_UNKNOWN_VOLUME_FORMAT (M_dosFsLib | 28)
  128. #define S_dosFsLib_ILLEGAL_CLUSTER_NUMBER (M_dosFsLib | 29)
  129. /* macros */
  130. /* typedefs */
  131. /* interface functions prototypes */
  132. IMPORT STATUS dosFsLibInit( int ignored );
  133. IMPORT STATUS dosFsDevCreate ( char * pDevName, CBIO_DEV_ID cbio,
  134.        u_int maxFiles, u_int autoChkLevel );
  135. IMPORT STATUS dosFsVolUnmount ( void * pDev );
  136. IMPORT STATUS dosFsShow( void * dev, u_int level );
  137. IMPORT STATUS dosFsVolFormat( void * pDev, int opt, FUNCPTR pPromptFunc );
  138. IMPORT void dosFsFmtLibInit( void );
  139. IMPORT void dosChkLibInit( void );
  140. IMPORT STATUS dosDirOldLibInit( void );
  141. IMPORT STATUS dosVDirLibInit ( void );
  142. IMPORT STATUS dosFsFatInit ( void );
  143. IMPORT DOS_VOLUME_DESC_ID dosFsVolDescGet (void * pDevNameOrPVolDesc, 
  144.                                            u_char **   ppTail);
  145. IMPORT STATUS dosFsLastAccessDateEnable (DOS_VOLUME_DESC_ID dosVolDescId, 
  146.                                   BOOL enable);
  147. IMPORT STATUS dosSetVolCaseSens /* set rename case sens */
  148.     (
  149.     DOS_VOLUME_DESC_ID pVolDesc,
  150.     BOOL sensitivity /* TRUE == case sens */
  151.     );
  152. /* OS Macro's */
  153. #ifndef _WRS_PACK_ALIGN
  154. #    define _WRS_PACK_ALIGN(x) __attribute__((packed, aligned(x)))
  155. #endif /* _WRS_PACK_ALIGN */
  156. #if TRUE /* SPR#71720, avoiding unaligned pointer accesses. */
  157. /* GNU versions of new OS macros */
  158. #ifndef _WRS_ALIGNOF
  159. /*
  160.  * _WRS_ALIGNOF - return the alignment of an item, in bytes
  161.  *
  162.  * Returns the byte alignment for an item.  The returned value
  163.  * is the alignment in units of bytes.
  164.  */
  165. #    define _WRS_ALIGNOF(x) 
  166.             __alignof__(x)
  167. #endif /* ifndef _WRS_ALIGNOF */
  168. #ifndef _WRS_ALIGN_CHECK
  169. /*
  170.  * _WRS_ALIGN_CHECK - test a pointer for a particular alignment
  171.  *
  172.  * Returns TRUE if the pointer is aligned sufficiently to be a 
  173.  * pointer to a specified data type.  Returns FALSE if the pointer
  174.  * value is not aligned to be a valid pointer to the data type.
  175.  */
  176. #    define _WRS_ALIGN_CHECK(ptr, type) 
  177.             (((int)(ptr) & ( _WRS_ALIGNOF(type) - 1)) == 0 ? TRUE : FALSE)
  178. #endif /* ifndef _WRS_ALIGN_CHECK */
  179. #endif /* TRUE/FALSE - SPR#71720, avoiding unaligned pointer accesses. */
  180. #ifdef DOS_FS_COMPAT
  181. /* types for backwards compatibility, should be discontinued */
  182. #include "blkIo.h"
  183. typedef void * DOS_VOL_DESC ;
  184. /* DOS_PART_TBL is obsolete: use dpartCbio/usrFdiskPartLib instead */
  185. typedef struct /* DOS_PART_TBL */
  186.     {
  187.     UINT8 dospt_status; /* partition status */
  188.     UINT8 dospt_startHead; /* starting head */
  189.     short dospt_startSec; /* starting sector/cylinder */
  190.     UINT8 dospt_type; /* partition type */
  191.     UINT8 dospt_endHead; /* ending head */
  192.     short dospt_endSec; /* ending sector/cylinder */
  193.     ULONG dospt_absSec; /* starting absolute sector */
  194.     ULONG dospt_nSectors; /* number of sectors in part */
  195.     } _WRS_PACK_ALIGN (2) DOS_PART_TBL;
  196. /* dosFs Date and Time Structure - should be replaced with ANSI time */
  197.  
  198. typedef struct          /* DOS_DATE_TIME */
  199.     {
  200.     int         dosdt_year;             /* current year */
  201.     int         dosdt_month;            /* current month */
  202.     int         dosdt_day;              /* current day */
  203.     int         dosdt_hour;             /* current hour */
  204.     int         dosdt_minute;           /* current minute */
  205.     int         dosdt_second;           /* current second */
  206.     } DOS_DATE_TIME;
  207. /* old defines */
  208. #define DOS_BOOT_SYS_ID 0x03 /* system ID string          (8 bytes)*/
  209. #define DOS_SYS_ID_LEN 8       /* length of system ID string */
  210. #define DOS_BOOT_PART_TBL 0x1be /* first disk partition tbl (16 bytes)*/
  211. /* old proprietary long file names, now renamed VXLONGNAMES */
  212. #define DOS_OPT_LONGNAMES       0x4    
  213. /* All other old options are non applicable anymore, defined for compiles */
  214. #define DOS_OPT_CHANGENOWARN    0x1     /* disk may be changed w/out warning */
  215. #define DOS_OPT_AUTOSYNC        0x2     /* autoSync mode enabled */
  216. #define DOS_OPT_EXPORT          0x8     /* file system export enabled */
  217. #define DOS_OPT_LOWERCASE       0x40    /* filenames use lower-case chars */
  218. /* old prototypes */
  219. extern DOS_VOL_DESC * dosFsDevInit (char *pDevName, BLK_DEV *pBlkDev,
  220.                       DOS_VOL_CONFIG *pConfig);
  221. extern STATUS  dosFsInit (int maxFiles);
  222. extern DOS_VOL_DESC * dosFsMkfs (char *pVolName, BLK_DEV *pBlkDev);
  223. /* end of backward compatibility types */
  224. #endif /* DOS_FS_COMPAT */
  225. #ifdef __cplusplus
  226.     }
  227. #endif
  228. #endif /* __INCdoFsLib */