Hi!

Genblkdev():

- small code cleanup and optimization.
- many variables (like `ret') moved deeply (by adding curly braces) - for
  BC this noticeably decreases stack usage.
--- 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 ---

Reply via email to