--- np2/fdd/fdd_xdf.c 2004/01/27 10:55:47 1.3 +++ np2/fdd/fdd_xdf.c 2004/02/13 14:52:21 1.5 @@ -36,7 +36,7 @@ BOOL fddxdf_set(FDDFILE fdd, const char const _XDFINFO *xdf; short attr; FILEH fh; - UINT fdsize; + UINT32 fdsize; UINT size; attr = file_attr(fname); @@ -47,7 +47,7 @@ const _XDFINFO *xdf; if (fh == FILEH_INVALID) { return(FAILURE); } - fdsize = file_seek(fh, 0, FSEEK_END); + fdsize = file_getsize(fh); file_close(fh); xdf = supportxdf; @@ -72,8 +72,9 @@ BOOL fddxdf_setfdi(FDDFILE fdd, const ch short attr; FILEH fh; - FDIHDR fdi; + UINT32 fdsize; UINT r; + FDIHDR fdi; UINT32 fddtype; UINT32 headersize; UINT32 size; @@ -88,9 +89,11 @@ BOOL fddxdf_setfdi(FDDFILE fdd, const ch if (attr & 0x18) { return(FAILURE); } + fdsize = 0; r = 0; fh = file_open_rb(fname); if (fh != FILEH_INVALID) { + fdsize = file_getsize(fh); r = file_read(fh, &fdi, sizeof(fdi)); file_close(fh); } @@ -109,6 +112,9 @@ BOOL fddxdf_setfdi(FDDFILE fdd, const ch (cylinders == 0) || (cylinders >= 128)) { return(FAILURE); } + if (fdsize != (headersize + (size * sectors * surfaces * cylinders))) { + return(FAILURE); + } size >>= 8; n = 0; while(size) { @@ -166,7 +172,6 @@ BOOL fddxdf_diskaccess(FDDFILE fdd) { (CTRL_FDMEDIA != fdd->inf.xdf.disktype)) { return(FAILURE); } - (void)fdd; return(SUCCESS); } @@ -174,7 +179,7 @@ BOOL fddxdf_seek(FDDFILE fdd) { if ((fdd->type != DISKTYPE_BETA) || (CTRL_FDMEDIA != fdd->inf.xdf.disktype) || - (fdc.rpm != fdd->inf.xdf.rpm) || + (fdc.rpm[fdc.us] != fdd->inf.xdf.rpm) || (fdc.ncn >= (fdd->inf.xdf.tracks >> 1))) { return(FAILURE); } @@ -185,7 +190,7 @@ BOOL fddxdf_seeksector(FDDFILE fdd) { if ((fdd->type != DISKTYPE_BETA) || (CTRL_FDMEDIA != fdd->inf.xdf.disktype) || - (fdc.rpm != fdd->inf.xdf.rpm) || + (fdc.rpm[fdc.us] != fdd->inf.xdf.rpm) || (fdc.treg[fdc.us] >= (fdd->inf.xdf.tracks >> 1))) { fddlasterror = 0xe0; return(FAILURE); @@ -287,7 +292,8 @@ BOOL fddxdf_write(FDDFILE fdd) { BOOL fddxdf_readid(FDDFILE fdd) { fddlasterror = 0x00; - if ((fdc.rpm != fdd->inf.xdf.rpm) || + if ((!fdc.mf) || + (fdc.rpm[fdc.us] != fdd->inf.xdf.rpm) || (fdc.crcn >= fdd->inf.xdf.sectors)) { fddlasterror = 0xe0; return(FAILURE);