]> err.no Git - util-linux/commitdiff
fdisk: check returns in fdisk from partition changes
authorMike Frysinger <vapier@gentoo.org>
Sat, 14 Jul 2007 17:32:37 +0000 (13:32 -0400)
committerKarel Zak <kzak@redhat.com>
Mon, 16 Jul 2007 21:03:45 +0000 (23:03 +0200)
currently the code in fdisk which changes partition types is a bit fragile ...
it assumes the partition type succeeded instead of checking the user input or
for errors.  ive tweaked the sub functions to return a value indicative of the
functions' success and fdisk now checks/reports based on that.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
fdisk/fdisk.c
fdisk/fdisksgilabel.c
fdisk/fdisksgilabel.h
fdisk/fdisksunlabel.c
fdisk/fdisksunlabel.h

index 5010d7db32aec29824bdd188c3f11b1a4a442580..f2faa7fbc88d4aad6c89854746f5adab4b0c435a 100644 (file)
@@ -1499,17 +1499,21 @@ change_sysid(void) {
                         if (sys == origsys)
                                break;
                        if (sun_label) {
-                               sun_change_sysid(i, sys);
+                               ptes[i].changed = sun_change_sysid(i, sys);
                        } else
                        if (sgi_label) {
-                               sgi_change_sysid(i, sys);
-                       } else
+                               ptes[i].changed = sgi_change_sysid(i, sys);
+                       } else {
                                p->sys_ind = sys;
-                        printf (_("Changed system type of partition %d "
-                                "to %x (%s)\n"), i + 1, sys,
-                                (temp = partition_type(sys)) ? temp :
-                                _("Unknown"));
-                        ptes[i].changed = 1;
+                               ptes[i].changed = 1;
+                       }
+                       temp = partition_type(sys) ? : _("Unknown");
+                       if (ptes[i].changed)
+                               printf (_("Changed system type of partition %d "
+                                       "to %x (%s)\n"), i + 1, sys, temp);
+                       else
+                               printf (_("System type of partition %d is unchanged"
+                                       "to %x (%s)\n"), i + 1, sys, temp);
                        if (is_dos_partition(origsys) ||
                            is_dos_partition(sys))
                                dos_changed = 1;
index e1b3829cb6c50a4fe3bd34a90d2ca7edc695e1d8..7e189fb3fb558203e019cb276933c90fc948b5fe 100644 (file)
@@ -537,12 +537,12 @@ verify_sgi(int verbose)
        return (gap > 0) ? 1 : (gap == 0) ? 0 : -1;
 }
 
-void
+int
 sgi_change_sysid(int i, int sys)
 {
        if (sgi_get_num_sectors(i) == 0) /* caught already before, ... */ {
                printf(_("Sorry You may change the Tag of non-empty partitions.\n"));
-               return;
+               return 0;
        }
        if (((sys != ENTIRE_DISK) && (sys != SGI_VOLHDR))
            && (sgi_get_start_sector(i)<1)) {
@@ -553,9 +553,10 @@ sgi_change_sysid(int i, int sys)
                          "Only the \"SGI volume\" entire disk section may violate this.\n"
                          "Type YES if you are sure about tagging this partition differently.\n"));
                if (strcmp (line_ptr, _("YES\n")))
-                       return;
+                       return 0;
        }
        sgilabel->partitions[i].id = SSWAP32(sys);
+       return 1;
 }
 
 /* returns partition index of first entry marked as entire disk */
index fe757bf1ccea48f10e6e125ab49fe742532ecf5f..02b3e9d55a172cb875d7e9c673f58faf0c530ed2 100644 (file)
@@ -112,7 +112,7 @@ extern struct       systypes sgi_sys_types[];
 extern void    sgi_nolabel( void );
 extern int     check_sgi_label( void );
 extern void    sgi_list_table( int xtra );
-extern void    sgi_change_sysid( int i, int sys );
+extern int  sgi_change_sysid( int i, int sys );
 extern unsigned int    sgi_get_start_sector( int i );
 extern unsigned int    sgi_get_num_sectors( int i );
 extern int     sgi_get_sysid( int i );
index f67aa261a543902cc9abbce926918d5038cec8eb..60ade06d5460024c58f91b8e7df4526d37a8d3af 100644 (file)
@@ -530,7 +530,7 @@ void sun_delete_partition(int i)
        part->num_sectors = 0;
 }
 
-void sun_change_sysid(int i, __u16 sys)
+int sun_change_sysid(int i, __u16 sys)
 {
        struct sun_partition *part = &sunlabel->partitions[i];
        struct sun_tag_flag *tag = &sunlabel->part_tags[i];
@@ -543,7 +543,7 @@ void sun_change_sysid(int i, __u16 sys)
              "Type YES if you're very sure you would like that partition\n"
              "tagged with 82 (Linux swap): "));
            if (strcmp (line_ptr, _("YES\n")))
-                   return;
+                   return 0;
        }
        switch (sys) {
        case SUN_TAG_SWAP:
@@ -558,6 +558,7 @@ void sun_change_sysid(int i, __u16 sys)
                break;
        }
        tag->tag = SSWAP16(sys);
+       return 1;
 }
 
 void sun_list_table(int xtra)
index c8e069804a38097bf27a41a6aee27553fd50e900..fba67f725f581bfb9a2abbfd4806365a37e7633f 100644 (file)
@@ -82,7 +82,7 @@ extern int check_sun_label(void);
 extern void sun_nolabel(void);
 extern void create_sunlabel(void);
 extern void sun_delete_partition(int i);
-extern void sun_change_sysid(int i, __u16 sys);
+extern int sun_change_sysid(int i, __u16 sys);
 extern void sun_list_table(int xtra);
 extern void verify_sun(void);
 extern void add_sun_partition(int n, int sys);