Message ID | 1434959987-8530-4-git-send-email-nikunj@linux.vnet.ibm.com (mailing list archive) |
---|---|
State | Not Applicable |
Headers | show |
On Mon, Jun 22, 2015 at 01:29:45PM +0530, Nikunj A Dadhania wrote: > +: has-fat-filesystem ( block -- true | false ) > + \ block 0 byte 0-2 is a jump instruction in all FAT > + \ filesystems. "block" there is not a block number, just a host address. So it's not a good name. Maybe do a better name for this word as well, something saying it looks at a disk block. > + \ e9 and eb are jump instructions in x86 assembler. > + dup c@ e9 <> IF > + dup c@ eb <> swap > + 2+ c@ 90 <> or > + IF false EXIT THEN > + ELSE DROP THEN > + TRUE > +; Don't write DROP and TRUE in caps please. The purpose of having the structure words in caps is to make them stand out more, to make things more readable; putting other things in caps as well destroys that. Since you factored this, it becomes more readable if you invert the conditions: : fat-bootblock? ( addr -- flag ) \ byte 0-2 of the bootblock is a jump instruction in \ all FAT filesystems. \ e9 and eb are jump instructions in x86 assembler. dup c@ e9 = IF drop true EXIT THEN dup c@ eb = swap 2+ c@ 90 = and ; (not tested, etc.) Segher
Hi Segher, Segher Boessenkool <segher@kernel.crashing.org> writes: > On Mon, Jun 22, 2015 at 01:29:45PM +0530, Nikunj A Dadhania wrote: >> +: has-fat-filesystem ( block -- true | false ) >> + \ block 0 byte 0-2 is a jump instruction in all FAT >> + \ filesystems. > > "block" there is not a block number, just a host address. So it's not > a good name. Maybe do a better name for this word as well, something > saying it looks at a disk block. Sure. > >> + \ e9 and eb are jump instructions in x86 assembler. >> + dup c@ e9 <> IF >> + dup c@ eb <> swap >> + 2+ c@ 90 <> or >> + IF false EXIT THEN >> + ELSE DROP THEN >> + TRUE >> +; > > Don't write DROP and TRUE in caps please. The purpose of having the > structure words in caps is to make them stand out more, to make things > more readable; putting other things in caps as well destroys that. Sure, will take care. > Since you factored this, it becomes more readable if you invert the > conditions: Sure. > : fat-bootblock? ( addr -- flag ) > \ byte 0-2 of the bootblock is a jump instruction in > \ all FAT filesystems. > \ e9 and eb are jump instructions in x86 assembler. > dup c@ e9 = IF drop true EXIT THEN > dup c@ eb = swap 2+ c@ 90 = and ; > > (not tested, etc.) Will test. Regards, Nikunj
diff --git a/slof/fs/packages/disk-label.fs b/slof/fs/packages/disk-label.fs index 2cf1b85..e317e93 100644 --- a/slof/fs/packages/disk-label.fs +++ b/slof/fs/packages/disk-label.fs @@ -320,6 +320,18 @@ CONSTANT /gpt-part-entry \ Load from first active DOS boot partition. +: has-fat-filesystem ( block -- true | false ) + \ block 0 byte 0-2 is a jump instruction in all FAT + \ filesystems. + \ e9 and eb are jump instructions in x86 assembler. + dup c@ e9 <> IF + dup c@ eb <> swap + 2+ c@ 90 <> or + IF false EXIT THEN + ELSE DROP THEN + TRUE +; + \ NOTE: block-size is always 512 bytes for DOS partition tables. : load-from-dos-boot-partition ( addr -- size ) @@ -547,15 +559,7 @@ AA268B49521E5A8B CONSTANT GPT-PREP-PARTITION-4 : try-dos-files ( -- found? ) no-mbr? IF false EXIT THEN - - \ block 0 byte 0-2 is a jump instruction in all FAT - \ filesystems. - \ e9 and eb are jump instructions in x86 assembler. - block c@ e9 <> IF - block c@ eb <> - block 2+ c@ 90 <> or - IF false EXIT THEN - THEN + block has-fat-filesystem 0= IF false EXIT THEN s" fat-files" (interpose-filesystem) true ;
Signed-off-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com> --- slof/fs/packages/disk-label.fs | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-)