NetBSD/sys/msdosfs/bootsect.h
cgd 54eb3b1f88 brought in fixed/renamed/matching MS-DOS FS code, from Jeff Polk
<polk@bsdi.com>.  His notes are as follows:
------------------------------------------------------------------------------

 July 22, 1993

 - Changed name of entire package from PCFS to MSDOSFS

 - Fixed bugs:
      root directory size in clusters instead of bytes
      growing directory didn't update in-core size
      link, symlink, mknod didn't free locked parent (deadlock)
      lookup returned real error on create and rename instead of EJUSTRETURN
      rename changed `.' entry in child instead of name entry in parent
      rename removed `.' entry in child instead of removing entry in
              parent when moving a directory from one dir to another
      createde() left new node locked when write of parent failed (deadlock)
      removede() decremented refcount even on error (rmdir's which failed
              due to write errors left in-core cache entries inconsistent)
      changed validation for filesystem to not check for the boot signature
              since some disks (e.g., mtools) aren't bootable
      directories are always show current time as modify time
              (needed for NFS export since DOS never updates dir mod times --
               ctime is true create time).

 - Added support for cookies changes to the readdir() vnode
      interface (#ifdef __bsdi__)

 - Punted on the whole problem of inode generation numbers.  This means
   that there's a chance of using a stale file handle to access a new
   file, but it doesn't appear to be the common case, and I don't see
   how to generate reasonable generation numbers without changing something
   on the disk (which is the way the SVR4 filesystem survival kit guys
   did it).  I don't think it would be very safe to change the on-disk
   format.

        Jeff Polk (polk@BSDI.COM)

------------------------------------------------------------------------------
1993-08-13 11:35:13 +00:00

70 lines
2.2 KiB
C

/*
* Written by Paul Popelka (paulp@uts.amdahl.com)
*
* You can do anything you want with this software, just don't say you wrote
* it, and don't remove this notice.
*
* This software is provided "as is".
*
* The author supplies this software to be publicly redistributed on the
* understanding that the author is not responsible for the correct
* functioning of this software in any circumstances and is not liable for
* any damages caused by this software.
*
* October 1992
*
* $Id: bootsect.h,v 1.1 1993/08/13 11:35:29 cgd Exp $
*/
/*
* Format of a boot sector. This is the first sector on a DOS floppy disk
* or the fist sector of a partition on a hard disk. But, it is not the
* first sector of a partitioned hard disk.
*/
struct bootsector33 {
char bsJump[3]; /* jump instruction E9xxxx or EBxx90 */
char bsOemName[8]; /* OEM name and version */
char bsBPB[19]; /* BIOS parameter block */
char bsDriveNumber; /* drive number (0x80) */
char bsBootCode[474]; /* pad so structure is 512 bytes long */
u_short bsBootSectSig;
#define BOOTSIG 0xaa55
};
struct bootsector50 {
char bsJump[3]; /* jump instruction E9xxxx or EBxx90 */
char bsOemName[8]; /* OEM name and version */
char bsBPB[25]; /* BIOS parameter block */
char bsDriveNumber; /* drive number (0x80) */
char bsReserved1; /* reserved */
char bsBootSignature; /* extended boot signature (0x29) */
#define EXBOOTSIG 0x29
char bsVolumeID[4]; /* volume ID number */
char bsVolumeLabel[11]; /* volume label */
char bsFileSysType[8]; /* file system type (FAT12 or FAT16) */
char bsBootCode[448]; /* pad so structure is 512 bytes long */
u_short bsBootSectSig;
#define BOOTSIG 0xaa55
};
union bootsector {
struct bootsector33 bs33;
struct bootsector50 bs50;
};
/*
* Shorthand for fields in the bpb.
*/
#define bsBytesPerSec bsBPB.bpbBytesPerSec
#define bsSectPerClust bsBPB.bpbSectPerClust
#define bsResSectors bsBPB.bpbResSectors
#define bsFATS bsBPB.bpbFATS
#define bsRootDirEnts bsBPB.bpbRootDirEnts
#define bsSectors bsBPB.bpbSectors
#define bsMedia bsBPB.bpbMedia
#define bsFATsecs bsBPB.bpbFATsecs
#define bsSectPerTrack bsBPB.bpbSectPerTrack
#define bsHeads bsBPB.bpbHeads
#define bsHiddenSecs bsBPB.bpbHiddenSecs
#define bsHugeSectors bsBPB.bpbHugeSectors