[packages/parted] - more FC patches, fixes build on recent systems

hawk hawk at pld-linux.org
Wed Aug 21 21:12:38 CEST 2019


commit 74a816df60f30b1f2f8fa0daee211a9ea3f44446
Author: Marcin Krol <hawk at tld-linux.org>
Date:   Wed Aug 21 21:11:03 2019 +0200

    - more FC patches, fixes build on recent systems

 ...arted-labels-link-with-libiconv-if-needed.patch |  51 +++
 0081-Add-support-for-NVDIMM-devices.patch          |  84 +++++
 ...x-Include-sys-sysmacros.h-for-major-macro.patch |  25 ++
 0083-Fix-make-check.patch                          |  63 ++++
 0084-tests-fix-t6100-mdraid-partitions.patch       |  26 ++
 ...-disk_set-to-not-crash-when-no-flags-are-.patch |  77 +++++
 ...w-negative-start-value-when-FS-TYPE-is-no.patch | 122 +++++++
 0087-Fix-resizepart-iec-unit-end-sector.patch      |  32 ++
 ...d-Remove-unused-traces-of-dynamic-loading.patch | 238 +++++++++++++
 0089-Lift-512-byte-restriction-on-fat-resize.patch |  52 +++
 0090-Fix-atari-label-false-positives.patch         |  41 +++
 ...header-move-and-msdos-overlap-to-work-wit.patch |  87 +++++
 ...-header-move-and-msdos-overlap-to-python3.patch |  33 ++
 ...-libparted-Fix-ending-CHS-address-in-PMBR.patch |  29 ++
 0094-Fix-the-length-of-several-strncpy-calls.patch |  76 +++++
 0095-parted.c-Always-free-peek_word.patch          |  35 ++
 0096-parted.c-Make-sure-dev_name-is-freed.patch    |  45 +++
 ...d-partitions-Use-v0.90-metadata-for-the-t.patch |  29 ++
 ...ix-potential-command-line-buffer-overflow.patch |  46 +++
 ...dd-support-for-MBR-id-GPT-GUID-and-detect.patch | 379 +++++++++++++++++++++
 ...-udf-to-t1700-probe-fs-and-to-the-manpage.patch |  41 +++
 ...t_name-Resolve-conflicting-attributes-con.patch |  34 ++
 ...rnings-from-GCC-7-s-Wimplicit-fallthrough.patch |  97 ++++++
 0103-Read-NVMe-model-names-from-sysfs.patch        |  59 ++++
 ...crash-due-to-improper-partition-number-in.patch |  94 +++++
 ...rted-fix-wrong-error-label-jump-in-mkpart.patch |  66 ++++
 ...isk-information-when-commands-fail-in-int.patch |  86 +++++
 ...ve-PED_ASSERT-from-ped_partition_set_name.patch |  32 ++
 ...rt-for-Windows-recovery-partition-WINRE-o.patch | 167 +++++++++
 0109-t6000-dm-Stop-using-private-lvm-root.patch    |  40 +++
 ...gv-in-case-2nd-nilfs2-superblock-magic-ac.patch |  53 +++
 ...for-sigsegv-when-false-nilfs2-superblock-.patch | 132 +++++++
 parted.spec                                        |  65 ++++
 33 files changed, 2536 insertions(+)
---
diff --git a/parted.spec b/parted.spec
index 344020c..5cbac78 100644
--- a/parted.spec
+++ b/parted.spec
@@ -103,6 +103,38 @@ Patch76:	0076-Increase-timeout-for-rmmod-scsi_debug-and-make-it-a-.patch
 Patch77:	0077-tests-t1701-rescue-fs-wait-for-the-device-to-appear.patch
 Patch78:	0078-lib%{name}-Fix-udev-cookie-leak-in-_dm_resize_partiti.patch
 Patch79:	0079-atari.c-Drop-xlocale.h-1476934.patch
+Patch80:	0080-libparted-labels-link-with-libiconv-if-needed.patch
+Patch81:	0081-Add-support-for-NVDIMM-devices.patch
+Patch82:	0082-linux-Include-sys-sysmacros.h-for-major-macro.patch
+Patch83:	0083-Fix-make-check.patch
+Patch84:	0084-tests-fix-t6100-mdraid-partitions.patch
+Patch85:	0085-Fix-set-and-disk_set-to-not-crash-when-no-flags-are-.patch
+Patch86:	0086-mkpart-Allow-negative-start-value-when-FS-TYPE-is-no.patch
+Patch87:	0087-Fix-resizepart-iec-unit-end-sector.patch
+Patch88:	0088-build-Remove-unused-traces-of-dynamic-loading.patch
+Patch89:	0089-Lift-512-byte-restriction-on-fat-resize.patch
+Patch90:	0090-Fix-atari-label-false-positives.patch
+Patch91:	0091-Modify-gpt-header-move-and-msdos-overlap-to-work-wit.patch
+Patch92:	0092-Switch-gpt-header-move-and-msdos-overlap-to-python3.patch
+Patch93:	0093-libparted-Fix-ending-CHS-address-in-PMBR.patch
+Patch94:	0094-Fix-the-length-of-several-strncpy-calls.patch
+Patch95:	0095-parted.c-Always-free-peek_word.patch
+Patch96:	0096-parted.c-Make-sure-dev_name-is-freed.patch
+Patch97:	0097-t6100-mdraid-partitions-Use-v0.90-metadata-for-the-t.patch
+Patch98:	0098-Fix-potential-command-line-buffer-overflow.patch
+Patch99:	0099-libparted-Add-support-for-MBR-id-GPT-GUID-and-detect.patch
+Patch100:	0100-Add-udf-to-t1700-probe-fs-and-to-the-manpage.patch
+Patch101:	0101-ped_unit_get_name-Resolve-conflicting-attributes-con.patch
+Patch102:	0102-Fix-warnings-from-GCC-7-s-Wimplicit-fallthrough.patch
+Patch103:	0103-Read-NVMe-model-names-from-sysfs.patch
+Patch104:	0104-parted-fix-crash-due-to-improper-partition-number-in.patch
+Patch105:	0105-parted-fix-wrong-error-label-jump-in-mkpart.patch
+Patch106:	0106-clean-the-disk-information-when-commands-fail-in-int.patch
+Patch107:	0107-parted-Remove-PED_ASSERT-from-ped_partition_set_name.patch
+Patch108:	0108-Added-support-for-Windows-recovery-partition-WINRE-o.patch
+Patch109:	0109-t6000-dm-Stop-using-private-lvm-root.patch
+Patch110:	0110-Avoid-sigsegv-in-case-2nd-nilfs2-superblock-magic-ac.patch
+Patch111:	0111-Tests-case-for-sigsegv-when-false-nilfs2-superblock-.patch
 
 Patch1001:	%{name}-no_wrap.patch
 Patch1002:	%{name}-BIG_FAT_WARNING.patch
@@ -309,6 +341,38 @@ Biblioteka statyczna libparted.
 %patch77 -p1
 %patch78 -p1
 %patch79 -p1
+%patch80 -p1
+%patch81 -p1
+%patch82 -p1
+%patch83 -p1
+%patch84 -p1
+%patch85 -p1
+%patch86 -p1
+%patch87 -p1
+%patch88 -p1
+%patch89 -p1
+%patch90 -p1
+%patch91 -p1
+%patch92 -p1
+%patch93 -p1
+%patch94 -p1
+%patch95 -p1
+%patch96 -p1
+%patch97 -p1
+%patch98 -p1
+%patch99 -p1
+%patch100 -p1
+%patch101 -p1
+%patch102 -p1
+%patch103 -p1
+%patch104 -p1
+%patch105 -p1
+%patch106 -p1
+%patch107 -p1
+%patch108 -p1
+%patch109 -p1
+%patch110 -p1
+%patch111 -p1
 
 %patch1001 -p1
 %patch1002 -p1
@@ -399,6 +463,7 @@ rm -rf $RPM_BUILD_ROOT
 %endif
 %{_includedir}/parted
 %{_pkgconfigdir}/libparted.pc
+%{_pkgconfigdir}/libparted-fs-resize.pc
 %{_aclocaldir}/parted.m4
 
 %files static
