PERFORCE change 123095 for review
Brian Chu
chub at FreeBSD.org
Sun Jul 8 08:01:55 UTC 2007
http://perforce.freebsd.org/chv.cgi?CH=123095
Change 123095 by chub at chub-msdosfs on 2007/07/08 08:01:09
Changed bootsector declarations so that individual entities in the BPB and Extended bootsector can actually be addressed. Updated msdosfs vfs code to account for this change.
Affected files ...
.. //depot/projects/soc2007/chub-msdosfs2/sys/fs/msdosfs/bootsect.h#3 edit
.. //depot/projects/soc2007/chub-msdosfs2/sys/fs/msdosfs/bpb.h#2 edit
.. //depot/projects/soc2007/chub-msdosfs2/sys/fs/msdosfs/msdosfs_vfsops.c#2 edit
Differences ...
==== //depot/projects/soc2007/chub-msdosfs2/sys/fs/msdosfs/bootsect.h#3 (text+ko) ====
@@ -1,6 +1,9 @@
/* $FreeBSD: src/sys/fs/msdosfs/bootsect.h,v 1.13 2005/09/29 14:09:46 peadar Exp $ */
/* $NetBSD: bootsect.h,v 1.9 1997/11/17 15:36:17 ws Exp $ */
+#ifndef _FS_MSDOSFS_BOOTSECT_H
+#define _FS_MSDOSFS_BOOTSECT_H
+
/*-
* Written by Paul Popelka (paulp at uts.amdahl.com)
*
@@ -17,6 +20,8 @@
* October 1992
*/
+#include <fs/msdosfs/bpb.h>
+
/*
* 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
@@ -25,7 +30,8 @@
struct bootsector33 {
u_int8_t bsJump[3]; /* jump inst E9xxxx or EBxx90 */
int8_t bsOemName[8]; /* OEM name and version */
- int8_t bsBPB[19]; /* BIOS parameter block */
+ // int8_t bsBPB[19]; /* BIOS parameter block */
+ struct bpb33 bsBPB; /* BIOS parameter block */
int8_t bsDriveNumber; /* drive number (0x80) */
int8_t bsBootCode[479]; /* pad so struct is 512b */
u_int8_t bsBootSectSig0;
@@ -34,10 +40,20 @@
#define BOOTSIG1 0xaa
};
+#define EXBOOTSIG 0x29
struct extboot {
int8_t exDriveNumber; /* drive number (0x80) */
int8_t exReserved1; /* reserved */
int8_t exBootSignature; /* ext. boot signature (0x29) */
+ u_int32_t exVolumeID; /* volume ID number */
+ int8_t exVolumeLabel[11]; /* volume label */
+ int8_t exFileSysType[8]; /* fs type (FAT12 or FAT16) */
+};
+
+struct byte_extboot {
+ int8_t exDriveNumber; /* drive number (0x80) */
+ int8_t exReserved1; /* reserved */
+ int8_t exBootSignature; /* ext. boot signature (0x29) */
#define EXBOOTSIG 0x29
int8_t exVolumeID[4]; /* volume ID number */
int8_t exVolumeLabel[11]; /* volume label */
@@ -47,8 +63,8 @@
struct bootsector50 {
u_int8_t bsJump[3]; /* jump inst E9xxxx or EBxx90 */
int8_t bsOemName[8]; /* OEM name and version */
- int8_t bsBPB[25]; /* BIOS parameter block */
- int8_t bsExt[26]; /* Bootsector Extension */
+ struct bpb50 bsBPB; /* BIOS parameter block */
+ struct extboot bsExt; /* Bootsector Extension */
int8_t bsBootCode[448]; /* pad so structure is 512b */
u_int8_t bsBootSectSig0;
u_int8_t bsBootSectSig1;
@@ -59,8 +75,8 @@
struct bootsector710 {
u_int8_t bsJump[3]; /* jump inst E9xxxx or EBxx90 */
int8_t bsOEMName[8]; /* OEM name and version */
- int8_t bsBPB[53]; /* BIOS parameter block */
- int8_t bsExt[26]; /* Bootsector Extension */
+ struct bpb710 bsBPB; /* BIOS parameter block */
+ struct extboot bsExt; /* Bootsector Extension */
int8_t bsBootCode[420]; /* pad so structure is 512b */
u_int8_t bsBootSectSig0;
u_int8_t bsBootSectSig1;
@@ -73,3 +89,6 @@
struct bootsector50 bs50;
struct bootsector710 bs710;
};
+
+#endif
+// _FS_MSDOSFS_BOOTSECT_H
==== //depot/projects/soc2007/chub-msdosfs2/sys/fs/msdosfs/bpb.h#2 (text+ko) ====
@@ -1,6 +1,9 @@
/* $FreeBSD: src/sys/fs/msdosfs/bpb.h,v 1.15 2007/01/05 05:28:57 rodrigc Exp $ */
/* $NetBSD: bpb.h,v 1.7 1997/11/17 15:36:24 ws Exp $ */
+#ifndef _FS_MSDOSFS_BPB_H
+#define _FS_MSDOSFS_BPB_H
+
/*-
* Written by Paul Popelka (paulp at uts.amdahl.com)
*
@@ -78,7 +81,7 @@
u_int32_t bpbRootClust; /* start cluster for root directory */
u_int16_t bpbFSInfo; /* filesystem info structure sector */
u_int16_t bpbBackup; /* backup boot sector */
- /* There is a 12 byte filler here, but we ignore it */
+ u_int8_t bpbReserved[12]; /* 12 byte filler here */
};
/*
@@ -153,7 +156,7 @@
u_int8_t bpbRootClust[4]; /* start cluster for root directory */
u_int8_t bpbFSInfo[2]; /* filesystem info structure sector */
u_int8_t bpbBackup[2]; /* backup boot sector */
- /* There is a 12 byte filler here, but we ignore it */
+ u_int8_t bpbReserved[12]; /* 12 byte filler here */
};
/*
@@ -170,3 +173,6 @@
u_int8_t fsifill3[508];
u_int8_t fsisig4[4];
};
+
+#endif
+// _FS_MSDOSFS_BPB_H
==== //depot/projects/soc2007/chub-msdosfs2/sys/fs/msdosfs/msdosfs_vfsops.c#2 (text+ko) ====
@@ -430,9 +430,9 @@
goto error_exit;
bp->b_flags |= B_AGE;
bsp = (union bootsector *)bp->b_data;
- b33 = (struct byte_bpb33 *)bsp->bs33.bsBPB;
- b50 = (struct byte_bpb50 *)bsp->bs50.bsBPB;
- b710 = (struct byte_bpb710 *)bsp->bs710.bsBPB;
+ b33 = (struct byte_bpb33 *)&bsp->bs33.bsBPB;
+ b50 = (struct byte_bpb50 *)&bsp->bs50.bsBPB;
+ b710 = (struct byte_bpb710 *)&bsp->bs710.bsBPB;
#ifndef MSDOSFS_NOCHECKSIG
if (bsp->bs50.bsBootSectSig0 != BOOTSIG0
@@ -487,7 +487,6 @@
/* XXX - We should probably check more values here */
if (!pmp->pm_BytesPerSec || !SecPerClust
- || !pmp->pm_Heads
#ifdef PC98
|| !pmp->pm_SecPerTrack || pmp->pm_SecPerTrack > 255) {
#else
More information about the p4-projects
mailing list