]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
fdisk: use fdisk_parttype in add_partition
authorKarel Zak <kzak@redhat.com>
Wed, 26 Sep 2012 12:14:54 +0000 (14:14 +0200)
committerKarel Zak <kzak@redhat.com>
Thu, 27 Sep 2012 11:38:13 +0000 (13:38 +0200)
Signed-off-by: Karel Zak <kzak@redhat.com>
fdisks/fdisk.c
fdisks/fdisk.h
fdisks/fdiskaixlabel.c
fdisks/fdiskbsdlabel.c
fdisks/fdiskdoslabel.c
fdisks/fdiskmaclabel.c
fdisks/fdisksgilabel.c
fdisks/fdisksunlabel.c
fdisks/utils.c

index 814183108c8e906c331f02ce135afad528c58bc9..6dff7553c82accbc0f9fea855e7afa45dab0aab6 100644 (file)
@@ -1306,11 +1306,7 @@ static void new_partition(struct fdisk_context *cxt)
        if (disklabel == SUN_LABEL || disklabel == SGI_LABEL)
                partnum = get_partition(cxt, 0, partitions);
 
-       /*
-        * Use default LINUX_NATIVE partition type, DOS labels
-        * may override this internally.
-        */
-       fdisk_add_partition(cxt, partnum, LINUX_NATIVE);
+       fdisk_add_partition(cxt, partnum, NULL);
 }
 
 static void write_table(struct fdisk_context *cxt)
