ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

dosfsck.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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.