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

VxWorks

开发平台:

C/C++

  1. /* dosDirLibP.h - private header of directory handler */
  2. /* Copyright 1999-2002 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01f,20sep01,jkf  SPR#69031, common code for both AE & 5.x.
  7. 01e,29feb00,jkf  T3 changes
  8. 01d,31jul99,jkf  T2 merge, tidiness & spelling.
  9. 01c,22nov98,vld  fields <rootNSec> and <rootStartSec> moved from
  10.  DOS_DIR_PDESCR structure to structure DOS_DIR_DESC
  11.  in dosFsLibP.h header
  12. 01b,02jul98,lrn  doc review
  13. 01a,18jan98,vld  written,
  14. */
  15. #ifndef __INCdosDirLibP
  16. #define __INCdosDirLibP
  17. #ifdef __cplusplus
  18. extern "C" {
  19. #endif
  20. #include "vxWorks.h"
  21. #include "semLib.h"
  22. #include "dosFsLib.h"
  23. #define DOS_VX_LONG_NAME_LEN 40 /* length of vxWorks proprietary */
  24. /* long filename */
  25. #define DOS_VFAT_NAME_LEN 255 /* max W-95 style name length */
  26. /* standard directory entry */
  27. #define DOS_DIRENT_STD_LEN 32 /* standard directory entry size */
  28. #define DOS_RESERVED_LEN        10      /* reserved bytes in regular dir ent */
  29. /* fully used by VFAT aliases */
  30. #define DOS_STDNAME_LEN 8       /* length of filename */
  31. /* (no extension) */
  32. #define DOS_STDEXT_LEN 3       /* length of filename extension */
  33. #define DOS_ATTRIB_OFF (DOS_STDNAME_LEN+DOS_STDEXT_LEN)
  34. #define DOS_NAME_CASE_OFF (DOS_ATTRIB_OFF+1)
  35. #define DOS_CREAT_MS_OFF (DOS_NAME_CASE_OFF+1)
  36. #define DOS_CREAT_TIME_OFF (DOS_CREAT_MS_OFF+1)
  37. #define DOS_CREAT_DATE_OFF (DOS_CREAT_TIME_OFF+2)
  38. #define DOS_LAST_ACCESS_TIME_OFF NONE
  39. #define DOS_LAST_ACCESS_DATE_OFF (DOS_CREAT_DATE_OFF+2)
  40. #define DOS_EXT_START_CLUST_OFF (DOS_LAST_ACCESS_DATE_OFF+2)
  41. #define DOS_MODIF_TIME_OFF (DOS_EXT_START_CLUST_OFF+2)
  42. #define DOS_MODIF_DATE_OFF (DOS_MODIF_TIME_OFF+2)
  43. #define DOS_START_CLUST_OFF (DOS_MODIF_DATE_OFF+2)
  44. #define DOS_FILE_SIZE_OFF (DOS_START_CLUST_OFF+2)
  45. #define DOS_EXT_FILE_SIZE_OFF NONE
  46. #define DOS_EXT_FILE_SIZE_LEN NONE
  47. /* vxWorks proprietary long names' directory entry */
  48. #define DOS_VX_DIRENT_LEN 64
  49. #define DOS_VX_NAME_LEN DOS_VX_LONG_NAME_LEN
  50. #define DOS_VX_EXT_LEN 0 /* (no extension) */
  51. #define DOS_VX_CREAT_TIME_OFF (DOS_VX_NAME_LEN+DOS_VX_EXT_LEN)
  52. #define DOS_VX_CREAT_DATE_OFF (DOS_VX_CREAT_TIME_OFF+2)
  53. #define DOS_VX_LAST_ACCESS_TIME_OFF (DOS_VX_CREAT_DATE_OFF+2)
  54. #define DOS_VX_LAST_ACCESS_DATE_OFF (DOS_VX_LAST_ACCESS_TIME_OFF+2)
  55. #define DOS_VX_EXT_START_CLUST_OFF (DOS_VX_LAST_ACCESS_DATE_OFF+2)
  56. #define DOS_VX_EXT_FILE_SIZE_OFF (DOS_VX_EXT_START_CLUST_OFF+2)
  57. #define DOS_VX_EXT_FILE_SIZE_LEN 2
  58. #define DOS_VX_RESERVED_LEN 1 /* 13 -4 cr t/d -4 acc t/d -2 st cl - */
  59.   /* DOS_VX_EXT_FILE_SIZE_LEN */
  60. #define DOS_VX_ATTRIB_OFF (DOS_VX_EXT_FILE_SIZE_OFF+
  61.  DOS_VX_EXT_FILE_SIZE_LEN+
  62.  DOS_VX_RESERVED_LEN)
  63. #define DOS_VX_MODIF_TIME_OFF (DOS_VX_ATTRIB_OFF+1)
  64. #define DOS_VX_MODIF_DATE_OFF (DOS_VX_MODIF_TIME_OFF+2)
  65. #define DOS_VX_START_CLUST_OFF (DOS_VX_MODIF_DATE_OFF+2)
  66. #define DOS_VX_FILE_SIZE_OFF (DOS_VX_START_CLUST_OFF+2)
  67. /* special values */
  68. #define ROOT_DIRENT NULL /* root directory does not */
  69. /* have its own entry */
  70. /* special characters */
  71. #define LAST_DIRENT EOS
  72. #define INVALID_CHAR '|'
  73. #define ZERO_C          '0' 
  74. #define TILDA '~'
  75. #define DOS_DEL_MARK 0xe5 /* dir entry deleted marker */
  76. /* special function argument value */
  77. #define DH_VOL_LAB (-1)
  78. /* macros */
  79. #define START_CLUST_DECODE( pVolDesc, pDeDesc, pDirEnt )
  80. ( DISK_TO_VX_16( (char *)(pDirEnt) +
  81.          (pDeDesc)->startClustOff ) +
  82.        (((pVolDesc)->fatType == FAT32)?
  83.    (DISK_TO_VX_16( (char *)(pDirEnt) +
  84.    (pDeDesc)->extStartClustOff ) << 16) : 0) )
  85. #define START_CLUST_ENCODE( pDeDesc, clust, pDirEnt )
  86. {
  87. VX_TO_DISK_16( (clust),
  88.             (char *)(pDirEnt) + (pDeDesc)->startClustOff );
  89. VX_TO_DISK_16( ((clust) >> 16),
  90.             (char *)(pDirEnt) +
  91.        (pDeDesc)->extStartClustOff );
  92. }
  93. #ifdef SIZE64 /* 64-bit file sizes,  defined in dosFsLibP.h */
  94. #define EXT_SIZE_DECODE( pDeDesc, pDirEnt )
  95.         ( (fsize_t)( DISK_TO_VX_32( (char *)(pDirEnt) +
  96.             (pDeDesc)->extSizeOff ) &
  97.              ( ~((UINT32)(-1)<<
  98.  ((pDeDesc)->extSizeLen * 8)) ) ) << 32 )
  99. #define EXT_SIZE_ENCODE( pDeDesc, pDirEnt, size )
  100. {
  101.      UINT32 sa, sb = ((UINT32)(size>>32));
  102.      VX_TO_DISK_32( sb, &sa );
  103.      bcopy( (char *)&sa,
  104. (char *)(pDirEnt) + (pDeDesc)->extSizeOff,
  105. (pDeDesc)->extSizeLen );
  106. }
  107. #else /* ! SIZE64 */
  108. #define EXT_SIZE_DECODE( pDeDesc, pDirEnt ) 0
  109. #define EXT_SIZE_ENCODE( pDeDesc, pDirEnt, size )
  110. bzero( (char *)(pDirEnt) + (pDeDesc)->extSizeOff,
  111.        (pDeDesc)->extSizeLen );
  112. #endif /* SIZE64 */
  113. /* typedefs */
  114. typedef struct DIRENT_PTR       /* position of entry in directory */
  115.     {
  116.     u_int       deNum;  /* consecutive entry number in directory */
  117.     u_int       sector; /* directory entry sector */
  118.     off_t       offset; /* offset in sector */
  119.     } DIRENT_PTR;
  120. typedef DIRENT_PTR * DIRENT_PTR_ID;
  121. typedef struct PATH_ARRAY /* split path */
  122.     {
  123.     u_char * pName;
  124.     u_short nameLen;
  125.     } PATH_ARRAY;
  126. typedef PATH_ARRAY * PATH_ARRAY_ID;
  127. typedef struct DIRENT_DESCR /* details of directory entry */
  128.     {
  129.     u_char dirEntSize,
  130.      nameLen,
  131.      extLen,
  132.      atrribOff,
  133.      creatTimeOff,
  134.      creatDateOff,
  135.      modifTimeOff,
  136.      modifDateOff,
  137.      accessTimeOff,
  138.      accessDateOff,
  139.      startClustOff,
  140.      extStartClustOff, /* 2 most signif. bytes of */
  141.   /* 32-bit FAT entry */
  142.      sizeOff,
  143.      extSizeOff, /* n most signif. bytes of */
  144. /* 64-bit file size */
  145.      extSizeLen; /* number of  most signif. bytes of */
  146. /* 64-bit file size */
  147.     } DIRENT_DESCR;
  148. typedef DIRENT_DESCR * DIRENT_DESCR_ID;
  149. typedef struct DOS_DIR_PDESCR /* directory handler's part of */
  150. /* volume descriptor */
  151.     {
  152.     DOS_DIR_DESC dirDesc; /* API functions */
  153.     u_char * nameBuf; /* VFAT long name buffer */
  154.     SEM_ID bufSem; /* shared buffers semaphore */
  155.     enum { STDDOS=0, VXLONG=1, VFAT=2 }
  156. nameStyle; /* name style */
  157.     DIRENT_DESCR deDesc; /* volume directory entry structure */
  158.     
  159.     /* root directory descriptor */
  160.     
  161.     UINT32 rootStartClust; /* root directory start cluster number: */
  162.      /* 0 for FAT12/FAT16; */
  163.      /* some value for FAT32 */
  164.     u_int rootMaxEntries; /* max number of entries in root */
  165.      /* value from boot sector for */
  166.      /* FAT12/FAT16; 0xffffffff for FAT32 */
  167.     time_t rootModifTime; /* root directory last modification time */
  168. /* ( last entry creation time ) */
  169.     } DOS_DIR_PDESCR;
  170. typedef DOS_DIR_PDESCR * DOS_DIR_PDESCR_ID;
  171. #ifdef __cplusplus
  172.     }
  173. #endif
  174. #endif /* __INCdosDirLibP */