[openfirmware] [commit] r1788 - ofw/fs/fatfs

repository service svn at openfirmware.info
Fri Apr 16 05:22:16 CEST 2010


Author: wmb
Date: Fri Apr 16 05:22:16 2010
New Revision: 1788
URL: http://tracker.coreboot.org/trac/openfirmware/changeset/1788

Log:
FAT filesystem driver - fixed a problem with free cluster tracking in the case where the number of free clusters is set to "don't know".

Modified:
   ofw/fs/fatfs/bpb.fth
   ofw/fs/fatfs/device.fth
   ofw/fs/fatfs/fat.fth

Modified: ofw/fs/fatfs/bpb.fth
==============================================================================
--- ofw/fs/fatfs/bpb.fth	Fri Apr 16 05:20:30 2010	(r1787)
+++ ofw/fs/fatfs/bpb.fth	Fri Apr 16 05:22:16 2010	(r1788)
@@ -91,8 +91,12 @@
 d# 16 constant fat16
 d# 32 constant fat32
 
-: fs-#free+  ( -- )  fs_#freeclusters  dup lel@  1+  swap lel!  true fsinfos-dirty c!  ;
-: fs-#free-  ( -- )  fs_#freeclusters  dup lel@  1-  swap lel!  true fsinfos-dirty c!  ;
+: +fs-#free  ( incr -- )
+   fs_#freeclusters  dup lel@                ( incr adr n )
+   dup h# ffffffff =  if  3drop exit  then   ( incr adr n )
+   rot +  swap lel!
+   true fsinfos-dirty c!
+;
 : fs-free#!  ( cluster# -- )  fs_freecluster# lel!  true fsinfos-dirty c!  ;
 
 

Modified: ofw/fs/fatfs/device.fth
==============================================================================
--- ofw/fs/fatfs/device.fth	Fri Apr 16 05:20:30 2010	(r1787)
+++ ofw/fs/fatfs/device.fth	Fri Apr 16 05:22:16 2010	(r1788)
@@ -108,7 +108,7 @@
    alloc-fssector
    1 fssector @  read-sectors  if
       free-fssector
-      "CaR ". ." File system inforation sector"
+      "CaR ". ." File system information sector"
       abort
    then
    not-fsinfo?  if  free-fssector  then

Modified: ofw/fs/fatfs/fat.fth
==============================================================================
--- ofw/fs/fatfs/fat.fth	Fri Apr 16 05:20:30 2010	(r1787)
+++ ofw/fs/fatfs/fat.fth	Fri Apr 16 05:22:16 2010	(r1788)
@@ -196,7 +196,7 @@
             drop fs_freecluster# lel@              ( hint' )
          then                                      ( hint )
          (allocate-cluster)                        ( false | cluster# true )
-         dup  if  over fs-free#!  fs-#free-  then  ( false | cluster# true )
+         dup  if  over fs-free#!  -1 +fs-#free  then  ( false | cluster# true )
       else                                         ( hint )
          drop false                                ( false )
       then                                         ( false | cluster# true )
@@ -209,10 +209,10 @@
 : deallocate-clusters  ( first-cl# -- )
    begin
       dup 0<>  over fat-end? 0= and
-   while                               ( cluster# )
-      dup  cluster@                    ( cluster# next-cluster# )
-      0 rot  cluster!                  ( next-cluster# )
-      fsinfo @  if  fs-#free+  then    ( next-cluster# )
+   while                                 ( cluster# )
+      dup  cluster@                      ( cluster# next-cluster# )
+      0 rot  cluster!                    ( next-cluster# )
+      fsinfo @  if  1 +fs-#free  then    ( next-cluster# )
    repeat
    drop
    ?flush-fat-cache



More information about the openfirmware mailing list