diff mbox

[SLOF,v2,4/5] disk-label: introduce helper to check fat filesystem

Message ID 1435214729-15952-5-git-send-email-nikunj@linux.vnet.ibm.com (mailing list archive)
State Not Applicable
Headers show

Commit Message

Nikunj A Dadhania June 25, 2015, 6:45 a.m. UTC
Signed-off-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com>
---
 slof/fs/packages/disk-label.fs | 17 +++++++++--------
 1 file changed, 9 insertions(+), 8 deletions(-)

Comments

Thomas Huth June 29, 2015, 8:47 a.m. UTC | #1
On Thu, 25 Jun 2015 12:15:28 +0530
Nikunj A Dadhania <nikunj@linux.vnet.ibm.com> wrote:

> Signed-off-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com>
> ---
>  slof/fs/packages/disk-label.fs | 17 +++++++++--------
>  1 file changed, 9 insertions(+), 8 deletions(-)
> 
> diff --git a/slof/fs/packages/disk-label.fs b/slof/fs/packages/disk-label.fs
> index 0995808..7ed5526 100644
> --- a/slof/fs/packages/disk-label.fs
> +++ b/slof/fs/packages/disk-label.fs
> @@ -321,6 +321,14 @@ CONSTANT /gpt-part-entry
>  
>  \ Load from first active DOS boot partition.
>  
> +: 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
> +;
> +
>  \ NOTE: block-size is always 512 bytes for DOS partition tables.
>  
>  : load-from-dos-boot-partition ( addr -- size )
> @@ -549,14 +557,7 @@ AA268B49521E5A8B    CONSTANT GPT-PREP-PARTITION-4
>  : try-dos-files ( -- found? )
>     no-mbr? IF false EXIT THEN
>  
> -   \ disk-buf 0 byte 0-2 is a jump instruction in all FAT
> -   \ filesystems.
> -   \ e9 and eb are jump instructions in x86 assembler.
> -   disk-buf c@ e9 <> IF
> -      disk-buf c@ eb <>
> -      disk-buf 2+ c@ 90 <> or
> -      IF false EXIT THEN
> -   THEN
> +   disk-buf fat-bootblock? 0= IF false EXIT THEN
>     s" fat-files" (interpose-filesystem)
>     true
>  ;

Reviewed-by: Thomas Huth <thuth@redhat.com>
diff mbox

Patch

diff --git a/slof/fs/packages/disk-label.fs b/slof/fs/packages/disk-label.fs
index 0995808..7ed5526 100644
--- a/slof/fs/packages/disk-label.fs
+++ b/slof/fs/packages/disk-label.fs
@@ -321,6 +321,14 @@  CONSTANT /gpt-part-entry
 
 \ Load from first active DOS boot partition.
 
+: 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
+;
+
 \ NOTE: block-size is always 512 bytes for DOS partition tables.
 
 : load-from-dos-boot-partition ( addr -- size )
@@ -549,14 +557,7 @@  AA268B49521E5A8B    CONSTANT GPT-PREP-PARTITION-4
 : try-dos-files ( -- found? )
    no-mbr? IF false EXIT THEN
 
-   \ disk-buf 0 byte 0-2 is a jump instruction in all FAT
-   \ filesystems.
-   \ e9 and eb are jump instructions in x86 assembler.
-   disk-buf c@ e9 <> IF
-      disk-buf c@ eb <>
-      disk-buf 2+ c@ 90 <> or
-      IF false EXIT THEN
-   THEN
+   disk-buf fat-bootblock? 0= IF false EXIT THEN
    s" fat-files" (interpose-filesystem)
    true
 ;