--- Begin Message ---
diff -ruNp old/kernel/dsk.c new/kernel/dsk.c
--- old/kernel/dsk.c 2004-06-11 04:03:14.000000000 +0000
+++ new/kernel/dsk.c 2004-06-11 04:24:14.000000000 +0000
@@ -478,17 +478,20 @@ STATIC COUNT Genblockio(ddt * pddt, UWOR
STATIC WORD Genblkdev(rqptr rp, ddt * pddt)
{
- int ret;
unsigned descflags = pddt->ddt_descflags;
#ifdef WITHFAT32
- int extended = 0;
+ unsigned copy_size = sizeof (bpb);
- if (rp->r_cat == 0x48)
- extended = 1;
- else
-#endif
+ if (rp->r_cat != 0x48)
+ {
+ if (rp->r_cat != 8)
+ return failure(E_CMD);
+ copy_size = BPB_SIZEOF;
+ }
+#else
if (rp->r_cat != 8)
return failure(E_CMD);
+#endif
switch (rp->r_fun)
{
@@ -498,31 +501,29 @@ STATIC WORD Genblkdev(rqptr rp, ddt * pd
bpb *pbpb;
pddt->ddt_type = gblp->gbio_devtype;
- pddt->ddt_descflags = (descflags & ~3) | (gblp->gbio_devattrib & 3)
- | (DF_DPCHANGED | DF_REFORMAT);
+ pddt->ddt_descflags = (descflags & ~3) |
+ (gblp->gbio_devattrib & 3) |
+ (DF_DPCHANGED | DF_REFORMAT);
pddt->ddt_ncyl = gblp->gbio_ncyl;
/* use default dpb or current bpb? */
- pbpb =
- (gblp->gbio_spcfunbit & 0x01) ==
- 0 ? &pddt->ddt_defbpb : &pddt->ddt_bpb;
+ pbpb = (gblp->gbio_spcfunbit & 1) ? &pddt->ddt_bpb : &pddt->ddt_defbpb;
#ifdef WITHFAT32
- fmemcpy(pbpb, &gblp->gbio_bpb,
- extended ? sizeof(gblp->gbio_bpb) : BPB_SIZEOF);
+ fmemcpy(pbpb, &gblp->gbio_bpb, copy_size);
#else
fmemcpy(pbpb, &gblp->gbio_bpb, sizeof(gblp->gbio_bpb));
#endif
- /*pbpb->bpb_nsector = gblp->gbio_nsecs; */
+ /*pbpb->bpb_nsector = gblp->gbio_nsecs;*/
break;
}
case 0x41: /* write track */
{
struct gblkrw FAR *rw = rp->r_rw;
- ret = Genblockio(pddt, LBA_WRITE, rw->gbrw_head, rw->gbrw_cyl,
- rw->gbrw_sector, rw->gbrw_nsecs, rw->gbrw_buffer);
- if (ret != 0)
+ int ret = Genblockio(pddt, LBA_WRITE, rw->gbrw_head, rw->gbrw_cyl,
+ rw->gbrw_sector, rw->gbrw_nsecs, rw->gbrw_buffer);
+ if (ret)
return dskerr(ret);
+ break;
}
- break;
case 0x42: /* format/verify track */
{
struct gblkfv FAR *fv = rp->r_fv;
@@ -649,29 +650,23 @@ STATIC WORD Genblkdev(rqptr rp, ddt * pd
}
case 0x46: /* set volume serial number */
{
- struct Gioc_media FAR *gioc = rp->r_gioc;
struct FS_info *fs;
-
- ret = getbpb(pddt);
- if (ret != 0)
- return (ret);
-
- fs = (struct FS_info *)&DiskTransferBuffer
- [(pddt->ddt_bpb.bpb_nfsect != 0 ? 0x27 : 0x43)];
- fs->serialno = gioc->ioc_serialno;
- pddt->ddt_serialno = fs->serialno;
-
+ int ret = getbpb(pddt);
+ if (ret)
+ return ret;
+ fs = (struct FS_info *)(pddt->ddt_bpb.bpb_nfsect
+ ? DiskTransferBuffer + 0x27
+ : DiskTransferBuffer + 0x43);
+ pddt->ddt_serialno = fs->serialno = rp->r_gioc->ioc_serialno;
ret = RWzero(pddt, LBA_WRITE);
- if (ret != 0)
- return (dskerr(ret));
+ if (ret)
+ return dskerr(ret);
+ break;
}
- break;
case 0x47: /* set access flag */
- {
- struct Access_info FAR *ai = rp->r_ai;
- pddt->ddt_descflags = (descflags & ~DF_NOACCESS) |
- (ai->AI_Flag ? 0 : DF_NOACCESS);
- }
+ pddt->ddt_descflags |= DF_NOACCESS;
+ if (rp->r_ai->AI_Flag)
+ pddt->ddt_descflags &= ~DF_NOACCESS;
break;
case 0x60: /* get device parameters */
{
@@ -684,45 +679,39 @@ STATIC WORD Genblkdev(rqptr rp, ddt * pd
gblp->gbio_media = (pddt->ddt_type == 1) && (pddt->ddt_ncyl == 40);
gblp->gbio_ncyl = pddt->ddt_ncyl;
/* use default dpb or current bpb? */
- pbpb =
- (gblp->gbio_spcfunbit & 0x01) ==
- 0 ? &pddt->ddt_defbpb : &pddt->ddt_bpb;
+ pbpb = (gblp->gbio_spcfunbit & 1) ? &pddt->ddt_bpb : &pddt->ddt_defbpb;
#ifdef WITHFAT32
- fmemcpy(&gblp->gbio_bpb, pbpb,
- extended ? sizeof(gblp->gbio_bpb) : BPB_SIZEOF);
+ fmemcpy(&gblp->gbio_bpb, pbpb, copy_size);
#else
fmemcpy(&gblp->gbio_bpb, pbpb, sizeof(gblp->gbio_bpb));
#endif
- /*gblp->gbio_nsecs = pbpb->bpb_nsector; */
+ /*gblp->gbio_nsecs = pbpb->bpb_nsector;*/
break;
}
case 0x61: /* read track */
{
struct gblkrw FAR *rw = rp->r_rw;
- ret = Genblockio(pddt, LBA_READ, rw->gbrw_head, rw->gbrw_cyl,
- rw->gbrw_sector, rw->gbrw_nsecs, rw->gbrw_buffer);
- if (ret != 0)
+ int ret = Genblockio(pddt, LBA_READ, rw->gbrw_head, rw->gbrw_cyl,
+ rw->gbrw_sector, rw->gbrw_nsecs, rw->gbrw_buffer);
+ if (ret)
return dskerr(ret);
+ break;
}
- break;
case 0x66: /* get volume serial number */
{
- struct Gioc_media FAR *gioc = rp->r_gioc;
-
- ret = getbpb(pddt);
- if (ret != 0)
- return (ret);
+ struct Gioc_media FAR *gioc;
+ int ret = getbpb(pddt);
+ if (ret)
+ return ret;
+ gioc = rp->r_gioc;
gioc->ioc_serialno = pddt->ddt_serialno;
- fmemcpy(gioc->ioc_volume, pddt->ddt_volume, 11);
- fmemcpy(gioc->ioc_fstype, pddt->ddt_fstype, 8);
+ fmemcpy(gioc->ioc_volume, pddt->ddt_volume, sizeof gioc->ioc_volume);
+ fmemcpy(gioc->ioc_fstype, pddt->ddt_fstype, sizeof gioc->ioc_fstype);
+ break;
}
- break;
case 0x67: /* get access flag */
- {
- struct Access_info FAR *ai = rp->r_ai;
- ai->AI_Flag = descflags & DF_NOACCESS ? 0 : 1; /* bit 9 */
- }
+ rp->r_ai->AI_Flag = (descflags / DF_NOACCESS) & 1; /* bit 9 */
break;
default:
return failure(E_CMD);
--- End Message ---