Hi!

blockio():

- 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:24:14.000000000 +0000
+++ new/kernel/dsk.c    2004-06-11 04:29:24.000000000 +0000
@@ -721,12 +721,8 @@ STATIC WORD Genblkdev(rqptr rp, ddt * pd
 
 STATIC WORD blockio(rqptr rp, ddt * pddt)
 {
-  ULONG start, size;
-  WORD ret;
-  UWORD done;
-
+  ULONG start;
   int action;
-  bpb *pbpb;
 
   switch (rp->r_command)
   {
@@ -748,23 +744,20 @@ STATIC WORD blockio(rqptr rp, ddt * pddt
 
   tmark(pddt);
   start = (rp->r_start != HUGECOUNT ? rp->r_start : rp->r_huge);
-  pbpb = hd(pddt->ddt_descflags) ? &pddt->ddt_defbpb : &pddt->ddt_bpb;
-  size = (pbpb->bpb_nsize ? pbpb->bpb_nsize : pbpb->bpb_huge);
-
-  if (start >= size || start + rp->r_count > size)
   {
-    return 0x0408;
+    const bpb *pbpb = hd(pddt->ddt_descflags) ? &pddt->ddt_defbpb : &pddt->ddt_bpb;
+    ULONG size = (pbpb->bpb_nsize ? pbpb->bpb_nsize : pbpb->bpb_huge);
+    if (start >= size || rp->r_count > size - start)
+      return 0x0408;
   }
-  start += pddt->ddt_offset;
-
-  ret = LBA_Transfer(pddt, action,
-                     rp->r_trans,
-                     start, rp->r_count, &done);
-  rp->r_count = done;
 
-  if (ret != 0)
   {
-    return dskerr(ret);
+    UWORD done;
+    int ret = LBA_Transfer(pddt, action, rp->r_trans,
+                           start + pddt->ddt_offset, rp->r_count, &done);
+    rp->r_count = done;
+    if (ret)
+      return dskerr(ret);
   }
   return S_DONE;
 }

--- End Message ---

Reply via email to