Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygendosfsck.h
Go to the documentation of this file.
00001 /* dosfsck.h - Common data structures and global variables */ 00002 00003 /* Written 1993 by Werner Almesberger */ 00004 00005 /* FAT32, VFAT, Atari format support, and various fixes additions May 1998 00006 * by Roman Hodek <Roman.Hodek@informatik.uni-erlangen.de> */ 00007 00008 00009 #ifndef _DOSFSCK_H 00010 #define _DOSFSCK_H 00011 00012 //#include "types.h" 00013 00014 #ifdef _WIN32 00015 00016 typedef unsigned char __u8; 00017 typedef unsigned short __u16; 00018 typedef unsigned int __u32; 00019 typedef unsigned __int64 __u64; 00020 typedef unsigned short __le16; 00021 typedef unsigned int __le32; 00022 typedef __int64 loff_t; 00023 typedef __int64 ll_t; 00024 00025 #define CF_LE_W(v) (v) 00026 #define CF_LE_L(v) (v) 00027 #define CT_LE_W(v) (v) 00028 #define CT_LE_L(v) (v) 00029 00030 #endif 00031 00032 #ifdef _M_IX86 00033 #include "byteorder.h" 00034 #endif 00035 00036 #include "msdos_fs.h" 00037 00038 #if 0 00039 #undef CF_LE_W 00040 #undef CF_LE_L 00041 #undef CT_LE_W 00042 #undef CT_LE_L 00043 #endif 00044 00045 #if __BYTE_ORDER == __BIG_ENDIAN 00046 #include "byteswap.h" 00047 #if 0 00048 #define CF_LE_W(v) bswap_16(v) 00049 #define CF_LE_L(v) bswap_32(v) 00050 #define CT_LE_W(v) CF_LE_W(v) 00051 #define CT_LE_L(v) CF_LE_L(v) 00052 #endif 00053 #else 00054 #define CF_LE_W(v) (v) 00055 #define CF_LE_L(v) (v) 00056 #define CT_LE_W(v) (v) 00057 #define CT_LE_L(v) (v) 00058 #endif /* __BIG_ENDIAN */ 00059 00060 #define VFAT_LN_ATTR (ATTR_RO | ATTR_HIDDEN | ATTR_SYS | ATTR_VOLUME) 00061 00062 #include <pshpack1.h> 00063 00064 /* ++roman: Use own definition of boot sector structure -- the kernel headers' 00065 * name for it is msdos_boot_sector in 2.0 and fat_boot_sector in 2.1 ... */ 00066 struct boot_sector { 00067 __u8 ignored[3]; /* Boot strap short or near jump */ 00068 __u8 system_id[8]; /* Name - can be used to special case 00069 partition manager volumes */ 00070 __u8 sector_size[2]; /* bytes per logical sector */ 00071 __u8 cluster_size; /* sectors/cluster */ 00072 __u16 reserved; /* reserved sectors */ 00073 __u8 fats; /* number of FATs */ 00074 __u8 dir_entries[2]; /* root directory entries */ 00075 __u8 sectors[2]; /* number of sectors */ 00076 __u8 media; /* media code (unused) */ 00077 __u16 fat_length; /* sectors/FAT */ 00078 __u16 secs_track; /* sectors per track */ 00079 __u16 heads; /* number of heads */ 00080 __u32 hidden; /* hidden sectors (unused) */ 00081 __u32 total_sect; /* number of sectors (if sectors == 0) */ 00082 00083 /* The following fields are only used by FAT32 */ 00084 __u32 fat32_length; /* sectors/FAT */ 00085 __u16 flags; /* bit 8: fat mirroring, low 4: active fat */ 00086 __u8 version[2]; /* major, minor filesystem version */ 00087 __u32 root_cluster; /* first cluster in root directory */ 00088 __u16 info_sector; /* filesystem info sector */ 00089 __u16 backup_boot; /* backup boot sector */ 00090 __u16 reserved2[6]; /* Unused */ 00091 00092 /* fill up to 512 bytes */ 00093 __u8 junk[448]; 00094 }; 00095 00096 #include <poppack.h> 00097 00098 struct info_sector { 00099 __u32 magic; /* Magic for info sector ('RRaA') */ 00100 __u8 junk[0x1dc]; 00101 __u32 reserved1; /* Nothing as far as I can tell */ 00102 __u32 signature; /* 0x61417272 ('rrAa') */ 00103 __u32 free_clusters; /* Free cluster count. -1 if unknown */ 00104 __u32 next_cluster; /* Most recently allocated cluster. */ 00105 __u32 reserved2[3]; 00106 __u16 reserved3; 00107 __u16 boot_sign; 00108 }; 00109 00110 typedef struct { 00111 __u8 name[8],ext[3]; /* name and extension */ 00112 __u8 attr; /* attribute bits */ 00113 __u8 lcase; /* Case for base and extension */ 00114 __u8 ctime_ms; /* Creation time, milliseconds */ 00115 __u16 ctime; /* Creation time */ 00116 __u16 cdate; /* Creation date */ 00117 __u16 adate; /* Last access date */ 00118 __u16 starthi; /* High 16 bits of cluster in FAT32 */ 00119 __u16 time,date,start;/* time, date and first cluster */ 00120 __u32 size; /* file size (in bytes) */ 00121 } DIR_ENT; 00122 00123 typedef struct _dos_file { 00124 DIR_ENT dir_ent; 00125 char *lfn; 00126 loff_t offset; 00127 struct _dos_file *parent; /* parent directory */ 00128 struct _dos_file *next; /* next entry */ 00129 struct _dos_file *first; /* first entry (directory only) */ 00130 } DOS_FILE; 00131 00132 typedef struct { 00133 unsigned long value; 00134 unsigned long reserved; 00135 DOS_FILE *owner; 00136 int prev; /* number of previous clusters */ 00137 } FAT_ENTRY; 00138 00139 typedef struct { 00140 int nfats; 00141 loff_t fat_start; 00142 unsigned int fat_size; /* unit is bytes */ 00143 unsigned int fat_bits; /* size of a FAT entry */ 00144 unsigned int eff_fat_bits; /* # of used bits in a FAT entry */ 00145 unsigned long root_cluster; /* 0 for old-style root dir */ 00146 loff_t root_start; 00147 unsigned int root_entries; 00148 loff_t data_start; 00149 unsigned int cluster_size; 00150 unsigned long clusters; 00151 loff_t fsinfo_start; /* 0 if not present */ 00152 long free_clusters; 00153 loff_t backupboot_start; /* 0 if not present */ 00154 FAT_ENTRY *fat; 00155 } DOS_FS; 00156 00157 #ifndef offsetof 00158 #define offsetof(t,e) ((int)&(((t *)0)->e)) 00159 #endif 00160 00161 #define FSCHECK_INTERACTIVE 0x01 00162 #define FSCHECK_LIST_FILES 0x02 00163 #define FSCHECK_TEST_READ 0x04 00164 #define FSCHECK_VERBOSE 0x08 00165 #define FSCHECK_IMMEDIATE_WRITE 0x10 00166 00167 extern ULONG FsCheckFlags; 00168 extern ULONG FsCheckTotalFiles; 00169 extern void *FsCheckMemQueue; 00170 00171 /* value to use as end-of-file marker */ 00172 #define FAT_EOF(fs) (0xff8 | FAT_EXTD(fs)) 00173 #define FAT_IS_EOF(fs,v) ((unsigned long)(v) >= (0xff8|FAT_EXTD(fs))) 00174 /* value to mark bad clusters */ 00175 #define FAT_BAD(fs) (0xff7 | FAT_EXTD(fs)) 00176 /* range of values used for bad clusters */ 00177 #define FAT_MIN_BAD(fs) (0xff7 | FAT_EXTD(fs)) 00178 #define FAT_MAX_BAD(fs) (0xff7 | FAT_EXTD(fs)) 00179 #define FAT_IS_BAD(fs,v) ((v) >= FAT_MIN_BAD(fs) && (v) <= FAT_MAX_BAD(fs)) 00180 00181 /* return -16 as a number with fs->fat_bits bits */ 00182 #define FAT_EXTD(fs) (((1 << fs->eff_fat_bits)-1) & ~0xf) 00183 00184 #endif 00185 00186 /* Local Variables: */ 00187 /* tab-width: 8 */ 00188 /* End: */ Generated on Sun May 27 2012 04:36:13 for ReactOS by
1.7.6.1
|