diff --git a/0080-libparted-labels-link-with-libiconv-if-needed.patch b/0080-libparted-labels-link-with-libiconv-if-needed.patch
new file mode 100644
index 0000000..b6e2cd8
--- /dev/null
+++ b/0080-libparted-labels-link-with-libiconv-if-needed.patch
@@ -0,0 +1,51 @@
+From 8bec8bcc639cfc7ed0ca7cd3a5321513aa4348fd Mon Sep 17 00:00:00 2001
+From: "Arnout Vandecappelle (Essensium/Mind)" <arnout at mind.be>
+Date: Sun, 5 Nov 2017 23:33:37 +0100
+Subject: [PATCH 80/81] libparted/labels: link with libiconv if needed
+
+gpt.c uses iconv so it should link with it. Otherwise, on platforms
+where libiconv is a separate library, we get a link failure of parted:
+
+    CCLD     parted
+  ../libparted/.libs/libparted.so: undefined reference to `libiconv'
+  ../libparted/.libs/libparted.so: undefined reference to `libiconv_open'
+  ../libparted/.libs/libparted.so: undefined reference to `libiconv_close'
+
+Since iconv functionality is needed unconditionally (not only when
+gettext is enabled), AM_ICONV needs to be added to configure.ac.
+
+(cherry picked from commit 571293e3f9ee45f37867578899c6a8a9cd35afd4)
+---
+ configure.ac                 | 2 ++
+ libparted/labels/Makefile.am | 2 +-
+ 2 files changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index 3d57157..5251dfb 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -288,6 +288,8 @@ fi
+ AC_PROG_LIBTOOL
+ LT_INIT
+ 
++AM_ICONV
++
+ AM_GNU_GETTEXT_VERSION([0.18])
+ AM_GNU_GETTEXT([external])
+ if test "$USE_INCLUDED_LIBINTL" = "yes"; then
+diff --git a/libparted/labels/Makefile.am b/libparted/labels/Makefile.am
+index 3327c8c..db612d1 100644
+--- a/libparted/labels/Makefile.am
++++ b/libparted/labels/Makefile.am
+@@ -36,7 +36,7 @@ liblabels_la_SOURCES = \
+   rdb.c		\
+   sun.c
+ 
+-liblabels_la_LIBADD = $(OS_LIBS) $(INTLLIBS)
++liblabels_la_LIBADD = $(OS_LIBS) $(INTLLIBS) $(LIBICONV)
+ 
+ AM_CPPFLAGS = $(partedincludedir) $(INTLINCS)
+ 
+-- 
+2.13.6
+
diff --git a/0081-Add-support-for-NVDIMM-devices.patch b/0081-Add-support-for-NVDIMM-devices.patch
new file mode 100644
index 0000000..a4b879d
--- /dev/null
+++ b/0081-Add-support-for-NVDIMM-devices.patch
@@ -0,0 +1,84 @@
+From b5bbee5db418e85c8fd26bf07142e71302914738 Mon Sep 17 00:00:00 2001
+From: Sebastian Parschauer <sparschauer at suse.de>
+Date: Tue, 24 Oct 2017 10:22:21 +0200
+Subject: [PATCH] Add support for NVDIMM devices
+
+Recognize NVDIMM devices, so that "parted -s /dev/pmem7 p" now
+prints "Model: NVDIMM Device (pmem)" instead of
+"Model: Unknown (unknown)".
+
+In order for a device to be recognized as NVDIMM, it has to
+have a 'blkext' major number. But since this major can be
+used also by other device types, we also check that the device
+path contains 'pmem' as a substring.
+
+* NEWS: Mention the change
+* include/parted/device.h.in(PedDeviceType): Add PED_DEVICE_PMEM
+* libparted/arch/linux.c(_device_probe_type): Recognize NVDIMM devices.
+* libparted/arch/linux.c(linux_new): Handle NVDIMM devices.
+* parted/parted.c(do_print): Add "pmem" to list of transports.
+
+Signed-off-by: Sebastian Parschauer <sparschauer at suse.de>
+(cherry picked from commit 71885c5f493f3a5d950adbb3e8d17eff7e023053)
+---
+ include/parted/device.in.h | 3 ++-
+ libparted/arch/linux.c     | 7 +++++++
+ parted/parted.c            | 3 ++-
+ 3 files changed, 11 insertions(+), 2 deletions(-)
+
+diff --git a/include/parted/device.in.h b/include/parted/device.in.h
+index 1b6e7b8..d3af6bb 100644
+--- a/include/parted/device.in.h
++++ b/include/parted/device.in.h
+@@ -51,7 +51,8 @@ typedef enum {
+         PED_DEVICE_MD           = 17,
+         PED_DEVICE_LOOP         = 18,
+         PED_DEVICE_NVME         = 19,
+-        PED_DEVICE_RAM          = 20
++        PED_DEVICE_RAM          = 20,
++        PED_DEVICE_PMEM         = 21
+ } PedDeviceType;
+ 
+ typedef struct _PedDevice PedDevice;
+diff --git a/libparted/arch/linux.c b/libparted/arch/linux.c
+index b76000e..1c26b8c 100644
+--- a/libparted/arch/linux.c
++++ b/libparted/arch/linux.c
+@@ -704,6 +704,8 @@ _device_probe_type (PedDevice* dev)
+                 dev->type = PED_DEVICE_NVME;
+         } else if (dev_major == RAM_MAJOR) {
+                 dev->type = PED_DEVICE_RAM;
++        } else if (_is_blkext_major(dev_major) && dev->path && strstr(dev->path, "pmem")) {
++                dev->type = PED_DEVICE_PMEM;
+         } else {
+                 dev->type = PED_DEVICE_UNKNOWN;
+         }
+@@ -1487,6 +1489,11 @@ linux_new (const char* path)
+                         goto error_free_arch_specific;
+                 break;
+ 
++        case PED_DEVICE_PMEM:
++                if (!init_generic (dev, _("NVDIMM Device")))
++                        goto error_free_arch_specific;
++                break;
++
+         case PED_DEVICE_ATARAID:
+                 if (!init_generic (dev, _("ATARAID Controller")))
+                         goto error_free_arch_specific;
+diff --git a/parted/parted.c b/parted/parted.c
+index d2e1f24..b49e1df 100644
+--- a/parted/parted.c
++++ b/parted/parted.c
+@@ -986,7 +986,8 @@ _print_disk_info (const PedDevice *dev, const PedDisk *diskp)
+                                          "cpqarray", "file", "ataraid", "i2o",
+                                          "ubd", "dasd", "viodasd", "sx8", "dm",
+                                          "xvd", "sd/mmc", "virtblk", "aoe",
+-                                         "md", "loopback", "nvme", "brd"};
++                                         "md", "loopback", "nvme", "brd",
++                                         "pmem"};
+ 
+         char* start = ped_unit_format (dev, 0);
+         PedUnit default_unit = ped_unit_get_default ();
+-- 
+2.13.6
+
diff --git a/0082-linux-Include-sys-sysmacros.h-for-major-macro.patch b/0082-linux-Include-sys-sysmacros.h-for-major-macro.patch
new file mode 100644
index 0000000..ee09cb5
--- /dev/null
+++ b/0082-linux-Include-sys-sysmacros.h-for-major-macro.patch
@@ -0,0 +1,25 @@
+From ba5e0451b51c983e40afd123b6e0d3eddb55e610 Mon Sep 17 00:00:00 2001
+From: "Richard W.M. Jones" <rjones at redhat.com>
+Date: Sat, 24 Mar 2018 17:37:02 +0000
+Subject: [PATCH 82/92] linux: Include <sys/sysmacros.h> for major() macro.
+
+Since glibc 2.27 this header is required.
+---
+ libparted/arch/linux.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/libparted/arch/linux.c b/libparted/arch/linux.c
+index 31b98ab..7e86b51 100644
+--- a/libparted/arch/linux.c
++++ b/libparted/arch/linux.c
+@@ -41,6 +41,7 @@
+ #include <sys/utsname.h>        /* for uname() */
+ #include <scsi/scsi.h>
+ #include <assert.h>
++#include <sys/sysmacros.h>
+ #ifdef ENABLE_DEVICE_MAPPER
+ #include <libdevmapper.h>
+ #endif
+-- 
+2.17.1
+
diff --git a/0083-Fix-make-check.patch b/0083-Fix-make-check.patch
new file mode 100644
index 0000000..191bbdc
--- /dev/null
+++ b/0083-Fix-make-check.patch
@@ -0,0 +1,63 @@
+From d91acc645ad1204ded41cfecad337bf9c48952f6 Mon Sep 17 00:00:00 2001
+From: Phillip Susi <psusi at ubuntu.com>
+Date: Fri, 4 May 2018 10:12:05 -0400
+Subject: [PATCH 83/92] Fix make check
+
+Make check failed due to some warnings treated as errors.  One was
+caused by a warning that a function could have the noreturn attribute.
+It seems that this had previously been disabled but gcc has changed
+the flag from -Wmissing-noreturn to -Wsuggest-attribute=noreturn.  The
+recently added volser.c test also caused a few warnings when not
+compiled on s390x because most of the functions were no used, so #if
+those out as well.
+---
+ configure.ac             | 2 +-
+ libparted/tests/volser.c | 5 ++++-
+ 2 files changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 738c697..056478f 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -226,7 +226,7 @@ if test "$gl_gcc_warnings" = yes; then
+   nw="$nw -Wpacked"
+   nw="$nw -Wmissing-prototypes"
+   nw="$nw -Wmissing-declarations"
+-  nw="$nw -Wmissing-noreturn"
++  nw="$nw -Wsuggest-attribute=noreturn"
+   # things I might fix soon:
+   nw="$nw -Wfloat-equal"            # sort.c, seq.c
+   nw="$nw -Wmissing-format-attribute" # copy.c
+diff --git a/libparted/tests/volser.c b/libparted/tests/volser.c
+index 9063821..c6efa5f 100644
+--- a/libparted/tests/volser.c
++++ b/libparted/tests/volser.c
+@@ -14,6 +14,8 @@
+ #include "common.h"
+ #include "progname.h"
+ 
++#if defined __s390__ || defined __s390x__
++
+ /* set dasd first */
+ static char vol_devno[7] = {0};
+ static char *tmp_disk;
+@@ -75,7 +77,6 @@ END_TEST
+ 
+ START_TEST (test_check_volser)
+ {
+-        char vol[7] = {0};
+         char vol_long[] = "abcdefg";
+         char vol_short[] = "ab_c   ";
+         char vol_null[] = "      ";
+@@ -135,6 +136,8 @@ START_TEST (test_reuse_vtoc)
+ }
+ END_TEST
+ 
++#endif
++
+ int main (int argc, char **argv)
+ {
+ 
+-- 
+2.17.1
+
diff --git a/0084-tests-fix-t6100-mdraid-partitions.patch b/0084-tests-fix-t6100-mdraid-partitions.patch
new file mode 100644
index 0000000..55701c6
--- /dev/null
+++ b/0084-tests-fix-t6100-mdraid-partitions.patch
@@ -0,0 +1,26 @@
+From ddb9cce8a2ec87cdd9853bdca25c852c7aee8bdf Mon Sep 17 00:00:00 2001
+From: Phillip Susi <psusi at ubuntu.com>
+Date: Fri, 4 May 2018 10:35:42 -0400
+Subject: [PATCH 84/92] tests: fix t6100-mdraid-partitions
+
+The test was failing because it didn't wait for the md device
+to appear after creating it.
+---
+ tests/t6100-mdraid-partitions.sh | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/tests/t6100-mdraid-partitions.sh b/tests/t6100-mdraid-partitions.sh
+index dbb1686..b37cddf 100755
+--- a/tests/t6100-mdraid-partitions.sh
++++ b/tests/t6100-mdraid-partitions.sh
+@@ -47,6 +47,7 @@ cleanup_fn_() {
+ 
+ # create mdraid on top of both partitions
+ mdadm -C $md_dev --force -R -l1 -n2 "${scsi_dev}1" "${scsi_dev}2"
++wait_for_dev_to_appear_ ${md_dev} || { fail=1; cat /proc/partitions; }
+ 
+ # create gpt and two partitions on the raid device
+ parted -s $md_dev mklabel gpt \
+-- 
+2.17.1
+
diff --git a/0085-Fix-set-and-disk_set-to-not-crash-when-no-flags-are-.patch b/0085-Fix-set-and-disk_set-to-not-crash-when-no-flags-are-.patch
new file mode 100644
index 0000000..49a9017
--- /dev/null
+++ b/0085-Fix-set-and-disk_set-to-not-crash-when-no-flags-are-.patch
@@ -0,0 +1,77 @@
+From 9e196cc2902255c328a90584e44666b79e4344c3 Mon Sep 17 00:00:00 2001
+From: Phillip Susi <psusi at ubuntu.com>
+Date: Thu, 10 May 2018 12:31:36 -0400
+Subject: [PATCH 85/92] Fix set and disk_set to not crash when no flags are
+ supported
+
+Loop labels and file images support no flags.  set and disk_set
+would prompt for a flag and accept any string since the list of
+flags was empty, then fail to look up an actual flag value, then
+throw an exception with a null string for the name of the flag,
+which would bug.
+---
+ parted/ui.c          | 18 ++++++++++++++++--
+ tests/t3310-flags.sh | 13 +++++++++++++
+ 3 files changed, 31 insertions(+), 2 deletions(-)
+
+diff --git a/parted/ui.c b/parted/ui.c
+index 752860b..4f42b7c 100644
+--- a/parted/ui.c
++++ b/parted/ui.c
+@@ -1132,7 +1132,14 @@ command_line_get_disk_flag (const char*
+                         opts = str_list_append_unique (opts, _(walk_name));
+                 }
+         }
+-
++        if (opts == NULL)
++        {
++                ped_exception_throw (PED_EXCEPTION_ERROR,
++                                     PED_EXCEPTION_OK,
++                                     _("No flags supported"));
++        
++                return 0;
++        }
+         flag_name = command_line_get_word (prompt, NULL, opts, 1);
+         str_list_destroy (opts);
+ 
+@@ -1161,7 +1168,14 @@ command_line_get_part_flag (const char*
+                         opts = str_list_append_unique (opts, _(walk_name));
+                 }
+         }
+-
++        if (opts == NULL)
++        {
++                ped_exception_throw (PED_EXCEPTION_ERROR,
++                                     PED_EXCEPTION_OK,
++                                     _("No flags supported"));
++        
++                return 0;
++        }
+         flag_name = command_line_get_word (prompt, NULL, opts, 1);
+         str_list_destroy (opts);
+ 
+diff --git a/tests/t3310-flags.sh b/tests/t3310-flags.sh
+index 2da72d0..0997748 100644
+--- a/tests/t3310-flags.sh
++++ b/tests/t3310-flags.sh
+@@ -114,4 +114,17 @@ for table_type in aix amiga atari bsd dvh gpt mac msdos pc98 sun loop; do
+   done
+ done
+ 
++# loop filesystems support no flags.  Make sure this doesn't crash
++
++if [ $ss == 512 ]; then
++   # only test on 512 byte ss since mke2fs assumes this on a file
++   truncate -s 5m img || framework_failure
++   mke2fs img || framework_failure
++   echo Error: No flags supported > out.exp
++   parted -s img set 1 foo on > out 2>&1
++   compare out.exp out || fail=1
++   parted -s img disk_set foo on > out 2>&1
++   compare out.exp out || fail=1
++fi
++
+ Exit $fail
+-- 
+2.17.1
+
diff --git a/0086-mkpart-Allow-negative-start-value-when-FS-TYPE-is-no.patch b/0086-mkpart-Allow-negative-start-value-when-FS-TYPE-is-no.patch
new file mode 100644
index 0000000..a42a080
--- /dev/null
+++ b/0086-mkpart-Allow-negative-start-value-when-FS-TYPE-is-no.patch
@@ -0,0 +1,122 @@
+From f3b4015e216a3733082e71ff930526f3e8bf0c26 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Niklas=20Hamb=C3=BCchen?= <mail at nh2.me>
+Date: Fri, 11 May 2018 21:09:05 +0200
+Subject: [PATCH 86/92] mkpart: Allow negative start value when FS-TYPE is not
+ given
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+The manual had long documented that negative values are
+allowed for both start and end values, but until now negative
+start values were rejected if FS-TYPE was not given.
+
+Example:
+
+  # parted --script -a optimal /dev/loop0 -- mklabel gpt mkpart primary ext4 -5MiB 100%
+  (succeeds)
+
+  # parted --script -a optimal /dev/loop0 -- mklabel gpt mkpart primary -5MiB 100%
+  parted: invalid token: -5MiB
+  Error: Expecting a file system type.
+
+This commit fixes the latter error.
+The issue was an insufficient lookahead in command line parsing,
+looking only for digits when skipping over FS-TYPE.
+The fix is including the minus '-' in the lookahead.
+
+Originally reported as Debian bug #880035:
+
+  "parted: fails to use negative start value for 'mkpart' command without specyfying FS-TYPE"
+  https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=880035
+
+Signed-off-by: Niklas Hambüchen <mail at nh2.me>
+---
+ parted/parted.c                      |  2 +-
+ tests/Makefile.am                    |  1 +
+ tests/t0213-mkpart-start-negative.sh | 48 ++++++++++++++++++++++++++++
+ 4 files changed, 52 insertions(+), 1 deletion(-)
+ create mode 100755 tests/t0213-mkpart-start-negative.sh
+
+diff --git a/parted/parted.c b/parted/parted.c
+index b5e3b97..88f32b9 100644
+--- a/parted/parted.c
++++ b/parted/parted.c
+@@ -682,7 +682,7 @@ do_mkpart (PedDevice** dev, PedDisk** diskp)
+ 
+         peek_word = command_line_peek_word ();
+         if (part_type == PED_PARTITION_EXTENDED
+-            || (peek_word && isdigit (peek_word[0]))) {
++            || (peek_word && (isdigit (peek_word[0]) || peek_word[0] == '-'))) {
+                 fs_type = NULL;
+         } else {
+                 if (!command_line_get_fs_type (_("File system type?"),
+diff --git a/tests/Makefile.am b/tests/Makefile.am
+index a840304..3851983 100644
+--- a/tests/Makefile.am
++++ b/tests/Makefile.am
+@@ -25,6 +25,7 @@ TESTS = \
+   t0210-gpt-resized-partition-entry-array.sh \
+   t0211-gpt-rewrite-header.sh \
+   t0212-gpt-many-partitions.sh \
++  t0213-mkpart-start-negative.sh \
+   t0220-gpt-msftres.sh \
+   t0250-gpt.sh \
+   t0251-gpt-unicode.sh \
+diff --git a/tests/t0213-mkpart-start-negative.sh b/tests/t0213-mkpart-start-negative.sh
+new file mode 100755
+index 0000000..182ef0c
+--- /dev/null
++++ b/tests/t0213-mkpart-start-negative.sh
+@@ -0,0 +1,48 @@
++#!/bin/sh
++# Make sure parted mkpart ends the partition one sector before the specified
++# value if end is specified with IEC units.
++
++# Copyright (C) 2011-2018 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 3 of the License, or
++# (at your option) any later version.
++
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++# GNU General Public License for more details.
++
++# You should have received a copy of the GNU General Public License
++# along with this program.  If not, see <http://www.gnu.org/licenses/>.
++
++. "${srcdir=.}/init.sh"; path_prepend_ ../parted
++
++require_512_byte_sector_size_
++n_mbs=8
++dev=dev-file
++
++dd if=/dev/null of=$dev bs=1M seek=$n_mbs || fail=1
++# start negative, end positive
++parted --align=none -s $dev -- mklabel gpt mkpart p1 -7MiB 2MiB > err 2>&1 || fail=1
++compare /dev/null err || fail=1  # expect no output
++
++# start negative, end negative
++parted --align=none -s $dev -- mkpart p2 -6MiB -5MiB > err 2>&1 || fail=1
++compare /dev/null err || fail=1  # expect no output
++
++# check boundaries of the partitions
++parted -m -s $dev u s p > out || fail=1
++
++# prepare expected output
++cat <<EOF > exp || framework_failure
++1:2048s:4095s:2048s::p1:;
++2:4096s:6143s:2048s::p2:;
++EOF
++
++# compare expected and actual outputs
++sed -e "1,2d" out > k; mv k out
++compare exp out || fail=1
++
++Exit $fail
+-- 
+2.17.1
+
diff --git a/0087-Fix-resizepart-iec-unit-end-sector.patch b/0087-Fix-resizepart-iec-unit-end-sector.patch
new file mode 100644
index 0000000..04fc662
--- /dev/null
+++ b/0087-Fix-resizepart-iec-unit-end-sector.patch
@@ -0,0 +1,32 @@
+From 247e3fc6cd8bca79b7c0362886ae9b5b06ba6f8c Mon Sep 17 00:00:00 2001
+From: Phillip Susi <psusi at ubuntu.com>
+Date: Thu, 12 May 2016 21:38:51 -0400
+Subject: [PATCH 87/92] Fix resizepart iec unit end sector
+
+Fix resizepart to adjust the end to be -1 sector when using iec
+power of 2 units so that the next partition can start immediately
+following the new end, just like mkpart does.
+---
+ parted/parted.c | 5 ++++-
+ 2 files changed, 8 insertions(+), 1 deletion(-)
+
+diff --git a/parted/parted.c b/parted/parted.c
+index 88f32b9..267c346 100644
+--- a/parted/parted.c
++++ b/parted/parted.c
+@@ -1567,8 +1567,11 @@ do_resizepart (PedDevice** dev, PedDisk** diskp)
+ 
+         start = part->geom.start;
+         end = oldend = part->geom.end;
+-        if (!command_line_get_sector (_("End?"), *dev, &end, &range_end, NULL))
++        char *end_input;
++        if (!command_line_get_sector (_("End?"), *dev, &end, &range_end, &end_input))
+                 goto error;
++        _adjust_end_if_iec(&start, &end, range_end, end_input);
++        free(end_input);
+         /* Do not move start of the partition */
+         constraint = constraint_from_start_end_fixed_start (*dev, start, range_end);
+         if (!ped_disk_set_partition_geom (disk, part, constraint,
+-- 
+2.17.1
+
diff --git a/0088-build-Remove-unused-traces-of-dynamic-loading.patch b/0088-build-Remove-unused-traces-of-dynamic-loading.patch
new file mode 100644
index 0000000..3629bd8
--- /dev/null
+++ b/0088-build-Remove-unused-traces-of-dynamic-loading.patch
@@ -0,0 +1,238 @@
+From b49388018931cab220b9dd50f3a2bd51401e48af Mon Sep 17 00:00:00 2001
+From: Colin Watson <cjwatson at ubuntu.com>
+Date: Mon, 21 Sep 2015 12:10:02 +0100
+Subject: [PATCH 88/92] build: Remove unused traces of dynamic loading
+
+Now that file system operations have been removed from libparted,
+libreiserfs is no longer used.  Remove references to it, along with the
+dynamic loading build infrastructure which was only used for
+libreiserfs.
+
+Signed-off-by: Colin Watson <cjwatson at ubuntu.com>
+---
+ README                           |  9 ++----
+ configure.ac                     | 49 --------------------------------
+ doc/parted.texi                  | 15 ----------
+ libparted/Makefile.am            |  1 -
+ libparted/fs/reiserfs/reiserfs.c | 16 +----------
+ libparted/tests/Makefile.am      |  1 -
+ libparted/tests/t2100-zerolen.sh |  3 --
+ parted.spec.in                   |  3 +-
+ 8 files changed, 4 insertions(+), 93 deletions(-)
+
+diff --git a/README b/README
+index 3d1fee9..de91d4c 100644
+--- a/README
++++ b/README
+@@ -56,10 +56,5 @@ dangerous bugs before they would have done damage, so we think it's worth
+ it.  Also, it means we get more bug reports ;)
+ 
+ 
+-(2) When doing dependencies, remember that libreiserfs is a *soft* dependency,
+-so I guess that means Debian-look-alikes should do a "suggests", but
+-not a "requires".
+-
+-
+-(3) When space is important, we suggest --without-readline, --disable-shared,
+-and possibly --disable-nls and --disable-dynamic-loading.
++(2) When space is important, we suggest --without-readline, --disable-shared,
++and possibly --disable-nls.
+diff --git a/configure.ac b/configure.ac
+index 056478f..8413e06 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -103,20 +103,6 @@ if test "$enable_discover_only" = yes; then
+ fi
+ 
+ PARTED_LIBS=""
+-AC_ARG_ENABLE([dynamic-loading],
+-[  --enable-dynamic-loading  support dynamic fs libraries [default=yes]], ,
+-	if test "$enable_discover_only" = yes; then
+-		enable_dynamic_loading=no
+-	else
+-		enable_dynamic_loading=yes
+-	fi
+-)
+-if test "$enable_discover_only" = yes \
+- && test "$enable_dynamic_loading" = yes; then
+-	AC_MSG_ERROR(
+-[You can't use --enable-dynamic-loading and --disable-discover-only together]
+-	)
+-fi
+ 
+ AC_ARG_ENABLE([debug],
+ 	[  --enable-debug          compile in assertions [default=yes]], ,
+@@ -303,23 +289,6 @@ Or install gettext.  GNU gettext is available from
+ ])
+ fi
+ 
+-dnl Check for libdl, if we are doing dynamic loading
+-DL_LIBS=""
+-AC_SUBST([DYNAMIC_LOADING])
+-DYNAMIC_LOADING=no
+-if test "$enable_dynamic_loading" = yes; then
+-	AC_CHECK_LIB([dl], [dlopen],
+-		DL_LIBS="-ldl"
+-		PARTED_LIBS="$PARTED_LIBS -ldl"
+-		DYNAMIC_LOADING=yes
+-		AC_DEFINE([DYNAMIC_LOADING], [1], [Lazy linking to fs libs]),
+-		AC_MSG_ERROR(
+-			[-ldl not found!  Try using --disable-dynamic-loading]
+-		)
+-	)
+-fi
+-AC_SUBST([DL_LIBS])
+-
+ dnl Check for libuuid
+ UUID_LIBS=""
+ AC_CHECK_LIB([uuid], [uuid_generate], [UUID_LIBS="-luuid"],
+@@ -357,24 +326,6 @@ if test "$enable_selinux" = yes; then
+ fi
+ AC_SUBST([SELINUX_LIBS])
+ 
+-dnl Check for libreiserfs
+-REISER_LIBS=""
+-if test "$enable_dynamic_loading" = no && test "$enable_discover_only" = no; then
+-	OLD_LIBS="$LIBS"
+-	AC_CHECK_LIB([dal], [dal_equals],
+-		LIBS="-ldal"
+-		AC_CHECK_LIB([reiserfs], [reiserfs_fs_probe],
+-			REISER_LIBS="-ldal -lreiserfs"
+-			AC_DEFINE([HAVE_LIBREISERFS], [1], [Have libreiserfs])
+-		)
+-		AC_CHECK_LIB([reiserfs], [reiserfs_fs_check],
+-			AC_DEFINE([HAVE_REISERFS_FS_CHECK], [1], [Have reiserfs_fs_check()])
+-		)
+-	)
+-	LIBS="$OLD_LIBS"
+-fi
+-AC_SUBST([REISER_LIBS])
+-
+ dnl Check for termcap
+ if test "$with_readline" = yes; then
+ 	OLD_LIBS="$LIBS"
+diff --git a/doc/parted.texi b/doc/parted.texi
+index ac23ef6..c08cdc7 100644
+--- a/doc/parted.texi
++++ b/doc/parted.texi
+@@ -178,13 +178,6 @@ internationalisation support is desired.
+ 
+ 	@uref{ftp://ftp.gnu.org/gnu/gettext}
+ 
+- at item libreiserfs, if you want reiserfs support:
+-
+-	@uref{http://reiserfs.osdn.org.ua}
+-
+-Note that parted will automatically detect libreiserfs at runtime, and enable
+-reiserfs support.  libreiserfs is new, and hasn't been widely tested yet.
+-
+ @end itemize
+ 
+ @node Supported Platforms
+@@ -242,14 +235,6 @@ etc., where few libraries are available.
+ @item --disable-debug
+ don't include assertions
+ 
+- at item --disable-dynamic-loading
+-disables dynamic loading of some libraries (only libreiserfs for now,
+-although we hope to expand this).  Dynamic loading is useful because it
+-allows you to reuse libparted shared libraries even when you don't know
+-if some libraries will be available.  It has a small overhead (mainly
+-linking with libdl), so it may be useful to disable it on bootdisks if
+-you don't need the flexibility.
+-
+ @item --disable-nls
+ turns off native language support.  This is useful for use with old
+ versions of glibc, or a trimmed down version of glibc suitable for
+diff --git a/libparted/Makefile.am b/libparted/Makefile.am
+index cb58648..e4a8049 100644
+--- a/libparted/Makefile.am
++++ b/libparted/Makefile.am
+@@ -54,7 +54,6 @@ libparted_la_LIBADD =	\
+   labels/liblabels.la	\
+   $(top_builddir)/lib/libgnulib.la \
+   $(OS_LIBS)		\
+-  $(DL_LIBS)		\
+   $(DM_LIBS)		\
+   $(SELINUX_LIBS)	\
+   $(LIB_BLKID)		\
+diff --git a/libparted/fs/reiserfs/reiserfs.c b/libparted/fs/reiserfs/reiserfs.c
+index 2efcdf3..ef809cd 100644
+--- a/libparted/fs/reiserfs/reiserfs.c
++++ b/libparted/fs/reiserfs/reiserfs.c
+@@ -1,5 +1,5 @@
+ /*
+-    reiserfs.c -- libparted / libreiserfs glue
++    reiserfs.c -- ReiserFS detection
+     Copyright (C) 2001-2002, 2007, 2009-2014 Free Software Foundation, Inc.
+ 
+     This program is free software; you can redistribute it and/or modify
+@@ -14,17 +14,6 @@
+ 
+     You should have received a copy of the GNU General Public License
+     along with this program.  If not, see <http://www.gnu.org/licenses/>.
+-
+-    This is all rather complicated.  There are a few combinations:
+-	* shared libraries full support
+-	* dynamic libraries present full support (via dlopen)
+-	* dynamic libraries absent (full support disabled) (via dlopen)
+-	* discover only
+-
+-    We'd love to hear comments...
+-
+-    So far, we've opted for maximum flexibility for the user.  Is it
+-    all worth it?
+ */
+ 
+ #include <config.h>
+@@ -49,9 +38,6 @@
+ static PedSector reiserfs_super_offset[] = { 128, 16, -1 };
+ static PedFileSystemType* reiserfs_type;
+ 
+-#define FPTR
+-#define FCLASS extern
+-
+ static PedGeometry *reiserfs_probe(PedGeometry *geom)
+ {
+ 	int i;
+diff --git a/libparted/tests/Makefile.am b/libparted/tests/Makefile.am
+index 9689fb3..7954e91 100644
+--- a/libparted/tests/Makefile.am
++++ b/libparted/tests/Makefile.am
+@@ -35,5 +35,4 @@ $(TEST_LOGS): prereq
+ TESTS_ENVIRONMENT = \
+   top_srcdir='$(top_srcdir)' \
+   abs_top_srcdir='$(abs_top_srcdir)' \
+-  DYNAMIC_LOADING=$(DYNAMIC_LOADING) \
+   ENABLE_DEVICE_MAPPER=$(ENABLE_DEVICE_MAPPER)
+diff --git a/libparted/tests/t2100-zerolen.sh b/libparted/tests/t2100-zerolen.sh
+index ecd579c..e0e521e 100755
+--- a/libparted/tests/t2100-zerolen.sh
++++ b/libparted/tests/t2100-zerolen.sh
+@@ -28,9 +28,6 @@ init_root_dir_
+ test "$(uname -s)" = Linux \
+   || skip_ "not on Linux"
+ 
+-test "x$DYNAMIC_LOADING" = xyes \
+-  || skip_ "no dynamic loading support"
+-
+ test "x$ENABLE_DEVICE_MAPPER" = xyes \
+   || skip_ "no device-mapper support"
+ 
+diff --git a/parted.spec.in b/parted.spec.in
+index cd5a99a..bdbe218 100644
+--- a/parted.spec.in
++++ b/parted.spec.in
+@@ -60,8 +60,7 @@ Parted library, you need to install this package.
+ %endif
+    --enable-part-static \
+    --enable-pc98=no \
+-   --enable-Werror=no \
+-   --disable-dynamic-loading
++   --enable-Werror=no
+ %{__make} %{?_smp_mflags}
+ 
+ %install
+-- 
+2.17.1
+
diff --git a/0089-Lift-512-byte-restriction-on-fat-resize.patch b/0089-Lift-512-byte-restriction-on-fat-resize.patch
new file mode 100644
index 0000000..391a9db
--- /dev/null
+++ b/0089-Lift-512-byte-restriction-on-fat-resize.patch
@@ -0,0 +1,52 @@
+From 4347ddb8e2dd01674c759e94eaaf5872915a2e48 Mon Sep 17 00:00:00 2001
+From: Phillip Susi <psusi at ubuntu.com>
+Date: Fri, 4 May 2018 10:57:56 -0400
+Subject: [PATCH 89/92] Lift 512 byte restriction on fat resize
+
+As Colin Watson pointed out way back in 2014, when I removed the
+512 byte sector size restriction from the fs recognition code,
+I missed the same from the fat resize code.
+---
+ NEWS                            |  2 ++
+ libparted/fs/r/fat/bootsector.c | 12 ------------
+ 2 files changed, 2 insertions(+), 12 deletions(-)
+
+diff --git a/NEWS b/NEWS
+index 83352a6..552e319 100644
+--- a/NEWS
++++ b/NEWS
+@@ -45,6 +45,8 @@ GNU parted NEWS                                    -*- outline -*-
+ 
+ ** New Features
+ 
++  libparted-fs-resize: Work on non 512 byte sectors.
++
+   Add resizepart command to resize a partition.  This works even on
+   mounted partitions.
+ 
+diff --git a/libparted/fs/r/fat/bootsector.c b/libparted/fs/r/fat/bootsector.c
+index 99d788d..3e34e13 100644
+--- a/libparted/fs/r/fat/bootsector.c
++++ b/libparted/fs/r/fat/bootsector.c
+@@ -125,18 +125,6 @@ fat_boot_sector_analyse (FatBootSector* bs, PedFileSystem* fs)
+ 
+ 	PED_ASSERT (bs != NULL);
+ 
+-	if (PED_LE16_TO_CPU (bs->sector_size) != 512) {
+-		if (ped_exception_throw (
+-			PED_EXCEPTION_BUG,
+-			PED_EXCEPTION_IGNORE_CANCEL,
+-			_("This file system has a logical sector size of %d.  "
+-			"GNU Parted is known not to work properly with sector "
+-			"sizes other than 512 bytes."),
+-			(int) PED_LE16_TO_CPU (bs->sector_size))
+-				!= PED_EXCEPTION_IGNORE)
+-			return 0;
+-	}
+-
+ 	fs_info->logical_sector_size = PED_LE16_TO_CPU (bs->sector_size) / 512;
+ 
+ 	fs_info->sectors_per_track = PED_LE16_TO_CPU (bs->secs_track);
+-- 
+2.17.1
+
diff --git a/0090-Fix-atari-label-false-positives.patch b/0090-Fix-atari-label-false-positives.patch
new file mode 100644
index 0000000..054300b
--- /dev/null
+++ b/0090-Fix-atari-label-false-positives.patch
@@ -0,0 +1,41 @@
+From 395f8aabfecb28820006d37ec37e9ffe1d2eb1e3 Mon Sep 17 00:00:00 2001
+From: Phillip Susi <psusi at ubuntu.com>
+Date: Fri, 11 May 2018 11:01:01 -0400
+Subject: [PATCH 90/92] Fix atari label false positives
+
+The atari label gets false positives easily, so probe it after
+all other labels have said no.
+---
+ libparted/libparted.c | 4 ++--
+ 2 files changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/libparted/libparted.c b/libparted/libparted.c
+index d855d0e..3bd071d 100644
+--- a/libparted/libparted.c
++++ b/libparted/libparted.c
+@@ -80,12 +80,13 @@ extern void ped_disk_atari_init ();
+ static void
+ init_disk_types ()
+ {
++	/* Note that probing is done in the reverse order of init */
+ 	ped_disk_loop_init ();	/* must be last in the probe list */
+ 
+ #if defined __s390__ || defined __s390x__
+ 	ped_disk_dasd_init();
+ #endif
+-
++	ped_disk_atari_init (); /* easy false positives, so probe others first */
+ 	ped_disk_sun_init ();
+ #ifdef ENABLE_PC98
+ 	ped_disk_pc98_init ();
+@@ -97,7 +98,6 @@ init_disk_types ()
+ 	ped_disk_bsd_init ();
+ 	ped_disk_amiga_init ();
+ 	ped_disk_aix_init ();
+-	ped_disk_atari_init ();
+ }
+ 
+ extern void ped_file_system_amiga_init (void);
+-- 
+2.17.1
+
diff --git a/0091-Modify-gpt-header-move-and-msdos-overlap-to-work-wit.patch b/0091-Modify-gpt-header-move-and-msdos-overlap-to-work-wit.patch
new file mode 100644
index 0000000..c41e16e
--- /dev/null
+++ b/0091-Modify-gpt-header-move-and-msdos-overlap-to-work-wit.patch
@@ -0,0 +1,87 @@
+From 073c24b5d2361857b8ce8b5dcd81a3e26fc05b96 Mon Sep 17 00:00:00 2001
+From: "Brian C. Lane" <bcl at redhat.com>
+Date: Wed, 27 Jun 2018 13:45:09 -0700
+Subject: [PATCH 91/92] Modify gpt-header-move and msdos-overlap to work with
+ py2 or py3
+
+Distributions are starting to remove python2 and only use python3.
+Modify these test scripts so that they will work with either python 2.7
+or python 3.X
+---
+ tests/gpt-header-move | 15 ++++++++-------
+ tests/msdos-overlap   |  5 ++---
+ 2 files changed, 10 insertions(+), 10 deletions(-)
+
+diff --git a/tests/gpt-header-move b/tests/gpt-header-move
+index 05cdc65..3dda5cb 100755
+--- a/tests/gpt-header-move
++++ b/tests/gpt-header-move
+@@ -3,20 +3,21 @@
+ # open img file, subtract 33 from altlba address, and move the last 33 sectors
+ # back by 33 sectors
+ 
+-from struct import *
++from struct import unpack_from, pack_into
+ from zipfile import crc32
+ import array
+ import sys
++
+ file = open(sys.argv[1],'rb+')
+ file.seek(512)
+ gptheader = file.read(512)
+-altlba = unpack_from('<q', gptheader,offset=32)[0]
+-gptheader = array.array('c',gptheader)
++altlba = unpack_from('<q', gptheader, offset=32)[0]
++gptheader = array.array('B', gptheader)
+ pack_into('<Q', gptheader, 32, altlba-33)
+ #zero header crc
+ pack_into('<L', gptheader, 16, 0)
+ #compute new crc
+-newcrc = ((crc32(buffer(gptheader,0,92))) & 0xFFFFFFFF)
++newcrc = ((crc32(gptheader[:92])) & 0xFFFFFFFF)
+ pack_into('<L', gptheader, 16, newcrc)
+ file.seek(512)
+ file.write(gptheader)
+@@ -25,7 +26,7 @@ gptheader = file.read(512)
+ file.seek(512*(altlba-32))
+ backup = file.read(512*32)
+ altlba -= 33
+-gptheader = array.array('c',gptheader)
++gptheader = array.array('B',gptheader)
+ #update mylba
+ pack_into('<Q', gptheader, 24, altlba)
+ #update table lba
+@@ -33,9 +34,9 @@ pack_into('<Q', gptheader, 72, altlba-32)
+ #zero header crc
+ pack_into('<L', gptheader, 16, 0)
+ #compute new crc
+-newcrc = ((crc32(buffer(gptheader,0,92))) & 0xFFFFFFFF)
++newcrc = ((crc32(gptheader[:92])) & 0xFFFFFFFF)
+ pack_into('<L', gptheader, 16, newcrc)
+ file.seek(512*(altlba-32))
+ file.write(backup)
+ file.write(gptheader)
+-file.write("\0" * (512 * 33))
++file.write(b"\0" * (512 * 33))
+diff --git a/tests/msdos-overlap b/tests/msdos-overlap
+index 5bddfb0..d6ae8d6 100755
+--- a/tests/msdos-overlap
++++ b/tests/msdos-overlap
+@@ -14,12 +14,11 @@ BAD_ENTRY = (0x72, 0xf5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ OFFSET = 0x1b8
+ 
+ if len(sys.argv) < 2:
+-    print "%s: <image or device>"
++    print("%s: <image or device>" % sys.argv[0])
+     sys.exit(1)
+ 
+-data = "".join(chr(c) for c in BAD_ENTRY)
+ with open(sys.argv[1], "rb+") as f:
+     f.seek(OFFSET, 0)
+-    f.write(data)
++    f.write(bytes(bytearray(BAD_ENTRY)))
+ 
+ sys.exit(0)
+-- 
+2.17.1
+
diff --git a/0092-Switch-gpt-header-move-and-msdos-overlap-to-python3.patch b/0092-Switch-gpt-header-move-and-msdos-overlap-to-python3.patch
new file mode 100644
index 0000000..1c7dff3
--- /dev/null
+++ b/0092-Switch-gpt-header-move-and-msdos-overlap-to-python3.patch
@@ -0,0 +1,33 @@
+From 38badae4d6b858da713b383b9bc7bdad6294ca1b Mon Sep 17 00:00:00 2001
+From: "Brian C. Lane" <bcl at redhat.com>
+Date: Wed, 27 Jun 2018 13:47:33 -0700
+Subject: [PATCH 92/92] Switch gpt-header-move and msdos-overlap to python3
+
+---
+ tests/gpt-header-move | 2 +-
+ tests/msdos-overlap   | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/tests/gpt-header-move b/tests/gpt-header-move
+index 3dda5cb..18f58d0 100755
+--- a/tests/gpt-header-move
++++ b/tests/gpt-header-move
+@@ -1,4 +1,4 @@
+-#!/usr/bin/python
++#!/usr/bin/python3
+ 
+ # open img file, subtract 33 from altlba address, and move the last 33 sectors
+ # back by 33 sectors
+diff --git a/tests/msdos-overlap b/tests/msdos-overlap
+index d6ae8d6..b2b03e6 100755
+--- a/tests/msdos-overlap
++++ b/tests/msdos-overlap
+@@ -1,4 +1,4 @@
+-#!/usr/bin/python
++#!/usr/bin/python3
+ """
+     Write an overlapping partition to a msdos disk
+ 
+-- 
+2.17.1
+
diff --git a/0093-libparted-Fix-ending-CHS-address-in-PMBR.patch b/0093-libparted-Fix-ending-CHS-address-in-PMBR.patch
new file mode 100644
index 0000000..3768872
--- /dev/null
+++ b/0093-libparted-Fix-ending-CHS-address-in-PMBR.patch
@@ -0,0 +1,29 @@
+From 93684aeb12cf96e5bfefa405940c3010f60161b1 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Ulrich=20M=C3=BCller?= <ulm at gentoo.org>
+Date: Sat, 14 Jul 2018 09:09:31 +0200
+Subject: [PATCH] libparted: Fix ending CHS address in PMBR.
+
+According to the UEFI specification version 2.7, Section 5.2.3,
+Table 16, the ending CHS address in the protective MBR should be set
+to 0xFFFFFF. This also agrees with the behaviour of fdisk from
+util-linux-2.32.
+---
+ libparted/labels/gpt.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/libparted/labels/gpt.c b/libparted/labels/gpt.c
+index 4f922b2..6f92a34 100644
+--- a/libparted/labels/gpt.c
++++ b/libparted/labels/gpt.c
+@@ -1144,7 +1144,7 @@ _write_pmbr (PedDevice *dev, bool pmbr_boot)
+   pmbr->Signature = PED_CPU_TO_LE16 (MSDOS_MBR_SIGNATURE);
+   pmbr->PartitionRecord[0].OSType = EFI_PMBR_OSTYPE_EFI;
+   pmbr->PartitionRecord[0].StartSector = 2;
+-  pmbr->PartitionRecord[0].EndHead = 0xFE;
++  pmbr->PartitionRecord[0].EndHead = 0xFF;
+   pmbr->PartitionRecord[0].EndSector = 0xFF;
+   pmbr->PartitionRecord[0].EndTrack = 0xFF;
+   pmbr->PartitionRecord[0].StartingLBA = PED_CPU_TO_LE32 (1);
+-- 
+2.17.2
+
diff --git a/0094-Fix-the-length-of-several-strncpy-calls.patch b/0094-Fix-the-length-of-several-strncpy-calls.patch
new file mode 100644
index 0000000..a7b03e6
--- /dev/null
+++ b/0094-Fix-the-length-of-several-strncpy-calls.patch
@@ -0,0 +1,76 @@
+From 60906f5674ca32ddfaf8c18fe2e4ebe510dbbd6f Mon Sep 17 00:00:00 2001
+From: "Brian C. Lane" <bcl at redhat.com>
+Date: Mon, 23 Jul 2018 14:34:30 -0700
+Subject: [PATCH 094/103] Fix the length of several strncpy calls
+
+These need to be 1 less than the allocated size of the buffer, strncpy
+will fill shorter strings with zeros, but there needs to be room for at
+least one 0x00 at the end if the string is the same length as the buffer
+and has no terminating 0x00.
+
+Related: rhbz#1602652
+---
+ libparted/arch/linux.c | 12 ++++++++----
+ libparted/labels/mac.c |  9 ++++++---
+ 2 files changed, 14 insertions(+), 7 deletions(-)
+
+diff --git a/libparted/arch/linux.c b/libparted/arch/linux.c
+index 7e86b51..4c778ea 100644
+--- a/libparted/arch/linux.c
++++ b/libparted/arch/linux.c
+@@ -2582,9 +2582,12 @@ _blkpg_add_partition (PedDisk* disk, const PedPartition *part)
+                 linux_part.length = part->geom.length * disk->dev->sector_size;
+         }
+         linux_part.pno = part->num;
+-        strncpy (linux_part.devname, dev_name, BLKPG_DEVNAMELTH);
+-        if (vol_name)
+-                strncpy (linux_part.volname, vol_name, BLKPG_VOLNAMELTH);
++        strncpy (linux_part.devname, dev_name, BLKPG_DEVNAMELTH-1);
++        linux_part.devname[BLKPG_DEVNAMELTH-1] = '\0';
++        if (vol_name) {
++                strncpy (linux_part.volname, vol_name, BLKPG_VOLNAMELTH-1);
++                linux_part.volname[BLKPG_VOLNAMELTH-1] = '\0';
++        }
+ 
+         free (dev_name);
+ 
+@@ -2640,7 +2643,8 @@ static int _blkpg_resize_partition (PedDisk* disk, const PedPartition *part)
+         else
+                 linux_part.length = part->geom.length * disk->dev->sector_size;
+         linux_part.pno = part->num;
+-        strncpy (linux_part.devname, dev_name, BLKPG_DEVNAMELTH);
++        strncpy (linux_part.devname, dev_name, BLKPG_DEVNAMELTH-1);
++        linux_part.devname[BLKPG_DEVNAMELTH-1] = '\0';
+ 
+         free (dev_name);
+ 
+diff --git a/libparted/labels/mac.c b/libparted/labels/mac.c
+index fa4e43f..4942c82 100644
+--- a/libparted/labels/mac.c
++++ b/libparted/labels/mac.c
+@@ -930,8 +930,10 @@ _generate_raw_part (PedDisk* disk, PedPartition* part,
+ 		= PED_CPU_TO_BE32 (mac_disk_data->last_part_entry_num);
+ 	part_map_entry->start_block = PED_CPU_TO_BE32 (part->geom.start);
+ 	part_map_entry->block_count = PED_CPU_TO_BE32 (part->geom.length);
+-	strncpy (part_map_entry->name, mac_part_data->volume_name, 32);
+-	strncpy (part_map_entry->type, mac_part_data->system_name, 32);
++	strncpy (part_map_entry->name, mac_part_data->volume_name, 31);
++	part_map_entry->name[31] = '\0';
++	strncpy (part_map_entry->type, mac_part_data->system_name, 31);
++	part_map_entry->type[31] = '\0';
+ 
+ 	if (mac_part_data->is_driver) {
+ 		if (mac_part_data->has_driver)
+@@ -954,7 +956,8 @@ _generate_raw_part (PedDisk* disk, PedPartition* part,
+ 	part_map_entry->boot_cksum =
+ 		PED_CPU_TO_BE32 (mac_part_data->boot_checksum);
+ 
+-	strncpy (part_map_entry->processor, mac_part_data->processor_name, 16);
++	strncpy (part_map_entry->processor, mac_part_data->processor_name, 15);
++	part_map_entry->processor[15] = '\0';
+ 
+ 	if (!_pad_raw_part (disk, part->num, part_map))
+ 		goto error;
+-- 
+2.17.2
+
diff --git a/0095-parted.c-Always-free-peek_word.patch b/0095-parted.c-Always-free-peek_word.patch
new file mode 100644
index 0000000..d5dbad7
--- /dev/null
+++ b/0095-parted.c-Always-free-peek_word.patch
@@ -0,0 +1,35 @@
+From b260c3354d5e9318321c2fc482724870fd9b2740 Mon Sep 17 00:00:00 2001
+From: "Brian C. Lane" <bcl at redhat.com>
+Date: Mon, 23 Jul 2018 15:12:38 -0700
+Subject: [PATCH 095/103] parted.c: Always free peek_word
+
+If command_line_get_fs_type failed it would never free it, so put a free
+in both branches of the if.
+
+Related: rhbz#1602652
+---
+ parted/parted.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/parted/parted.c b/parted/parted.c
+index 267c346..0dc38c3 100644
+--- a/parted/parted.c
++++ b/parted/parted.c
+@@ -684,12 +684,13 @@ do_mkpart (PedDevice** dev, PedDisk** diskp)
+         if (part_type == PED_PARTITION_EXTENDED
+             || (peek_word && (isdigit (peek_word[0]) || peek_word[0] == '-'))) {
+                 fs_type = NULL;
++                free (peek_word);
+         } else {
++                free (peek_word);
+                 if (!command_line_get_fs_type (_("File system type?"),
+                                                &fs_type))
+                         goto error;
+         }
+-        free (peek_word);
+ 
+         if (!command_line_get_sector (_("Start?"), *dev, &start, &range_start, NULL))
+                 goto error;
+-- 
+2.17.2
+
diff --git a/0096-parted.c-Make-sure-dev_name-is-freed.patch b/0096-parted.c-Make-sure-dev_name-is-freed.patch
new file mode 100644
index 0000000..9040d26
--- /dev/null
+++ b/0096-parted.c-Make-sure-dev_name-is-freed.patch
@@ -0,0 +1,45 @@
+From c624fe22349912ca8bd1a288d5ccc65b6e346420 Mon Sep 17 00:00:00 2001
+From: "Brian C. Lane" <bcl at redhat.com>
+Date: Mon, 23 Jul 2018 15:18:37 -0700
+Subject: [PATCH 096/103] parted.c: Make sure dev_name is freed
+
+If there was a problem with ped_device_get or ped_device_open it would not be freed.
+
+Related: rhbz#1602652
+---
+ parted/parted.c | 10 ++++------
+ 1 file changed, 4 insertions(+), 6 deletions(-)
+
+diff --git a/parted/parted.c b/parted/parted.c
+index 0dc38c3..35432c6 100644
+--- a/parted/parted.c
++++ b/parted/parted.c
+@@ -1101,6 +1101,7 @@ do_print (PedDevice** dev, PedDisk** diskp)
+         if (has_devices_arg) {
+                 char*           dev_name;
+                 PedDevice*      current_dev = NULL;
++                int             status = 0;
+ 
+                 ped_device_probe_all();
+ 
+@@ -1116,14 +1117,11 @@ do_print (PedDevice** dev, PedDisk** diskp)
+                 ped_device_free_all ();
+ 
+                 *dev = ped_device_get (dev_name);
+-                if (!*dev)
+-		        return 0;
+-                if (!ped_device_open (*dev))
+-                        return 0;
+-
++                if (*dev && ped_device_open (*dev))
++                    status = 1;
+                 free (dev_name);
+ 
+-                return 1;
++                return status;
+         }
+ 
+         else if (has_list_arg)
+-- 
+2.17.2
+
diff --git a/0097-t6100-mdraid-partitions-Use-v0.90-metadata-for-the-t.patch b/0097-t6100-mdraid-partitions-Use-v0.90-metadata-for-the-t.patch
new file mode 100644
index 0000000..4b1dddc
--- /dev/null
+++ b/0097-t6100-mdraid-partitions-Use-v0.90-metadata-for-the-t.patch
@@ -0,0 +1,29 @@
+From f0cfa9581f6bd9a1b0d7f0389d3460bcd4ccfde8 Mon Sep 17 00:00:00 2001
+From: "Brian C. Lane" <bcl at redhat.com>
+Date: Mon, 23 Jul 2018 16:07:40 -0700
+Subject: [PATCH 097/103] t6100-mdraid-partitions: Use v0.90 metadata for the
+ test
+
+Newer metadata types use more disk space, causing the test to fail.
+---
+ tests/t6100-mdraid-partitions.sh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/tests/t6100-mdraid-partitions.sh b/tests/t6100-mdraid-partitions.sh
+index b37cddf..42905fa 100755
+--- a/tests/t6100-mdraid-partitions.sh
++++ b/tests/t6100-mdraid-partitions.sh
+@@ -45,8 +45,8 @@ cleanup_fn_() {
+   mdadm -S $md_dev || warn_ "Failed to stop MD array, $md_dev"
+ }
+ 
+-# create mdraid on top of both partitions
+-mdadm -C $md_dev --force -R -l1 -n2 "${scsi_dev}1" "${scsi_dev}2"
++# create mdraid on top of both partitions with v0.90 metadata
++mdadm -C $md_dev -e0 --force -R -l1 -n2 "${scsi_dev}1" "${scsi_dev}2"
+ wait_for_dev_to_appear_ ${md_dev} || { fail=1; cat /proc/partitions; }
+ 
+ # create gpt and two partitions on the raid device
+-- 
+2.17.2
+
diff --git a/0098-Fix-potential-command-line-buffer-overflow.patch b/0098-Fix-potential-command-line-buffer-overflow.patch
new file mode 100644
index 0000000..f038895
--- /dev/null
+++ b/0098-Fix-potential-command-line-buffer-overflow.patch
@@ -0,0 +1,46 @@
+From a52926f6d3cd2520419c60d4f81a410d33d6d970 Mon Sep 17 00:00:00 2001
+From: Simon Xu <xu.simon at oracle.com>
+Date: Mon, 20 Aug 2018 20:31:26 +0800
+Subject: [PATCH 098/103] Fix potential command line buffer overflow
+
+parted terminates with 'stack smashing detected' when fed with a long command
+line argument, and segfaults when the argument is long enough:
+
+root # /sbin/parted /dev/sda $(perl -e 'print "a"x265')
+*** stack smashing detected ***: /sbin/parted terminated
+...
+Aborted
+
+root # /sbin/parted /dev/sda $(perl -e 'print "a"x328')
+*** stack smashing detected ***: /sbin/parted terminated
+...
+Command History:
+Segmentation fault
+
+parted should be able to detect it and exit with error and usage messages.
+This also makes command line buffer overflow exploit more possible.  Fix it by
+adding length check in the condition of the for loop where command line
+arguments are copied.
+
+Signed-off-by: Simon Xu <xu.simon at oracle.com>
+Signed-off-by: Brian C. Lane <bcl at redhat.com>
+---
+ parted/ui.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/parted/ui.c b/parted/ui.c
+index 4f42b7c..d421768 100644
+--- a/parted/ui.c
++++ b/parted/ui.c
+@@ -728,7 +728,7 @@ command_line_push_line (const char* line, int multi_word)
+                         line++;
+ 
+                 i = 0;
+-                for (; *line; line++) {
++                for (; *line && i < sizeof (this_word) - 1; line++) {
+                         if (*line == ' ' && !quoted) {
+                                 if (multi_word)
+                                         break;
+-- 
+2.17.2
+
diff --git a/0099-libparted-Add-support-for-MBR-id-GPT-GUID-and-detect.patch b/0099-libparted-Add-support-for-MBR-id-GPT-GUID-and-detect.patch
new file mode 100644
index 0000000..bc7acb2
--- /dev/null
+++ b/0099-libparted-Add-support-for-MBR-id-GPT-GUID-and-detect.patch
@@ -0,0 +1,379 @@
+From 8740cfcff3ea839dd6dc8650dec0a466e9870625 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Pali=20Roh=C3=A1r?= <pali.rohar at gmail.com>
+Date: Tue, 28 Aug 2018 21:20:01 +0200
+Subject: [PATCH 099/103] libparted: Add support for MBR id, GPT GUID and
+ detection of UDF filesystem
+
+This is needed for libparted based applications (like Gparted) to correctly
+choose MBR id and GPT GUID for UDF filesystem. MBR id for UDF is 0x07 and
+GPT GUID is Microsoft Basic Data, see why: https://serverfault.com/a/829172
+
+Without registering a new libparted fs code it is not possible to assign
+MBR id or GPT GUID.
+
+Detection of UDF filesystem is done by checking presence of UDF VSD (NSR02
+or NSR03 identifier) and UDF AVDP at expected locations (blocks 256, -257,
+-1, 512).
+
+Signed-off-by: Brian C. Lane <bcl at redhat.com>
+---
+ NEWS                                  |   2 +
+ libparted/fs/Makefile.am              |   1 +
+ libparted/fs/udf/udf.c                | 175 ++++++++++++++++++++++++++
+ libparted/labels/dos.c                |   3 +
+ libparted/labels/gpt.c                |   1 +
+ libparted/libparted.c                 |   4 +
+ scripts/data/abi/baseline_symbols.txt |   2 +
+ tests/Makefile.am                     |   1 +
+ tests/t2410-dos-udf-partition-type.sh |  38 ++++++
+ 9 files changed, 227 insertions(+)
+ create mode 100644 libparted/fs/udf/udf.c
+ create mode 100644 tests/t2410-dos-udf-partition-type.sh
+
+diff --git a/NEWS b/NEWS
+index ee6efb6..45ea91c 100644
+--- a/NEWS
++++ b/NEWS
+@@ -47,6 +47,8 @@ GNU parted NEWS                                    -*- outline -*-
+ 
+ ** New Features
+ 
++  Add support for MBR id, GPT GUID and detection of UDF filesystem.
++
+   libparted-fs-resize: Work on non 512 byte sectors.
+ 
+   Add resizepart command to resize a partition.  This works even on
+diff --git a/libparted/fs/Makefile.am b/libparted/fs/Makefile.am
+index d3cc8bc..cab32c7 100644
+--- a/libparted/fs/Makefile.am
++++ b/libparted/fs/Makefile.am
+@@ -44,6 +44,7 @@ libfs_la_SOURCES =		\
+   ntfs/ntfs.c			\
+   reiserfs/reiserfs.c		\
+   reiserfs/reiserfs.h		\
++  udf/udf.c			\
+   ufs/ufs.c			\
+   xfs/platform_defs.h		\
+   xfs/xfs.c			\
+diff --git a/libparted/fs/udf/udf.c b/libparted/fs/udf/udf.c
+new file mode 100644
+index 0000000..00209e1
+--- /dev/null
++++ b/libparted/fs/udf/udf.c
+@@ -0,0 +1,175 @@
++/*
++    libparted - a library for manipulating disk partitions
++    Copyright (C) 2018 Free Software Foundation, Inc.
++
++    This program is free software; you can redistribute it and/or modify
++    it under the terms of the GNU General Public License as published by
++    the Free Software Foundation; either version 3 of the License, or
++    (at your option) any later version.
++
++    This program is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++    GNU General Public License for more details.
++
++    You should have received a copy of the GNU General Public License
++    along with this program.  If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#include <config.h>
++
++#include <parted/parted.h>
++
++/* Read bytes using ped_geometry_read() function */
++static int read_bytes (const PedGeometry* geom, void* buffer, PedSector offset, PedSector count)
++{
++	char* sector_buffer;
++	PedSector sector_offset, sector_count, buffer_offset;
++
++	sector_offset = offset / geom->dev->sector_size;
++	sector_count = (offset + count + geom->dev->sector_size - 1) / geom->dev->sector_size - sector_offset;
++	buffer_offset = offset - sector_offset * geom->dev->sector_size;
++
++	sector_buffer = alloca (sector_count * geom->dev->sector_size);
++
++	if (!ped_geometry_read (geom, sector_buffer, sector_offset, sector_count))
++		return 0;
++
++	memcpy (buffer, sector_buffer + buffer_offset, count);
++	return 1;
++}
++
++/* Scan VSR and check for UDF VSD */
++static int check_vrs (const PedGeometry* geom, unsigned int vsdsize)
++{
++	PedSector block;
++	PedSector offset;
++	unsigned char ident[5];
++
++	/* Check only first 64 blocks, but theoretically standard does not define upper limit */
++	for (block = 0; block < 64; block++) {
++		/* VRS starts at fixed offset 32kB, it is independent of block size or vsd size */
++		offset = 32768 + block * vsdsize;
++
++		/* Read VSD identifier, it is at offset 1 */
++		if (!read_bytes (geom, ident, offset + 1, 5))
++			return 0;
++
++		/* Check for UDF identifier */
++		if (memcmp (ident, "NSR02", 5) == 0 ||
++		    memcmp (ident, "NSR03", 5) == 0)
++			return 1;
++
++		/* Unknown VSD identifier means end of VRS */
++		if (memcmp (ident, "BEA01", 5) != 0 &&
++		         memcmp (ident, "TEA01", 5) != 0 &&
++		         memcmp (ident, "BOOT2", 5) != 0 &&
++		         memcmp (ident, "CD001", 5) != 0 &&
++		         memcmp (ident, "CDW02", 5) != 0)
++			break;
++	}
++
++	return 0;
++}
++
++/* Check for UDF AVDP */
++static int check_anchor (const PedGeometry* geom, unsigned int blocksize, int rel_block)
++{
++	PedSector block;
++	unsigned char tag[16];
++
++	/* Negative block means relative to the end of device */
++	if (rel_block < 0) {
++		block = geom->length * geom->dev->sector_size / blocksize;
++		if (block <= (PedSector)(-rel_block))
++			return 0;
++		block -= (PedSector)(-rel_block);
++		if (block < 257)
++			return 0;
++	} else {
++		block = rel_block;
++	}
++
++	if (!read_bytes (geom, tag, block * blocksize, 16))
++		return 0;
++
++	/* Check for AVDP type (0x0002) */
++	if (((unsigned short)tag[0] | ((unsigned short)tag[1] << 8)) != 0x0002)
++		return 0;
++
++	/* Check that location stored in AVDP matches */
++	if (((unsigned long)tag[12] | ((unsigned long)tag[13] << 8) | ((unsigned long)tag[14] << 16) | ((unsigned long)tag[15] << 24)) != block)
++		return 0;
++
++	return 1;
++}
++
++/* Detect presence of UDF AVDP */
++static int detect_anchor(const PedGeometry* geom, unsigned int blocksize)
++{
++	/* All possible AVDP locations in preferred order */
++	static int anchors[] = { 256, -257, -1, 512 };
++	size_t i;
++
++	for (i = 0; i < sizeof (anchors)/sizeof (*anchors); i++) {
++		if (check_anchor (geom, blocksize, anchors[i]))
++			return 1;
++	}
++
++	return 0;
++}
++
++/* Detect UDF filesystem, it must have VRS and AVDP */
++static int detect_udf (const PedGeometry* geom)
++{
++	unsigned int blocksize;
++
++	/* VSD size is min(2048, UDF block size), check for block sizes <= 2048 */
++	if (check_vrs (geom, 2048)) {
++		for (blocksize = 512; blocksize <= 2048; blocksize *= 2) {
++			if (detect_anchor (geom, blocksize))
++				return 1;
++		}
++	}
++
++	/* Check for block sizes larger then 2048, maximal theoretical block size is 32kB */
++	for (blocksize = 4096; blocksize <= 32768; blocksize *= 2) {
++		if (!check_vrs (geom, blocksize))
++			continue;
++		if (detect_anchor (geom, blocksize))
++			return 1;
++	}
++
++	return 0;
++}
++
++PedGeometry*
++udf_probe (PedGeometry* geom)
++{
++	if (!detect_udf (geom))
++		return NULL;
++
++	return ped_geometry_duplicate (geom);
++}
++
++static PedFileSystemOps udf_ops = {
++	probe:		udf_probe,
++};
++
++static PedFileSystemType udf_type = {
++	next:	NULL,
++	ops:	&udf_ops,
++	name:	"udf",
++};
++
++void
++ped_file_system_udf_init ()
++{
++	ped_file_system_type_register (&udf_type);
++}
++
++void
++ped_file_system_udf_done ()
++{
++	ped_file_system_type_unregister (&udf_type);
++}
+diff --git a/libparted/labels/dos.c b/libparted/labels/dos.c
+index fa53020..b2b8de9 100644
+--- a/libparted/labels/dos.c
++++ b/libparted/labels/dos.c
+@@ -65,6 +65,7 @@ static const char MBR_BOOT_CODE[] = {
+ #define PARTITION_FAT16		0x06
+ #define PARTITION_NTFS		0x07
+ #define PARTITION_HPFS		0x07
++#define PARTITION_UDF		0x07
+ #define PARTITION_FAT32		0x0b
+ #define PARTITION_FAT32_LBA	0x0c
+ #define PARTITION_FAT16_LBA	0x0e
+@@ -1498,6 +1499,8 @@ msdos_partition_set_system (PedPartition* part,
+ 	} else if (!strcmp (fs_type->name, "hfs")
+ 		   || !strcmp (fs_type->name, "hfs+"))
+ 		dos_data->system = PARTITION_HFS;
++	else if (!strcmp (fs_type->name, "udf"))
++		dos_data->system = PARTITION_UDF;
+ 	else if (!strcmp (fs_type->name, "sun-ufs"))
+ 		dos_data->system = PARTITION_SUN_UFS;
+ 	else if (is_linux_swap (fs_type->name))
+diff --git a/libparted/labels/gpt.c b/libparted/labels/gpt.c
+index 6f92a34..860f415 100644
+--- a/libparted/labels/gpt.c
++++ b/libparted/labels/gpt.c
+@@ -1513,6 +1513,7 @@ gpt_partition_set_system (PedPartition *part,
+   if (fs_type)
+     {
+       if (strncmp (fs_type->name, "fat", 3) == 0
++          || strcmp (fs_type->name, "udf") == 0
+           || strcmp (fs_type->name, "ntfs") == 0)
+         {
+           gpt_part_data->type = PARTITION_BASIC_DATA_GUID;
+diff --git a/libparted/libparted.c b/libparted/libparted.c
+index 3bd071d..e517875 100644
+--- a/libparted/libparted.c
++++ b/libparted/libparted.c
+@@ -112,6 +112,7 @@ extern void ped_file_system_fat_init (void);
+ extern void ped_file_system_ext2_init (void);
+ extern void ped_file_system_nilfs2_init (void);
+ extern void ped_file_system_btrfs_init (void);
++extern void ped_file_system_udf_init (void);
+ 
+ static void
+ init_file_system_types ()
+@@ -128,6 +129,7 @@ init_file_system_types ()
+ 	ped_file_system_ext2_init ();
+ 	ped_file_system_nilfs2_init ();
+ 	ped_file_system_btrfs_init ();
++	ped_file_system_udf_init ();
+ }
+ 
+ extern void ped_disk_aix_done ();
+@@ -193,6 +195,7 @@ extern void ped_file_system_ufs_done (void);
+ extern void ped_file_system_xfs_done (void);
+ extern void ped_file_system_amiga_done (void);
+ extern void ped_file_system_btrfs_done (void);
++extern void ped_file_system_udf_done (void);
+ 
+ static void
+ done_file_system_types ()
+@@ -209,6 +212,7 @@ done_file_system_types ()
+ 	ped_file_system_xfs_done ();
+ 	ped_file_system_amiga_done ();
+ 	ped_file_system_btrfs_done ();
++	ped_file_system_udf_done ();
+ }
+ 
+ static void _done() __attribute__ ((destructor));
+diff --git a/scripts/data/abi/baseline_symbols.txt b/scripts/data/abi/baseline_symbols.txt
+index 9162f1a..69abd82 100644
+--- a/scripts/data/abi/baseline_symbols.txt
++++ b/scripts/data/abi/baseline_symbols.txt
+@@ -340,6 +340,8 @@ FUNC:ped_file_system_type_get
+ FUNC:ped_file_system_type_get_next
+ FUNC:ped_file_system_type_register
+ FUNC:ped_file_system_type_unregister
++FUNC:ped_file_system_udf_init
++FUNC:ped_file_system_udf_done
+ FUNC:ped_file_system_ufs_done
+ FUNC:ped_file_system_ufs_init
+ FUNC:ped_file_system_xfs_done
+diff --git a/tests/Makefile.am b/tests/Makefile.am
+index 3851983..3fa75a9 100644
+--- a/tests/Makefile.am
++++ b/tests/Makefile.am
+@@ -51,6 +51,7 @@ TESTS = \
+   t2310-dos-extended-2-sector-min-offset.sh \
+   t2320-dos-extended-noclobber.sh \
+   t2400-dos-hfs-partition-type.sh \
++  t2410-dos-udf-partition-type.sh \
+   t2500-probe-corrupt-hfs.sh \
+   t3000-resize-fs.sh \
+   t3200-resize-partition.sh \
+diff --git a/tests/t2410-dos-udf-partition-type.sh b/tests/t2410-dos-udf-partition-type.sh
+new file mode 100644
+index 0000000..7cc8a02
+--- /dev/null
++++ b/tests/t2410-dos-udf-partition-type.sh
+@@ -0,0 +1,38 @@
++#!/bin/sh
++# Ensure that an UDF partition in a dos table gets the right ID
++
++# Copyright (C) 2018 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 3 of the License, or
++# (at your option) any later version.
++
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++# GNU General Public License for more details.
++
++# You should have received a copy of the GNU General Public License
++# along with this program.  If not, see <http://www.gnu.org/licenses/>.
++
++. "${srcdir=.}/init.sh"; path_prepend_ ../parted
++
++dev=loop-file
++ss=$sector_size_
++n_sectors=8000
++
++dd if=/dev/null of=$dev bs=$ss seek=$n_sectors || framework_failure
++
++# create a GPT partition table
++parted -s $dev mklabel msdos \
++  mkpart pri udf 2048s 4095s > out 2>&1 || fail=1
++# expect no output
++compare /dev/null out || fail=1
++
++# Extract the "type" byte of the first partition.
++od -An -j450 -tx1 -N1 $dev > out || fail=1
++printf ' 07\n' > exp || fail=1
++compare exp out || fail=1
++
++Exit $fail
+-- 
+2.17.2
+
diff --git a/0100-Add-udf-to-t1700-probe-fs-and-to-the-manpage.patch b/0100-Add-udf-to-t1700-probe-fs-and-to-the-manpage.patch
new file mode 100644
index 0000000..773e78a
--- /dev/null
+++ b/0100-Add-udf-to-t1700-probe-fs-and-to-the-manpage.patch
@@ -0,0 +1,41 @@
+From 749b42f25534bec8625e74a6c1c61c3ad6cc8b17 Mon Sep 17 00:00:00 2001
+From: "Brian C. Lane" <bcl at redhat.com>
+Date: Tue, 16 Oct 2018 13:37:09 -0700
+Subject: [PATCH 100/103] Add udf to t1700-probe-fs and to the manpage
+
+If mkfs.udf is installed this will test to make sure that the filesystem
+is detected.
+---
+ doc/C/parted.8          | 2 +-
+ tests/t1700-probe-fs.sh | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/doc/C/parted.8 b/doc/C/parted.8
+index eb7cd98..fecdc29 100644
+--- a/doc/C/parted.8
++++ b/doc/C/parted.8
+@@ -78,7 +78,7 @@ Create a new partition. \fIpart-type\fP may be specified only with msdos and
+ dvh partition tables, it should be one of "primary", "logical", or "extended".
+ \fIname\fP is required for GPT partition tables and \fIfs-type\fP is optional.
+ \fIfs-type\fP can be one of "btrfs", "ext2", "ext3", "ext4", "fat16", "fat32",
+-"hfs", "hfs+", "linux-swap", "ntfs", "reiserfs", or "xfs".
++"hfs", "hfs+", "linux-swap", "ntfs", "reiserfs", "udf", or "xfs".
+ .TP
+ .B name \fIpartition\fP \fIname\fP
+ Set the name of \fIpartition\fP to \fIname\fP. This option works only on Mac,
+diff --git a/tests/t1700-probe-fs.sh b/tests/t1700-probe-fs.sh
+index b13cec0..853d6bc 100755
+--- a/tests/t1700-probe-fs.sh
++++ b/tests/t1700-probe-fs.sh
+@@ -23,7 +23,7 @@ dev=loop-file
+ ss=$sector_size_
+ n_sectors=$((512*1024))
+ 
+-for type in ext2 ext3 ext4 btrfs xfs nilfs2 ntfs vfat hfsplus; do
++for type in ext2 ext3 ext4 btrfs xfs nilfs2 ntfs vfat hfsplus udf; do
+ 
+   ( mkfs.$type 2>&1 | grep -i '^usage' ) > /dev/null \
+       || { warn_ "$ME: no $type support"; continue; }
+-- 
+2.17.2
+
diff --git a/0101-ped_unit_get_name-Resolve-conflicting-attributes-con.patch b/0101-ped_unit_get_name-Resolve-conflicting-attributes-con.patch
new file mode 100644
index 0000000..519f33f
--- /dev/null
+++ b/0101-ped_unit_get_name-Resolve-conflicting-attributes-con.patch
@@ -0,0 +1,34 @@
+From 3262e2fe9ec93ad2c24e1b117bf87fb6f4b6ffec Mon Sep 17 00:00:00 2001
+From: dann frazier <dann.frazier at canonical.com>
+Date: Fri, 31 Aug 2018 09:28:27 -0600
+Subject: [PATCH 101/103] ped_unit_get_name: Resolve conflicting attributes
+ 'const' and 'pure'
+
+The const and pure attributes conflict:
+
+  error: ignoring attribute 'const' because it conflicts with attribute 'pure' [-Werror=attributes]
+
+pure functions may access global memory, const functions may not.
+ped_unit_get_name() accesses non-local variable unit_names, so drop const.
+
+Signed-off-by: Brian C. Lane <bcl at redhat.com>
+---
+ include/parted/unit.in.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/include/parted/unit.in.h b/include/parted/unit.in.h
+index 9d6e06a..315660d 100644
+--- a/include/parted/unit.in.h
++++ b/include/parted/unit.in.h
+@@ -66,7 +66,7 @@ typedef enum {
+ 
+ extern long long ped_unit_get_size (const PedDevice* dev, PedUnit unit);
+ extern const char *ped_unit_get_name (PedUnit unit)
+-  _GL_ATTRIBUTE_PURE _GL_ATTRIBUTE_CONST;
++  _GL_ATTRIBUTE_PURE;
+ extern PedUnit ped_unit_get_by_name (const char* unit_name) _GL_ATTRIBUTE_PURE;
+ 
+ extern void ped_unit_set_default (PedUnit unit);
+-- 
+2.17.2
+
diff --git a/0102-Fix-warnings-from-GCC-7-s-Wimplicit-fallthrough.patch b/0102-Fix-warnings-from-GCC-7-s-Wimplicit-fallthrough.patch
new file mode 100644
index 0000000..68a964a
--- /dev/null
+++ b/0102-Fix-warnings-from-GCC-7-s-Wimplicit-fallthrough.patch
@@ -0,0 +1,97 @@
+From 25a19f80a97b4b04d1ada3fdfe45671121886b6d Mon Sep 17 00:00:00 2001
+From: dann frazier <dann.frazier at canonical.com>
+Date: Fri, 31 Aug 2018 09:28:28 -0600
+Subject: [PATCH 102/103] Fix warnings from GCC 7's -Wimplicit-fallthrough
+
+All of these locations appear to have intentional fallthroughs. Add
+comments that GCC will detect to mute warnings w/ -Wimplicit-fallthrough.
+
+Signed-off-by: Brian C. Lane <bcl at redhat.com>
+---
+ libparted/arch/linux.c | 8 ++++++++
+ libparted/labels/rdb.c | 1 +
+ 2 files changed, 9 insertions(+)
+
+diff --git a/libparted/arch/linux.c b/libparted/arch/linux.c
+index 4c778ea..02d7a52 100644
+--- a/libparted/arch/linux.c
++++ b/libparted/arch/linux.c
+@@ -961,6 +961,7 @@ init_ide (PedDevice* dev)
+ 
+                         case PED_EXCEPTION_UNHANDLED:
+                                 ped_exception_catch ();
++                                /* FALLTHROUGH */
+                         case PED_EXCEPTION_IGNORE:
+                                 dev->model = strdup(_("Generic IDE"));
+                                 break;
+@@ -998,6 +999,7 @@ init_ide (PedDevice* dev)
+ 
+                                 case PED_EXCEPTION_UNHANDLED:
+                                         ped_exception_catch ();
++                                        /* FALLTHROUGH */
+                                 case PED_EXCEPTION_IGNORE:
+                                         break;
+                                 default:
+@@ -1347,6 +1349,7 @@ init_generic (PedDevice* dev, const char* model_name)
+ 
+                         case PED_EXCEPTION_UNHANDLED:
+                                 ped_exception_catch ();
++                                /* FALLTHROUGH */
+                         case PED_EXCEPTION_IGNORE:
+                                 break;
+                         default:
+@@ -1890,6 +1893,7 @@ linux_read (const PedDevice* dev, void* buffer, PedSector start,
+ 
+                         case PED_EXCEPTION_UNHANDLED:
+                                 ped_exception_catch ();
++                                /* FALLTHROUGH */
+                         case PED_EXCEPTION_CANCEL:
+                                 return 0;
+                         default:
+@@ -1933,6 +1937,7 @@ linux_read (const PedDevice* dev, void* buffer, PedSector start,
+ 
+                         case PED_EXCEPTION_UNHANDLED:
+                                 ped_exception_catch ();
++                                /* FALLTHROUGH */
+                         case PED_EXCEPTION_CANCEL:
+                                 free(diobuf);
+                                 return 0;
+@@ -2032,6 +2037,7 @@ linux_write (PedDevice* dev, const void* buffer, PedSector start,
+ 
+                         case PED_EXCEPTION_UNHANDLED:
+                                 ped_exception_catch ();
++                                /* FALLTHROUGH */
+                         case PED_EXCEPTION_CANCEL:
+                                 return 0;
+                         default:
+@@ -2075,6 +2081,7 @@ linux_write (PedDevice* dev, const void* buffer, PedSector start,
+ 
+                         case PED_EXCEPTION_UNHANDLED:
+                                 ped_exception_catch ();
++                                /* FALLTHROUGH */
+                         case PED_EXCEPTION_CANCEL:
+                                 free(diobuf_start);
+                                 return 0;
+@@ -2146,6 +2153,7 @@ _do_fsync (PedDevice* dev)
+ 
+                         case PED_EXCEPTION_UNHANDLED:
+                                 ped_exception_catch ();
++                                /* FALLTHROUGH */
+                         case PED_EXCEPTION_CANCEL:
+                                 return 0;
+                         default:
+diff --git a/libparted/labels/rdb.c b/libparted/labels/rdb.c
+index 34b59aa..48e8d7a 100644
+--- a/libparted/labels/rdb.c
++++ b/libparted/labels/rdb.c
+@@ -175,6 +175,7 @@ _amiga_read_block (const PedDevice *dev, struct AmigaBlock *blk,
+ 				_amiga_calculate_checksum(AMIGA(blk));
+ 				if (!ped_device_write ((PedDevice*)dev, blk, block, 1))
+ 					return NULL;
++				/* FALLTHROUGH */
+ 			case PED_EXCEPTION_IGNORE :
+ 			case PED_EXCEPTION_UNHANDLED :
+ 			default :
+-- 
+2.17.2
+
diff --git a/0103-Read-NVMe-model-names-from-sysfs.patch b/0103-Read-NVMe-model-names-from-sysfs.patch
new file mode 100644
index 0000000..09af6de
--- /dev/null
+++ b/0103-Read-NVMe-model-names-from-sysfs.patch
@@ -0,0 +1,59 @@
+From 279bd5540a59e3bdc4e3702ff062f87fd842c0e9 Mon Sep 17 00:00:00 2001
+From: dann frazier <dann.frazier at canonical.com>
+Date: Fri, 7 Sep 2018 13:31:15 -0600
+Subject: [PATCH 103/103] Read NVMe model names from sysfs
+
+parted currently shows the same generic model name for all NVMe devices:
+
+  # parted /dev/nvme0n1 -s print | grep Model
+  Model: NVMe Device (nvme)
+
+If the model information is available in sysfs, display that instead:
+
+  # parted /dev/nvme0n1 -s print | grep Model
+  Model: THNSN5512GPU7 NVMe TOSHIBA 512GB (nvme)
+
+Signed-off-by: Brian C. Lane <bcl at redhat.com>
+---
+ libparted/arch/linux.c | 18 +++++++++++++++++-
+ 1 file changed, 17 insertions(+), 1 deletion(-)
+
+diff --git a/libparted/arch/linux.c b/libparted/arch/linux.c
+index 02d7a52..7d83dfb 100644
+--- a/libparted/arch/linux.c
++++ b/libparted/arch/linux.c
+@@ -1405,6 +1405,22 @@ init_sdmmc (PedDevice* dev)
+         return init_generic(dev, id);
+ }
+ 
++static int
++init_nvme (PedDevice* dev)
++{
++        int ret;
++        char *model = read_device_sysfs_file (dev, "model");
++
++        if (!model)
++                ret = init_generic (dev, _("NVMe Device"));
++        else {
++                ret = init_generic (dev, model);
++                free (model);
++        }
++
++        return ret;
++}
++
+ static PedDevice*
+ linux_new (const char* path)
+ {
+@@ -1489,7 +1505,7 @@ linux_new (const char* path)
+                 break;
+ 
+         case PED_DEVICE_NVME:
+-                if (!init_generic (dev, _("NVMe Device")))
++                if (!init_nvme (dev))
+                         goto error_free_arch_specific;
+                 break;
+ 
+-- 
+2.17.2
+
diff --git a/0104-parted-fix-crash-due-to-improper-partition-number-in.patch b/0104-parted-fix-crash-due-to-improper-partition-number-in.patch
new file mode 100644
index 0000000..adcf939
--- /dev/null
+++ b/0104-parted-fix-crash-due-to-improper-partition-number-in.patch
@@ -0,0 +1,94 @@
+From 149f009c3b4ab6bac8059b48142a1c3f698c8e53 Mon Sep 17 00:00:00 2001
+From: Wang Dong <dongdwdw at linux.vnet.ibm.com>
+Date: Fri, 23 Dec 2016 06:53:36 +0100
+Subject: [PATCH 104/106] parted: fix crash due to improper partition number
+ input
+
+When the user makes a new partition, if parted fails to add the
+partition to disk, it jumps to wrong error label. In this
+situation, this new partition actually is not a node in disk
+data structure. But in the wrong error label, it pretends this
+is a node and removes it as a list node, leading to other
+partition in this disk deleted. This might lead to a memory leak.
+Because if there are other partitions, it just removes them from
+list without releasing the resource. And this also leads to different
+disk information between memory and device. This is confusing.
+
+But when the new partition is added to disk successfully and if
+any operations followed fail, this partition should be removed from
+disk and destroyed.
+
+Signed-off-by: Wang Dong <dongdwdw at linux.vnet.ibm.com>
+Signed-off-by: Hendrik Brueckner <brueckner at linux.vnet.ibm.com>
+---
+ parted/ui.c | 26 ++++++++++++++++++++++----
+ 1 file changed, 22 insertions(+), 4 deletions(-)
+
+diff --git a/parted/ui.c b/parted/ui.c
+index 505b8ac..5d76c20 100644
+--- a/parted/ui.c
++++ b/parted/ui.c
+@@ -29,6 +29,8 @@
+ #include <unistd.h>
+ #include <setjmp.h>
+ #include <assert.h>
++#include <limits.h>
++#include <errno.h>
+ 
+ #include "command.h"
+ #include "strlist.h"
+@@ -909,16 +911,30 @@ command_line_get_integer (const char* prompt, int* value)
+ {
+         char     def_str [10];
+         char*    input;
+-        int      valid;
++        long     ret;
+ 
+         snprintf (def_str, 10, "%d", *value);
+         input = command_line_get_word (prompt, *value ? def_str : NULL,
+                                        NULL, 1);
+         if (!input)
+                 return 0;
+-        valid = sscanf (input, "%d", value);
++
++        errno = 0;
++        ret = strtol (input, (char**) NULL, 10);
++        if (errno)
++                goto error;
++
++        if ((ret > INT_MAX) || (ret < INT_MIN))
++                goto error;
++        else
++                *value = (int) ret;
++
+         free (input);
+-        return valid;
++        return 1;
++
++error:
++        free (input);
++        return 0;
+ }
+ 
+ int
+@@ -1029,6 +1045,7 @@ command_line_get_partition (const char* prompt, PedDisk* disk,
+                             PedPartition** value)
+ {
+         PedPartition*    part;
++        int ret;
+ 
+         /* Flawed logic, doesn't seem to work?!
+         check = ped_disk_next_partition (disk, part);
+@@ -1045,7 +1062,8 @@ command_line_get_partition (const char* prompt, PedDisk* disk,
+         */
+         int num = (*value) ? (*value)->num : 0;
+ 
+-        if (!command_line_get_integer (prompt, &num)) {
++        ret = command_line_get_integer (prompt, &num);
++        if ((!ret) || (num < 0)) {
+                 ped_exception_throw (PED_EXCEPTION_ERROR,
+                                      PED_EXCEPTION_CANCEL,
+                                      _("Expecting a partition number."));
+-- 
+2.20.1
+
diff --git a/0105-parted-fix-wrong-error-label-jump-in-mkpart.patch b/0105-parted-fix-wrong-error-label-jump-in-mkpart.patch
new file mode 100644
index 0000000..e79bb53
--- /dev/null
+++ b/0105-parted-fix-wrong-error-label-jump-in-mkpart.patch
@@ -0,0 +1,66 @@
+From af150f6764a08eae4b4cf448c392259c067a1523 Mon Sep 17 00:00:00 2001
+From: Wang Dong <dongdwdw at linux.vnet.ibm.com>
+Date: Fri, 23 Dec 2016 06:53:37 +0100
+Subject: [PATCH 105/106] parted: fix wrong error label jump in mkpart
+
+When the user makes a new partition, if parted fails to add the
+partition to disk, it jumps to wrong error label. In this
+situation, this new partition actually is not a node in disk
+data structure. But in the wrong error label, it pretends this
+is a node and removes it as a list node, leading to other
+partition in this disk deleted. This might lead to a memory leak.
+Because if there are other partitions, it just removes them from
+list without releasing the resource. And this also leads to different
+disk information between memory and device. This is confusing.
+
+But when the new partition is added to disk successfully and if
+any operations followed fail, this partition should be removed from
+disk and destroyed.
+
+Signed-off-by: Wang Dong <dongdwdw at linux.vnet.ibm.com>
+Signed-off-by: Hendrik Brueckner <brueckner at linux.vnet.ibm.com>
+---
+ parted/parted.c | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+diff --git a/parted/parted.c b/parted/parted.c
+index a72a4eb..4bb7911 100644
+--- a/parted/parted.c
++++ b/parted/parted.c
+@@ -742,7 +742,7 @@ do_mkpart (PedDevice** dev, PedDisk** diskp)
+                 ped_constraint_destroy (constraint_any);
+ 
+                 if (!added_ok)
+-                        goto error_remove_part;
++                        goto error_destroy_simple_constraints;
+ 
+                 if (!ped_geometry_test_sector_inside(range_start, part->geom.start) ||
+                     !ped_geometry_test_sector_inside(range_end, part->geom.end)) {
+@@ -817,12 +817,12 @@ do_mkpart (PedDevice** dev, PedDisk** diskp)
+         free (part_name);  /* avoid double-free upon failure */
+         part_name = NULL;
+         if (!ped_partition_set_system (part, fs_type))
+-                goto error;
++                goto error_remove_part;
+         if (ped_partition_is_flag_available (part, PED_PARTITION_LBA))
+                 ped_partition_set_flag (part, PED_PARTITION_LBA, 1);
+ 
+         if (!ped_disk_commit (disk))
+-                goto error;
++                goto error_remove_part;
+ 
+         /* clean up */
+         if (range_start != NULL)
+@@ -845,7 +845,8 @@ error_remove_part:
+ error_destroy_simple_constraints:
+         ped_partition_destroy (part);
+ error:
+-        free (part_name);
++        if (part_name)
++                free (part_name);
+         if (range_start != NULL)
+                 ped_geometry_destroy (range_start);
+         if (range_end != NULL)
+-- 
+2.20.1
+
diff --git a/0106-clean-the-disk-information-when-commands-fail-in-int.patch b/0106-clean-the-disk-information-when-commands-fail-in-int.patch
new file mode 100644
index 0000000..e08827f
--- /dev/null
+++ b/0106-clean-the-disk-information-when-commands-fail-in-int.patch
@@ -0,0 +1,86 @@
+From 5a61f15b7003cba73e6517ac22204bafd9a3cb8e Mon Sep 17 00:00:00 2001
+From: Wang Dong <dongdwdw at linux.vnet.ibm.com>
+Date: Fri, 23 Dec 2016 06:53:38 +0100
+Subject: [PATCH 106/106] clean the disk information when commands fail in
+ interactive mode.
+
+parted always reads disk information to memory before any
+operations. The disk that user operates is actually
+a copy of real one in memory. When the information in memory
+is changed, it will commit the memory to device to update the
+disk information.
+
+Once the disk information is read, parted will never re-read it
+again unless another device is loaded or the device is re-read.
+Above work has been done in commit 7eac058 (parted: don't reload
+partition table on every command)
+
+Each command of parted always commits the memory when it succeeds.
+Then the disk information on device and in memory are the same.
+But when it fails, they might be different. User will be confused
+by this, and sometimes get undesired result with the contaminated
+memory. This memory should be cleaned if some command fails.
+Then the command followed will re-read the disk.
+
+Signed-off-by: Wang Dong <dongdwdw at linux.vnet.ibm.com>
+Signed-off-by: Hendrik Brueckner <brueckner at linux.vnet.ibm.com>
+---
+ parted/parted.c | 14 ++++++++++----
+ parted/ui.c     |  8 +++++++-
+ 2 files changed, 17 insertions(+), 5 deletions(-)
+
+diff --git a/parted/parted.c b/parted/parted.c
+index 4bb7911..59ad59e 100644
+--- a/parted/parted.c
++++ b/parted/parted.c
+@@ -1390,8 +1390,12 @@ _rescue_add_partition (PedPartition* part)
+                 default: break;
+         }
+ 
+-        ped_partition_set_system (part, fs_type);
+-        ped_disk_commit (part->disk);
++        if (!ped_partition_set_system (part, fs_type))
++                return 0;
++
++        if (!ped_disk_commit (part->disk))
++                return 0;
++
+         return 1;
+ }
+ 
+@@ -1601,8 +1605,10 @@ do_rm (PedDevice** dev, PedDisk** diskp)
+         if (!_partition_warn_busy (part))
+                 goto error;
+ 
+-        ped_disk_delete_partition (*diskp, part);
+-        ped_disk_commit (*diskp);
++        if (!ped_disk_delete_partition (*diskp, part))
++                goto error;
++        if (!ped_disk_commit (*diskp))
++                goto error;
+ 
+         if ((*dev)->type != PED_DEVICE_FILE)
+                 disk_is_modified = 1;
+diff --git a/parted/ui.c b/parted/ui.c
+index 5d76c20..af0539c 100644
+--- a/parted/ui.c
++++ b/parted/ui.c
+@@ -1612,8 +1612,14 @@ interactive_mode (PedDevice** dev, PedDisk** disk, Command* cmd_list[])
+                         cmd = command_get (commands, word);
+                         free (word);
+                         if (cmd) {
+-                                if (!command_run (cmd, dev, disk))
++                                if (!command_run (cmd, dev, disk)) {
+                                         command_line_flush ();
++
++                                        if (*disk) {
++                                                ped_disk_destroy (*disk);
++                                                *disk = 0;
++                                        }
++                                }
+                         } else
+                                 print_commands_help ();
+                 }
+-- 
+2.20.1
+
diff --git a/0107-parted-Remove-PED_ASSERT-from-ped_partition_set_name.patch b/0107-parted-Remove-PED_ASSERT-from-ped_partition_set_name.patch
new file mode 100644
index 0000000..3391ec5
--- /dev/null
+++ b/0107-parted-Remove-PED_ASSERT-from-ped_partition_set_name.patch
@@ -0,0 +1,32 @@
+From 0601c8ea6de92017ee8c6293db102029e309b166 Mon Sep 17 00:00:00 2001
+From: "Brian C. Lane" <bcl at redhat.com>
+Date: Thu, 31 Jan 2019 08:59:55 -0800
+Subject: [PATCH] parted: Remove PED_ASSERT from ped_partition_set_name
+
+Asserts should only check logic, not wrap functions with side-effects.
+When compiled with --disable-debug this causes the name field of mkpart
+to be ignored.
+---
+ parted/parted.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/parted/parted.c b/parted/parted.c
+index 35432c6..c0600ea 100644
+--- a/parted/parted.c
++++ b/parted/parted.c
+@@ -814,9 +814,11 @@ do_mkpart (PedDevice** dev, PedDisk** diskp)
+ 
+         /* set minor attributes */
+         if (part_name)
+-                PED_ASSERT (ped_partition_set_name (part, part_name));
++            if (!ped_partition_set_name (part, part_name))
++                goto error_remove_part;
+         free (part_name);  /* avoid double-free upon failure */
+         part_name = NULL;
++
+         if (!ped_partition_set_system (part, fs_type))
+                 goto error_remove_part;
+         if (ped_partition_is_flag_available (part, PED_PARTITION_LBA))
+-- 
+2.20.1
+
diff --git a/0108-Added-support-for-Windows-recovery-partition-WINRE-o.patch b/0108-Added-support-for-Windows-recovery-partition-WINRE-o.patch
new file mode 100644
index 0000000..5b8a613
--- /dev/null
+++ b/0108-Added-support-for-Windows-recovery-partition-WINRE-o.patch
@@ -0,0 +1,167 @@
+From 5a02a03e72dc116d5bcab04b8f2185ee2772b967 Mon Sep 17 00:00:00 2001
+From: Hans-Joachim Baader <baader at gmx.net>
+Date: Mon, 14 Jan 2019 16:01:07 +0100
+Subject: [PATCH] Added support for Windows recovery partition (WINRE) on MBR
+
+Windows 10 uses a recovery partition which is sometimes marked with
+partition type 0x27 on MBR systems. It wasn't possible to handle such
+a partition with parted. Therefore the partition type PARTITION_MSFT_RECOVERY
+is now used properly also on MBR when the flag msftres is set.
+
+Signed-off-by: Brian C. Lane <bcl at redhat.com>
+---
+ doc/C/parted.8         |  2 +-
+ doc/parted.texi        |  4 ++--
+ libparted/labels/dos.c | 40 ++++++++++++++++++++++++++++++++++++++--
+ 3 files changed, 41 insertions(+), 5 deletions(-)
+
+diff --git a/doc/C/parted.8 b/doc/C/parted.8
+index fecdc29..15932c2 100644
+--- a/doc/C/parted.8
++++ b/doc/C/parted.8
+@@ -112,7 +112,7 @@ or an LVM logical volume if necessary.
+ .B set \fIpartition\fP \fIflag\fP \fIstate\fP
+ Change the state of the \fIflag\fP on \fIpartition\fP to \fIstate\fP.
+ Supported flags are: "boot", "root", "swap", "hidden", "raid", "lvm", "lba",
+-"legacy_boot", "irst", "esp" and "palo".
++"legacy_boot", "irst", "msftres", "esp" and "palo".
+ \fIstate\fP should be either "on" or "off".
+ .TP
+ .B unit \fIunit\fP
+diff --git a/doc/parted.texi b/doc/parted.texi
+index 6f8c378..e124222 100644
+--- a/doc/parted.texi
++++ b/doc/parted.texi
+@@ -861,8 +861,8 @@ flag can only be removed within parted by replacing it with a competing
+ flag, such as boot or msftres.
+ 
+ @item msftres
+-(GPT) - This flag identifies a "Microsoft Reserved" partition, which is
+-used by Windows on GPT disks.  Note that this flag should not normally be
++(MS-DOS,GPT) - This flag identifies a "Microsoft Reserved" partition, which
++is used by Windows.  Note that this flag should not normally be
+ set on Windows filesystem partitions (those that contain NTFS or FAT
+ filesystems).
+ 
+diff --git a/libparted/labels/dos.c b/libparted/labels/dos.c
+index b2b8de9..d736b9e 100644
+--- a/libparted/labels/dos.c
++++ b/libparted/labels/dos.c
+@@ -156,6 +156,7 @@ typedef struct {
+ 	unsigned char	system;
+ 	int		boot;
+ 	int		hidden;
++	int		msftres;
+ 	int		raid;
+ 	int		lvm;
+ 	int		lba;
+@@ -949,8 +950,8 @@ raw_part_parse (const PedDisk* disk, const DosRawPartition* raw_part,
+ 	dos_data->system = raw_part->type;
+ 	dos_data->boot = raw_part->boot_ind != 0;
+ 	dos_data->diag = raw_part->type == PARTITION_COMPAQ_DIAG ||
+-			 raw_part->type == PARTITION_MSFT_RECOVERY ||
+ 			 raw_part->type == PARTITION_DELL_DIAG;
++	dos_data->msftres = raw_part->type == PARTITION_MSFT_RECOVERY;
+ 	dos_data->hidden = raw_part_is_hidden (raw_part);
+ 	dos_data->raid = raw_part->type == PARTITION_LINUX_RAID;
+ 	dos_data->lvm = raw_part->type == PARTITION_LINUX_LVM_OLD
+@@ -1345,6 +1346,7 @@ msdos_partition_new (const PedDisk* disk, PedPartitionType part_type,
+ 		dos_data->orig = NULL;
+ 		dos_data->system = PARTITION_LINUX;
+ 		dos_data->hidden = 0;
++		dos_data->msftres = 0;
+ 		dos_data->boot = 0;
+ 		dos_data->diag = 0;
+ 		dos_data->raid = 0;
+@@ -1384,6 +1386,7 @@ msdos_partition_duplicate (const PedPartition* part)
+ 	new_dos_data->boot = old_dos_data->boot;
+ 	new_dos_data->diag = old_dos_data->diag;
+ 	new_dos_data->hidden = old_dos_data->hidden;
++	new_dos_data->msftres = old_dos_data->msftres;
+ 	new_dos_data->raid = old_dos_data->raid;
+ 	new_dos_data->lvm = old_dos_data->lvm;
+ 	new_dos_data->lba = old_dos_data->lba;
+@@ -1433,6 +1436,11 @@ msdos_partition_set_system (PedPartition* part,
+ 		    && strcmp (fs_type->name, "ntfs") != 0)
+ 		dos_data->hidden = 0;
+ 
++	if (dos_data->msftres
++		    && fs_type
++		    && strcmp (fs_type->name, "ntfs") != 0)
++		dos_data->msftres = 0;
++
+ 	if (part->type & PED_PARTITION_EXTENDED) {
+ 		dos_data->diag = 0;
+ 		dos_data->raid = 0;
+@@ -1452,11 +1460,14 @@ msdos_partition_set_system (PedPartition* part,
+ 		/* Don't change the system if it already is a diag type,
+ 		   otherwise use Compaq as almost all vendors use that. */
+ 		if (dos_data->system != PARTITION_COMPAQ_DIAG &&
+-		    dos_data->system != PARTITION_MSFT_RECOVERY &&
+ 		    dos_data->system != PARTITION_DELL_DIAG)
+ 			dos_data->system = PARTITION_COMPAQ_DIAG;
+ 		return 1;
+ 	}
++	if (dos_data->msftres) {
++		dos_data->system = PARTITION_MSFT_RECOVERY;
++		return 1;
++	}
+ 	if (dos_data->lvm) {
+ 		dos_data->system = PARTITION_LINUX_LVM;
+ 		return 1;
+@@ -1516,6 +1527,7 @@ clear_flags (DosPartitionData *dos_data)
+ {
+   dos_data->diag = 0;
+   dos_data->hidden = 0;
++  dos_data->msftres = 0;
+   dos_data->lvm = 0;
+   dos_data->palo = 0;
+   dos_data->prep = 0;
+@@ -1552,6 +1564,18 @@ msdos_partition_set_flag (PedPartition* part,
+ 		dos_data->hidden = state;
+ 		return ped_partition_set_system (part, part->fs_type);
+ 
++	case PED_PARTITION_MSFT_RESERVED:
++		if (part->type == PED_PARTITION_EXTENDED) {
++			ped_exception_throw (
++				PED_EXCEPTION_ERROR,
++				PED_EXCEPTION_CANCEL,
++				_("Extended partitions cannot be recovery partitions on "
++				  "msdos disk labels."));
++			return 0;
++		}
++		dos_data->msftres = state;
++		return ped_partition_set_system (part, part->fs_type);
++
+ 	case PED_PARTITION_BOOT:
+ 		dos_data->boot = state;
+ 		if (!state)
+@@ -1632,6 +1656,12 @@ msdos_partition_get_flag (const PedPartition* part, PedPartitionFlag flag)
+ 		else
+ 			return dos_data->hidden;
+ 
++	case PED_PARTITION_MSFT_RESERVED:
++		if (part->type == PED_PARTITION_EXTENDED)
++			return 0;
++		else
++			return dos_data->msftres;
++
+ 	case PED_PARTITION_BOOT:
+ 		return dos_data->boot;
+ 
+@@ -1675,6 +1705,12 @@ msdos_partition_is_flag_available (const PedPartition* part,
+ 		else
+ 			return 1;
+ 
++	case PED_PARTITION_MSFT_RESERVED:
++		if (part->type == PED_PARTITION_EXTENDED)
++			return 0;
++		else
++			return 1;
++
+ 	case PED_PARTITION_BOOT:
+ 	case PED_PARTITION_RAID:
+ 	case PED_PARTITION_LVM:
+-- 
+2.20.1
+
diff --git a/0109-t6000-dm-Stop-using-private-lvm-root.patch b/0109-t6000-dm-Stop-using-private-lvm-root.patch
new file mode 100644
index 0000000..82a8f5a
--- /dev/null
+++ b/0109-t6000-dm-Stop-using-private-lvm-root.patch
@@ -0,0 +1,40 @@
+From 23458a9d41c18f5f28766462b9b86165ad0752d0 Mon Sep 17 00:00:00 2001
+From: "Brian C. Lane" <bcl at redhat.com>
+Date: Fri, 11 Jan 2019 12:13:46 -0800
+Subject: [PATCH] t6000-dm: Stop using private lvm root
+
+On Fedora 30 it has stopped working, and really isn't necessary as long
+as our device names are unique.
+
+Related: rhbz#1653912
+---
+ tests/t6000-dm.sh | 6 +-----
+ 1 file changed, 1 insertion(+), 5 deletions(-)
+
+diff --git a/tests/t6000-dm.sh b/tests/t6000-dm.sh
+index 5b29660..c260b96 100755
+--- a/tests/t6000-dm.sh
++++ b/tests/t6000-dm.sh
+@@ -19,10 +19,6 @@
+ . "${srcdir=.}/init.sh"; path_prepend_ ../parted
+ 
+ require_root_
+-lvm_init_root_dir_
+-
+-test "x$ENABLE_DEVICE_MAPPER" = xyes \
+-  || skip_ "no device-mapper support"
+ 
+ # Device maps names - should be random to not conflict with existing ones on
+ # the system
+@@ -71,7 +67,7 @@ for type in linear ; do
+ 
+   # setup: create a mapping
+   echo "$dmsetup_cmd" | dmsetup create "$type_kwd" || fail=1
+-  dev="$DM_DEV_DIR/mapper/$type_kwd"
++  dev="/dev/mapper/$type_kwd"
+ 
+   # Create msdos partition table
+   parted -s $dev mklabel msdos > out 2>&1 || fail=1
+-- 
+2.20.1
+
diff --git a/0110-Avoid-sigsegv-in-case-2nd-nilfs2-superblock-magic-ac.patch b/0110-Avoid-sigsegv-in-case-2nd-nilfs2-superblock-magic-ac.patch
new file mode 100644
index 0000000..c1a51ee
--- /dev/null
+++ b/0110-Avoid-sigsegv-in-case-2nd-nilfs2-superblock-magic-ac.patch
@@ -0,0 +1,53 @@
+From b951c46fab0efe29adc43d7fff7ed4201adcde7d Mon Sep 17 00:00:00 2001
+From: Michael Small <smallm at sdf.org>
+Date: Fri, 8 Feb 2019 17:01:43 -0500
+Subject: [PATCH 110/111] Avoid sigsegv in case 2nd nilfs2 superblock magic
+ accidently found.
+
+1. is_valid_nilfs_sb: make sure the subtraction bytes - sumoff - 4
+won't give a negative number. That as the len argument to
+__efi_crc32() would give a very large number for the latter's for
+loop limit, since len is unsigned long.
+
+2. nilfs2_probe: Read and allocate enough sectors to hold a
+struct nilfs2_super_block.  is_valid_nilfs_sb() will be passing
+up to 1024 bytes to __efi_crc32(). If only one 512 byte sector
+had been allocated with alloca and read from disk that would cause
+reads off the the end of the stack even if bytes were more than
+sumoff - 4.
+---
+ libparted/fs/nilfs2/nilfs2.c | 8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
+
+diff --git a/libparted/fs/nilfs2/nilfs2.c b/libparted/fs/nilfs2/nilfs2.c
+index b42a464..52f757c 100644
+--- a/libparted/fs/nilfs2/nilfs2.c
++++ b/libparted/fs/nilfs2/nilfs2.c
+@@ -89,7 +89,7 @@ is_valid_nilfs_sb(struct nilfs2_super_block *sb)
+ 		return 0;
+ 
+ 	bytes = PED_LE16_TO_CPU(sb->s_bytes);
+-	if (bytes > 1024)
++	if (bytes > 1024 || bytes < sumoff - 4)
+ 		return 0;
+ 
+ 	crc = __efi_crc32(sb, sumoff, PED_LE32_TO_CPU(sb->s_crc_seed));
+@@ -113,11 +113,13 @@ nilfs2_probe (PedGeometry* geom)
+ 	const int sectors = (4096 + geom->dev->sector_size - 1) /
+ 			     geom->dev->sector_size;
+ 	char *buf = alloca (sectors * geom->dev->sector_size);
+-	void *buff2 = alloca (geom->dev->sector_size);
++	const int sectors2 = (1024 + geom->dev->sector_size -1 ) /
++			      geom->dev->sector_size;
++	void *buff2 = alloca (sectors2 * geom->dev->sector_size);
+ 
+ 	if (ped_geometry_read(geom, buf, 0, sectors))
+ 		sb = (struct nilfs2_super_block *)(buf+1024);
+-	if (ped_geometry_read(geom, buff2, sb2off, 1))
++	if (ped_geometry_read(geom, buff2, sb2off, sectors2))
+ 		sb2 = buff2;
+ 
+ 	if ((!sb || !is_valid_nilfs_sb(sb)) &&
+-- 
+2.20.1
+
diff --git a/0111-Tests-case-for-sigsegv-when-false-nilfs2-superblock-.patch b/0111-Tests-case-for-sigsegv-when-false-nilfs2-superblock-.patch
new file mode 100644
index 0000000..ab78aef
--- /dev/null
+++ b/0111-Tests-case-for-sigsegv-when-false-nilfs2-superblock-.patch
@@ -0,0 +1,132 @@
+From 4135de60aaad363644a67c6f52b7ea977a16a7b9 Mon Sep 17 00:00:00 2001
+From: Michael Small <smallm at sdf.org>
+Date: Wed, 13 Feb 2019 16:05:21 -0500
+Subject: [PATCH 111/111] Tests case for sigsegv when false nilfs2 superblock
+ detected.
+
+---
+ tests/Makefile.am                |  2 ++
+ tests/t4301-nilfs2-badsb2.sh     | 43 +++++++++++++++++++++++++++++
+ tests/t4302-nilfs2-lessbadsb2.sh | 47 ++++++++++++++++++++++++++++++++
+ 3 files changed, 92 insertions(+)
+ create mode 100755 tests/t4301-nilfs2-badsb2.sh
+ create mode 100755 tests/t4302-nilfs2-lessbadsb2.sh
+
+diff --git a/tests/Makefile.am b/tests/Makefile.am
+index 3fa75a9..0d7c022 100644
+--- a/tests/Makefile.am
++++ b/tests/Makefile.am
+@@ -66,6 +66,8 @@ TESTS = \
+   t4100-msdos-starting-sector.sh \
+   t4200-partprobe.sh \
+   t4300-nilfs2-tiny.sh \
++  t4301-nilfs2-badsb2.sh \
++  t4302-nilfs2-lessbadsb2.sh \
+   t5000-tags.sh \
+   t6000-dm.sh \
+   t6001-psep.sh \
+diff --git a/tests/t4301-nilfs2-badsb2.sh b/tests/t4301-nilfs2-badsb2.sh
+new file mode 100755
+index 0000000..cef8a9a
+--- /dev/null
++++ b/tests/t4301-nilfs2-badsb2.sh
+@@ -0,0 +1,43 @@
++#!/bin/sh
++# Trigger a nilfs2-related bug.
++
++# Copyright (C) 2011-2014 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 3 of the License, or
++# (at your option) any later version.
++
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++# GNU General Public License for more details.
++
++# You should have received a copy of the GNU General Public License
++# along with this program.  If not, see <http://www.gnu.org/licenses/>.
++
++. "${srcdir=.}/init.sh"; path_prepend_ ../parted
++ss=$sector_size_
++len=32
++dev=dev-file
++
++dd if=/dev/zero of=$dev bs=512 count=$(($len+$ss/512)) || framework_failure_
++
++end=$(($len * 512 / $ss))
++parted -s $dev mklabel msdos mkpart primary 1s ${end}s || framework_failure_
++
++# Write a secondary superblock with the nilfs magic number and a nilfs
++# superblock length (s_bytes) field of only 10 bytes.
++# struct nilfs2_super_block starts with these four fields...
++#	uint32_t	s_rev_level;
++#	uint16_t	s_minor_rev_level;
++#	uint16_t	s_magic;
++#	uint16_t	s_bytes;
++sb2_offset=$(( 24 / ($ss / 512) + 1))
++perl -e "print pack 'LSSS.', 0, 0, 0x3434, 10, $ss" |
++    dd of=$dev bs=$ss seek=$sb2_offset count=1 conv=notrunc
++
++# This used to give parted a sigsegv.
++parted -s $dev print || fail=1
++
++Exit $fail
+diff --git a/tests/t4302-nilfs2-lessbadsb2.sh b/tests/t4302-nilfs2-lessbadsb2.sh
+new file mode 100755
+index 0000000..a46dccf
+--- /dev/null
++++ b/tests/t4302-nilfs2-lessbadsb2.sh
+@@ -0,0 +1,47 @@
++#!/bin/sh
++# Trigger a nilfs2-related bug.
++
++# Copyright (C) 2011-2014 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 3 of the License, or
++# (at your option) any later version.
++
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++# GNU General Public License for more details.
++
++# You should have received a copy of the GNU General Public License
++# along with this program.  If not, see <http://www.gnu.org/licenses/>.
++
++# This test is like t4301-nilfsbadsb2 except with an s_bytes field of
++# 1024 instead of 10. This exercises a less obvious bug.
++
++. "${srcdir=.}/init.sh"; path_prepend_ ../parted
++ss=$sector_size_
++len=32
++dev=dev-file
++
++dd if=/dev/zero of=$dev bs=512 count=$(($len+$ss/512)) || framework_failure_
++
++end=$(($len * 512 / $ss))
++parted -s $dev mklabel msdos mkpart primary 1s ${end}s || framework_failure_
++
++# Write a secondary superblock with the nilfs magic number and a nilfs
++# superblock length (s_bytes) field of only 10 bytes.
++# struct nilfs2_super_block starts with these four fields...
++#	uint32_t	s_rev_level;
++#	uint16_t	s_minor_rev_level;
++#	uint16_t	s_magic;
++#	uint16_t	s_bytes;
++sb2_offset=$(( 24 / ($ss / 512) + 1))
++perl -e "print pack 'LSSS.', 0, 0, 0x3434, 1024, $ss" |
++    dd of=$dev bs=$ss seek=$sb2_offset count=1 conv=notrunc
++
++# This used to read past the part of the stack allocated by alloca, but
++# may or may not cause a segmentation fault as a result.
++parted -s $dev print || fail=1
++
++Exit $fail
+-- 
+2.20.1
+
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/parted.git/commitdiff/74a816df60f30b1f2f8fa0daee211a9ea3f44446



More information about the pld-cvs-commit mailing list