commit a70c4f5510032143bb0e0100fac5aecafca079a1 parent abf3c9dd2289b1989d92d8749607c9c9c19dae13 Author: Virgil Dupras <hsoft@hardcoded.net> Date: Sun, 21 Aug 2022 10:00:56 -0400 fs/fat: simplify :newdir Diffstat:
M | fs/fs/fat.fs | | | 27 | ++++++++++++--------------- |
1 file changed, 12 insertions(+), 15 deletions(-)
diff --git a/fs/fs/fat.fs b/fs/fs/fat.fs @@ -46,10 +46,6 @@ extends FATLO struct[ FAT $ffff const EOC $e5 const DIRFREE -: :ClusterOfSector ( sec self -- cl ) >r - r@ FATLO :FirstDataSector 0< if drop 0 else ( sec ) - r@ FATLO secpercluster / 1+ 1+ then rdrop ; - : writecursector ( self -- ) dup FATLO bufsec over FATLO :buf( rot ( sec dst self ) FATLO :drv :sec! ; @@ -118,19 +114,20 @@ $e5 const DIRFREE : fatnewfile ( dirid name self -- id ) >r r@ _newentry ( dirent ) r@ writecursector r> FATLO :getid ; -0 value _self 0 value _dirid 0 value _name 0 value _cluster -: fatnewdir ( dirid name self -- id ) to _self to _name to _dirid - _self allocatecluster0 to _cluster +: _makedir ( dirent -- dirent ) $10 over DirEntry attr! ; + +0 value _self 0 value _cluster 0 value _parentcl +: fatnewdir ( dirid name self -- id ) to _self + _self allocatecluster0 to _cluster ( dirid name ) + _self _newentry ( dirent ) _makedir ( dirent ) + _cluster over DirEntry cluster! _self writecursector ( dirent ) + _self FATLO :getid ( id ) _self FATLO bufcluster to _parentcl \ Cluster allocated, now let's initialize it with "." and ".." _cluster _self FATLO :FirstSectorOfCluster 1 _self FATLO :readsector - _self FATLO :buf( '.' over c! $10 over DirEntry attr! ( buf ) - _cluster over DirEntry cluster! ( buf ) DirEntry SZ + - '.' over c!+ '.' swap c! ( buf ) $10 over DirEntry attr! ( buf ) - _dirid _self FATLO secsz / _self :ClusterOfSector ( buf parentcl ) - swap DirEntry cluster! _self writecursector ( ) - _dirid _name _self _newentry ( dirent ) $10 over DirEntry attr! ( dirent ) - _cluster over DirEntry cluster! _self writecursector ( dirent ) - _self FATLO :getid ( id ) ; + _self FATLO :buf( '.' over c! _makedir ( id buf ) + _cluster over DirEntry cluster! ( id buf ) DirEntry SZ + + '.' over c!+ '.' swap c! ( id buf ) _makedir ( id buf ) + _parentcl swap DirEntry cluster! _self writecursector ( id ) ; 0 value self \ write multiple sectors from buf