index 5af172fcf22e9dd986b39d1ca04bdc9965ecae89..d80f97517bd1a0b5766c24c39e134207083a1c0a 100644 (file)
@@ -171,7 +171,7 @@ struct fdisk_label {
        /* create new disk label */
        int (*create)(struct fdisk_context *cxt);
        /* new partition */
-       void (*part_add)(struct fdisk_context *cxt, int partnum, int parttype);
+       void (*part_add)(struct fdisk_context *cxt, int partnum, struct fdisk_parttype *t);
        /* delete partition */
        void (*part_delete)(struct fdisk_context *cxt, int partnum);
        /* get partition type */
@@ -201,7 +201,7 @@ extern int fdisk_context_set_user_geometry(struct fdisk_context *cxt,
                            unsigned int cylinders, unsigned int heads,
                            unsigned int sectors);
 extern int fdisk_delete_partition(struct fdisk_context *cxt, int partnum);
-extern int fdisk_add_partition(struct fdisk_context *cxt, int partnum, int parttype);
+extern int fdisk_add_partition(struct fdisk_context *cxt, int partnum, struct fdisk_parttype *t);
 extern int fdisk_write_disklabel(struct fdisk_context *cxt);
 extern int fdisk_verify_disklabel(struct fdisk_context *cxt);
 extern int fdisk_create_disklabel(struct fdisk_context *cxt, const char *name);
index 6fe7b59d8ae143befbedd9a9a050b2a0f7eacecd..3ee37cb4e2ccdad99fed83b20475016bc9d38fd3 100644 (file)
@@ -69,7 +69,7 @@ static int aix_probe_label(struct fdisk_context *cxt)
 static void aix_add_partition(
                struct fdisk_context *cxt __attribute__((__unused__)),
                int partnum __attribute__((__unused__)),
-               int parttype __attribute__((__unused__)))
+               struct fdisk_parttype *t __attribute__((__unused__)))
 {
        printf(_("\tSorry - this fdisk cannot handle AIX disk labels."
                 "\n\tIf you want to add DOS-type partitions, create"
index b11bcf1cb76e994ad6c085340c5fb6a80aff2e9a..af7513f5e1255bb33a3435297e440bff1bb71862 100644 (file)
@@ -153,7 +153,7 @@ static int xbsd_write_disklabel (struct fdisk_context *cxt)
 
 static void xbsd_add_part (struct fdisk_context *cxt,
                int partnum __attribute__((__unused__)),
-               int parttype __attribute__((__unused__)))
+               struct fdisk_parttype *t __attribute__((__unused__)))
 {
        unsigned int begin, end;
        char mesg[256];
index d391126eccccde666332c2655020083fb3f618cb..2436af533c1ac7be3eb7bbb4d796e8f8ecfc2324 100644 (file)
@@ -487,15 +487,17 @@ static sector_t align_lba_in_range(struct fdisk_context *cxt,
        return lba;
 }
 
-static void add_partition(struct fdisk_context *cxt, int n, int sys)
+static void add_partition(struct fdisk_context *cxt, int n, struct fdisk_parttype *t)
 {
        char mesg[256];         /* 48 does not suffice in Japanese */
-       int i, read = 0;
+       int i, sys, read = 0;
        struct partition *p = ptes[n].part_table;
        struct partition *q = ptes[ext_index].part_table;
        sector_t start, stop = 0, limit, temp,
                first[partitions], last[partitions];
 
+       sys = t ? t->type : LINUX_NATIVE;
+
        if (p && p->sys_ind) {
                printf(_("Partition %d is already defined.  Delete "
                         "it before re-adding it.\n"), n + 1);
@@ -646,7 +648,7 @@ static void add_logical(struct fdisk_context *cxt)
                partitions++;
        }
        printf(_("Adding logical partition %d\n"), partitions);
-       add_partition(cxt, partitions - 1, LINUX_NATIVE);
+       add_partition(cxt, partitions - 1, NULL);
 }
 
 static int dos_verify_disklabel(struct fdisk_context *cxt)
@@ -722,13 +724,10 @@ static int dos_verify_disklabel(struct fdisk_context *cxt)
 static void dos_add_partition(
                        struct fdisk_context *cxt,
                        int partnum __attribute__ ((__unused__)),
-                       int parttype)
+                       struct fdisk_parttype *t)
 {
        int i, free_primary = 0;
 
-       /* default */
-       parttype = LINUX_NATIVE;
-
        for (i = 0; i < 4; i++)
                free_primary += !ptes[i].part_table->sys_ind;
 
@@ -747,7 +746,7 @@ static void dos_add_partition(
        } else if (partitions >= MAXIMUM_PARTS) {
                printf(_("All logical partitions are in use\n"));
                printf(_("Adding a primary partition\n"));
-               add_partition(cxt, get_partition(cxt, 0, 4), parttype);
+               add_partition(cxt, get_partition(cxt, 0, 4), t);
        } else {
                char c, dflt, line[LINE_LENGTH];
 
@@ -769,15 +768,17 @@ static void dos_add_partition(
                if (c == 'p') {
                        int i = get_nonexisting_partition(cxt, 0, 4);
                        if (i >= 0)
-                               add_partition(cxt, i, parttype);
+                               add_partition(cxt, i, t);
                        return;
                } else if (c == 'l' && extended_offset) {
                        add_logical(cxt);
                        return;
                } else if (c == 'e' && !extended_offset) {
                        int i = get_nonexisting_partition(cxt, 0, 4);
-                       if (i >= 0)
-                               add_partition(cxt, i, EXTENDED);
+                       if (i >= 0) {
+                               t = fdisk_get_parttype_from_code(cxt, EXTENDED);
+                               add_partition(cxt, i, t);
+                       }
                        return;
                } else
                        printf(_("Invalid partition type `%c'\n"), c);
index 34db9d62d623f223c4e6072c63a29be19ecb6542..e09d5e4fca8574c723f6f93f9d82515a59e16382 100644 (file)
@@ -87,7 +87,7 @@ IS_MAC:
 static void mac_add_partition(
                        struct fdisk_context *cxt __attribute__ ((__unused__)),
                        int partnum __attribute__ ((__unused__)),
-                       int parttype __attribute__ ((__unused__)))
+                       struct fdisk_parttype *t __attribute__ ((__unused__)))
 {
        printf(_("\tSorry - this fdisk cannot handle Mac disk labels."
                 "\n\tIf you want to add DOS-type partitions, create"
index 6cef145e4d4564877d16f2264801cd105ae05988..aa46fd5ff5083a2a334ca9c4b6a30378a0917d11 100644 (file)
@@ -636,16 +636,18 @@ static void sgi_delete_partition(struct fdisk_context *cxt, int partnum)
        sgi_set_partition(cxt, partnum, 0, 0, 0);
 }
 
-static void sgi_add_partition(struct fdisk_context *cxt, int n, int sys)
+static void sgi_add_partition(struct fdisk_context *cxt, int n,
+                             struct fdisk_parttype *t)
 {
        char mesg[256];
        unsigned int first=0, last=0;
+       int sys = t ? t->type : SGI_XFS;
 
-       if (n == 10) {
+       if (n == 10)
                sys = SGI_VOLUME;
-       } else if (n == 8) {
+       else if (n == 8)
                sys = 0;
-       }
+
        if (sgi_get_num_sectors(cxt, n)) {
                printf(_("Partition %d is already defined.  Delete "
                         "it before re-adding it.\n"), n + 1);
index 43d3cdfd94ac4348fe8c8d7525d9e864e18372b0..9d3c3d19727871c8fbf0161b2e276767201e0602 100644 (file)
@@ -364,13 +364,14 @@ static int sun_verify_disklabel(struct fdisk_context *cxt)
     return 0;
 }
 
-static void sun_add_partition(struct fdisk_context *cxt, int n, int sys)
+static void sun_add_partition(struct fdisk_context *cxt, int n,
+                             struct fdisk_parttype *t)
 {
        uint32_t starts[SUN_NUM_PARTITIONS], lens[SUN_NUM_PARTITIONS];
        struct sun_partition *part = &sunlabel->partitions[n];
        struct sun_tag_flag *tag = &sunlabel->part_tags[n];
        uint32_t start, stop, stop2;
-       int whole_disk = 0;
+       int whole_disk = 0, sys = t ? t->type : SUN_TAG_LINUX_NATIVE;
 
        char mesg[256];
        int i;
index e9bc0182c2ab92955bb75f61fbd63ac818f9c34e..482a6cf92881ebd18d80ef70a4ff28a23dd5c9c6 100644 (file)
@@ -88,20 +88,21 @@ int fdisk_verify_disklabel(struct fdisk_context *cxt)
  * fdisk_add_partition:
  * @cxt: fdisk context
  * @partnum: partition number to create
- * @parttype: partition type to create
+ * @t: partition type to create or NULL for label-specific default
  *
  * Creates a new partition, with number @partnum and type @parttype.
  *
  * Returns 0.
  */
-int fdisk_add_partition(struct fdisk_context *cxt, int partnum, int parttype)
+int fdisk_add_partition(struct fdisk_context *cxt, int partnum,
+                       struct fdisk_parttype *t)
 {
        if (!cxt || !cxt->label)
                return -EINVAL;
        if (!cxt->label->part_add)
                return -ENOSYS;
 
-       cxt->label->part_add(cxt, partnum, parttype);
+       cxt->label->part_add(cxt, partnum, t);
        return 0;
 }