bug-parted
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 2/3] libparted: make pc98 detection depend on signatures (#646053


From: Brian C. Lane
Subject: [PATCH 2/3] libparted: make pc98 detection depend on signatures (#646053)
Date: Fri, 7 Oct 2011 16:53:49 -0700

From: "Brian C. Lane" <address@hidden>

pc98 is not a common disk label. Change pc98_probe to only return true
if one of the recognized signatures is present.
Currently these include:

IPL1
Linux 98
GRUB/98

This will prevent false-positive detection on msdos labeled disks

* libparted/labels/pc98.c (pc98_probe): Change to require signature
  (pc98_check_ipl_signature): Add more signatures
---
 libparted/labels/pc98.c |   32 ++++++++++----------------------
 1 files changed, 10 insertions(+), 22 deletions(-)

diff --git a/libparted/labels/pc98.c b/libparted/labels/pc98.c
index 3afa8a2..ea3cf4e 100644
--- a/libparted/labels/pc98.c
+++ b/libparted/labels/pc98.c
@@ -140,7 +140,14 @@ pc98_check_magic (const PC98RawTable *part_table)
 static int
 pc98_check_ipl_signature (const PC98RawTable *part_table)
 {
-       return !memcmp (part_table->boot_code + 4, "IPL1", 4);
+       if (memcmp (part_table->boot_code + 4, "IPL1", 4) == 0)
+               return 1;
+       else if (memcmp (part_table->boot_code + 4, "Linux 98", 8) == 0)
+               return 1;
+       else if (memcmp (part_table->boot_code + 4, "GRUB/98 ", 8) == 0)
+               return 1;
+       else
+               return 0;
 }
 
 static int
@@ -192,27 +199,8 @@ pc98_probe (const PedDevice *dev)
        if (!pc98_check_magic (&part_table))
                return 0;
 
-       /* check consistency */
-       empty = 1;
-       for (p = part_table.partitions;
-            p < part_table.partitions + MAX_PART_COUNT;
-            p++)
-       {
-               if (p->mid == 0 && p->sid == 0)
-                       continue;
-               empty = 0;
-               if (!check_partition_consistency (dev, p))
-                       return 0;
-       }
-
-       /* check boot loader */
-       if (pc98_check_ipl_signature (&part_table))
-               return 1;
-       else if (part_table.boot_code[0])       /* invalid boot loader */
-               return 0;
-
-       /* Not to mistake msdos disk map for PC-9800's empty disk map  */
-       if (empty)
+       /* check for boot loader signatures */
+       if (!pc98_check_ipl_signature (&part_table))
                return 0;
 
        return 1;
-- 
1.7.6.4




reply via email to

[Prev in Thread] Current Thread [Next in Thread]