Accepting request 213416 from Base:System
- update to parted-3.1 (fate#316110) - changes in parted-3.1: * Changes in behavior - Floppy drives are no longer scanned on linux: they cannot be partitioned anyhow, and some users have a misconfigured BIOS that claims to have a floppy when they don't, and scanning gets hung up. - parted: the mkpart command has changed semantics with regard to specifying the end of the partition. If the end is specified using units of MiB, GiB, etc., parted subtracts one sector from the specified value. With this change, it is now possible to create partitions like 1MiB-2MiB, 2MiB-3MiB and so on. * Many bugfixes (see changelog) - changes in parted-3.0: * Changes in behavior - Remove all FS-related (file system-related) sub-commands; these commands are no longer recognized because they were all dependent on parted "knowing" too much about file system: mkpartfs, mkfs, cp, move, check. - 'resize' command changed semantics: it no longer resizes the filesystem, but only moves end sector of the partition - libparted-devel contains libparted-fs-resize library - add ability to change size of the partition (ignoring contained filesystem) with 'resize' command; this command has different semantics than the former 'resize' command which upstream decided to drop - parted-resize-command.patch (fate#316110) - when using syncmbr on POWER, make the first partition type 0x41 OBS-URL: https://build.opensuse.org/request/show/213416 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/parted?expand=0&rev=89
This commit is contained in:
commit
e0404514bf
@ -1,67 +0,0 @@
|
||||
---
|
||||
parted/parted.c | 24 +++++++++++++++++++++---
|
||||
1 file changed, 21 insertions(+), 3 deletions(-)
|
||||
|
||||
Index: parted/parted.c
|
||||
===================================================================
|
||||
--- parted/parted.c.orig 2010-05-28 17:09:04.000000000 +0200
|
||||
+++ parted/parted.c 2010-07-08 13:26:06.000000000 +0200
|
||||
@@ -1917,7 +1917,7 @@ do_resize (PedDevice** dev)
|
||||
issue_fs_op_warning ("resize");
|
||||
PedDisk *disk;
|
||||
PedPartition *part = NULL;
|
||||
- PedFileSystem *fs;
|
||||
+ PedFileSystem *fs = NULL;
|
||||
PedConstraint *constraint;
|
||||
PedSector start, end;
|
||||
PedGeometry *range_start = NULL, *range_end = NULL;
|
||||
@@ -1959,22 +1959,39 @@ do_resize (PedDevice** dev)
|
||||
goto error_destroy_constraint;
|
||||
ped_partition_set_system (part, NULL);
|
||||
} else {
|
||||
+ int always_resize = getenv( "YAST_IS_RUNNING" ) != NULL;
|
||||
+ const char* fsname = "";
|
||||
+ if( always_resize )
|
||||
+ {
|
||||
+ PedFileSystemType* fst = ped_file_system_probe( &part->geom );
|
||||
+ if( fst )
|
||||
+ fsname = fst->name;
|
||||
+ }
|
||||
fs = ped_file_system_open (&part->geom);
|
||||
- if (!fs)
|
||||
+ if (!fs && (!always_resize || strncmp(fsname,"fat",3)==0) )
|
||||
goto error_destroy_disk;
|
||||
+ if (fs)
|
||||
constraint = constraint_intersect_and_destroy (
|
||||
ped_file_system_get_resize_constraint (fs),
|
||||
constraint_from_start_end (
|
||||
*dev, range_start, range_end));
|
||||
+ else
|
||||
+ {
|
||||
+ new_geom.start = part->geom.start;
|
||||
+ constraint = ped_constraint_exact(&new_geom);
|
||||
+ }
|
||||
if (!ped_disk_set_partition_geom (disk, part, constraint,
|
||||
new_geom.start, new_geom.end))
|
||||
goto error_close_fs;
|
||||
- if (!ped_file_system_resize (fs, &part->geom, g_timer))
|
||||
+ if(fs && (!always_resize || strncmp(fsname,"fat",3)==0))
|
||||
+ {
|
||||
+ if (!ped_file_system_resize (fs, &part->geom, g_timer) && !always_resize )
|
||||
goto error_close_fs;
|
||||
/* may have changed... eg fat16 -> fat32 */
|
||||
ped_partition_set_system (part, fs->type);
|
||||
ped_file_system_close (fs);
|
||||
}
|
||||
+ }
|
||||
|
||||
ped_disk_commit (disk);
|
||||
ped_constraint_destroy (constraint);
|
||||
@@ -1990,6 +2007,7 @@ do_resize (PedDevice** dev)
|
||||
return 1;
|
||||
|
||||
error_close_fs:
|
||||
+ if (fs)
|
||||
ped_file_system_close (fs);
|
||||
error_destroy_constraint:
|
||||
ped_constraint_destroy (constraint);
|
@ -1,7 +1,11 @@
|
||||
Index: parted-2.4/libparted/arch/linux.c
|
||||
---
|
||||
libparted/arch/linux.c | 45 ++++++++++++++++++++++++++++-----------------
|
||||
1 file changed, 28 insertions(+), 17 deletions(-)
|
||||
|
||||
Index: parted-3.1/libparted/arch/linux.c
|
||||
===================================================================
|
||||
--- parted-2.4.orig/libparted/arch/linux.c
|
||||
+++ parted-2.4/libparted/arch/linux.c
|
||||
--- parted-3.1.orig/libparted/arch/linux.c
|
||||
+++ parted-3.1/libparted/arch/linux.c
|
||||
@@ -33,6 +33,7 @@
|
||||
#include <stdio.h>
|
||||
#include <syscall.h>
|
||||
@ -10,7 +14,7 @@ Index: parted-2.4/libparted/arch/linux.c
|
||||
#include <stdbool.h>
|
||||
#include <dirent.h>
|
||||
#include <sys/ioctl.h>
|
||||
@@ -2770,29 +2771,39 @@ err:
|
||||
@@ -2858,29 +2859,39 @@ err:
|
||||
static int
|
||||
_dm_reread_part_table (PedDisk* disk)
|
||||
{
|
||||
|
@ -1,10 +1,14 @@
|
||||
Index: parted-2.4/libparted/arch/linux.c
|
||||
---
|
||||
libparted/arch/linux.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
Index: parted-3.1/libparted/arch/linux.c
|
||||
===================================================================
|
||||
--- parted-2.4.orig/libparted/arch/linux.c
|
||||
+++ parted-2.4/libparted/arch/linux.c
|
||||
@@ -2225,7 +2225,7 @@ _device_get_part_path (PedDevice *dev, i
|
||||
--- parted-3.1.orig/libparted/arch/linux.c
|
||||
+++ parted-3.1/libparted/arch/linux.c
|
||||
@@ -2243,7 +2243,7 @@ _device_get_part_path (PedDevice *dev, i
|
||||
|| dev->type == PED_DEVICE_CPQARRAY
|
||||
|| dev->type == PED_DEVICE_ATARAID
|
||||
|| dev->type == PED_DEVICE_DM
|
||||
|| isdigit (dev->path[path_len - 1])
|
||||
- ? "p" : "");
|
||||
+ ? "_part" : "");
|
||||
|
@ -2,11 +2,11 @@
|
||||
libparted/arch/linux.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
Index: parted-2.4/libparted/arch/linux.c
|
||||
Index: parted-3.1/libparted/arch/linux.c
|
||||
===================================================================
|
||||
--- parted-2.4.orig/libparted/arch/linux.c
|
||||
+++ parted-2.4/libparted/arch/linux.c
|
||||
@@ -2376,7 +2376,7 @@ _blkpg_add_partition (PedDisk* disk, con
|
||||
--- parted-3.1.orig/libparted/arch/linux.c
|
||||
+++ parted-3.1/libparted/arch/linux.c
|
||||
@@ -2370,7 +2370,7 @@ _blkpg_add_partition (PedDisk* disk, con
|
||||
linux_part.start = part->geom.start * disk->dev->sector_size;
|
||||
/* see fs/partitions/msdos.c:msdos_partition(): "leave room for LILO" */
|
||||
if (part->type & PED_PARTITION_EXTENDED)
|
||||
|
@ -1,13 +0,0 @@
|
||||
Index: libparted/fs/reiserfs/reiserfs.c
|
||||
===================================================================
|
||||
--- libparted/fs/reiserfs/reiserfs.c.orig 2010-07-08 13:33:05.000000000 +0200
|
||||
+++ libparted/fs/reiserfs/reiserfs.c 2010-07-08 13:33:10.000000000 +0200
|
||||
@@ -86,7 +86,7 @@ FCLASS int (FPTR libreiserfs_exception_t
|
||||
FCLASS int (FPTR libreiserfs_exception_option) (reiserfs_exception_t *);
|
||||
FCLASS char *(FPTR libreiserfs_exception_message) (reiserfs_exception_t *);
|
||||
FCLASS void (FPTR libreiserfs_exception_set_handler)
|
||||
- (int(FPTR)(reiserfs_exception_t *));
|
||||
+ (int(*)(reiserfs_exception_t *));
|
||||
|
||||
FCLASS void (FPTR dal_realize) (dal_t *);
|
||||
FCLASS size_t (FPTR dal_block_size) (dal_t *);
|
@ -1,38 +0,0 @@
|
||||
From 2147402b83b27a35011cad032d0519c4a0672280 Mon Sep 17 00:00:00 2001
|
||||
From: Jim Meyering <meyering@redhat.com>
|
||||
Date: Sat, 25 Jun 2011 08:49:58 +0200
|
||||
Subject: [PATCH] libparted: fix a bug in the nilfs2 probe function
|
||||
|
||||
* libparted/fs/nilfs2/nilfs2.c (nilfs2_probe): Reject this partition
|
||||
if we get a negative sb2 offset. Passing a negative offset to
|
||||
ped_geometry_read_alloc would evoke a failed assertion.
|
||||
Bug introduced by 2010-07-09 commit d463e7de.
|
||||
* NEWS: (Bug fixes): Mention it.
|
||||
Reported by Daniel Fandrich in
|
||||
http://thread.gmane.org/gmane.comp.gnu.parted.bugs/10466/focus=10472
|
||||
---
|
||||
NEWS | 3 +++
|
||||
libparted/fs/nilfs2/nilfs2.c | 5 +++--
|
||||
2 files changed, 6 insertions(+), 2 deletions(-)
|
||||
|
||||
Index: parted-2.4/libparted/fs/nilfs2/nilfs2.c
|
||||
===================================================================
|
||||
--- parted-2.4.orig/libparted/fs/nilfs2/nilfs2.c
|
||||
+++ parted-2.4/libparted/fs/nilfs2/nilfs2.c
|
||||
@@ -108,13 +108,14 @@ nilfs2_probe (PedGeometry* geom)
|
||||
struct nilfs2_super_block *sb = NULL;
|
||||
struct nilfs2_super_block *sb2 = NULL;
|
||||
PedSector length = geom->length;
|
||||
- PedSector sb2off;
|
||||
|
||||
/* ignore if sector size is not 512bytes for now */
|
||||
if (geom->dev->sector_size != PED_SECTOR_SIZE_DEFAULT)
|
||||
return NULL;
|
||||
|
||||
- sb2off = NILFS_SB2_OFFSET(length);
|
||||
+ PedSector sb2off = NILFS_SB2_OFFSET(length);
|
||||
+ if (sb2off <= 2)
|
||||
+ return NULL;
|
||||
|
||||
if (ped_geometry_read_alloc(geom, &sb_v, 2, 1))
|
||||
sb = sb_v;
|
14
hfs_fix.dif
14
hfs_fix.dif
@ -1,8 +1,12 @@
|
||||
Index: parted-2.3/libparted/labels/mac.c
|
||||
---
|
||||
libparted/labels/mac.c | 9 ++++++++-
|
||||
1 file changed, 8 insertions(+), 1 deletion(-)
|
||||
|
||||
Index: parted-3.1/libparted/labels/mac.c
|
||||
===================================================================
|
||||
--- parted-2.3.orig/libparted/labels/mac.c 2010-07-08 13:29:24.000000000 +0200
|
||||
+++ parted-2.3/libparted/labels/mac.c 2010-07-08 13:29:25.000000000 +0200
|
||||
@@ -469,7 +469,7 @@ _rawpart_is_void (MacRawPartition* raw_p
|
||||
--- parted-3.1.orig/libparted/labels/mac.c
|
||||
+++ parted-3.1/libparted/labels/mac.c
|
||||
@@ -468,7 +468,7 @@ _rawpart_is_void (MacRawPartition* raw_p
|
||||
return _rawpart_cmp_type (raw_part, "Apple_Void");
|
||||
}
|
||||
|
||||
@ -11,7 +15,7 @@ Index: parted-2.3/libparted/labels/mac.c
|
||||
* doesn't represent a partition at all. NOTE: some people make Apple_Free
|
||||
* partitions with MacOS, because they can't select another type. So, if the
|
||||
* name is anything other than "Extra" or "", it is treated as a "real"
|
||||
@@ -534,6 +534,13 @@ _rawpart_analyse (MacRawPartition* raw_p
|
||||
@@ -533,6 +533,13 @@ _rawpart_analyse (MacRawPartition* raw_p
|
||||
if (!part)
|
||||
goto error;
|
||||
|
||||
|
@ -2,11 +2,11 @@
|
||||
libparted/arch/linux.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
Index: parted-2.4/libparted/arch/linux.c
|
||||
Index: parted-3.1/libparted/arch/linux.c
|
||||
===================================================================
|
||||
--- parted-2.4.orig/libparted/arch/linux.c
|
||||
+++ parted-2.4/libparted/arch/linux.c
|
||||
@@ -2227,7 +2227,8 @@ _device_get_part_path (PedDevice *dev, i
|
||||
--- parted-3.1.orig/libparted/arch/linux.c
|
||||
+++ parted-3.1/libparted/arch/linux.c
|
||||
@@ -2240,7 +2240,8 @@ _device_get_part_path (PedDevice *dev, i
|
||||
(int) (path_len - 5), dev->path, num);
|
||||
} else {
|
||||
const char *p;
|
||||
|
18
libparted-ppc-prepboot-in-syncmbr.patch
Normal file
18
libparted-ppc-prepboot-in-syncmbr.patch
Normal file
@ -0,0 +1,18 @@
|
||||
---
|
||||
libparted/labels/gpt.c | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
Index: parted-3.1/libparted/labels/gpt.c
|
||||
===================================================================
|
||||
--- parted-3.1.orig/libparted/labels/gpt.c
|
||||
+++ parted-3.1/libparted/labels/gpt.c
|
||||
@@ -1181,6 +1181,9 @@ _part_to_ostype (PedPartition* part)
|
||||
if (strncmp (part->fs_type->name, "hfs", 3) == 0) return 0xaf;
|
||||
if (strstr (part->fs_type->name, "swap")) return 0x82;
|
||||
}
|
||||
+#ifdef __PPC__
|
||||
+ if (part->num == 1) return 0x41; /* PARTITION_PREP */
|
||||
+#endif
|
||||
return 0x83; // Everything else is Linux
|
||||
}
|
||||
|
@ -10,13 +10,14 @@
|
||||
# 3. call 'udevadm settle' before doing BLKPG_DEL_PARTITION ioctl()
|
||||
---
|
||||
libparted/arch/linux.c | 4 +++-
|
||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||
parted/parted.c | 28 +++++++++++++++++++++++++++-
|
||||
2 files changed, 30 insertions(+), 2 deletions(-)
|
||||
|
||||
Index: parted-2.3/libparted/arch/linux.c
|
||||
Index: parted-3.1/libparted/arch/linux.c
|
||||
===================================================================
|
||||
--- parted-2.3.orig/libparted/arch/linux.c
|
||||
+++ parted-2.3/libparted/arch/linux.c
|
||||
@@ -2460,10 +2460,12 @@ _disk_sync_part_table (PedDisk* disk)
|
||||
--- parted-3.1.orig/libparted/arch/linux.c
|
||||
+++ parted-3.1/libparted/arch/linux.c
|
||||
@@ -2585,10 +2585,12 @@ _disk_sync_part_table (PedDisk* disk)
|
||||
if (!errnums)
|
||||
goto cleanup;
|
||||
|
||||
@ -30,11 +31,11 @@ Index: parted-2.3/libparted/arch/linux.c
|
||||
unsigned int n_sleep = (max_sleep_seconds
|
||||
* 1000000 / sleep_microseconds);
|
||||
int i;
|
||||
Index: parted-2.3/parted/parted.c
|
||||
Index: parted-3.1/parted/parted.c
|
||||
===================================================================
|
||||
--- parted-2.3.orig/parted/parted.c
|
||||
+++ parted-2.3/parted/parted.c
|
||||
@@ -272,6 +272,32 @@ _disk_warn_loss (PedDisk* disk)
|
||||
--- parted-3.1.orig/parted/parted.c
|
||||
+++ parted-3.1/parted/parted.c
|
||||
@@ -258,6 +258,32 @@ _disk_warn_loss (PedDisk* disk)
|
||||
disk->dev->path) == PED_EXCEPTION_YES;
|
||||
}
|
||||
|
||||
@ -67,7 +68,7 @@ Index: parted-2.3/parted/parted.c
|
||||
/* This function changes "sector" to "new_sector" if the new value lies
|
||||
* within the required range.
|
||||
*/
|
||||
@@ -2200,7 +2226,7 @@ do_set (PedDevice** dev)
|
||||
@@ -1643,7 +1669,7 @@ do_set (PedDevice** dev)
|
||||
|
||||
if (!ped_partition_set_flag (part, flag, state))
|
||||
goto error_destroy_disk;
|
||||
|
@ -1,6 +1,12 @@
|
||||
--- configure.ac.orig
|
||||
+++ configure.ac
|
||||
@@ -178,7 +178,8 @@ AM_CPPFLAGS="$AM_CPPFLAGS -D_REENTRANT"
|
||||
---
|
||||
configure.ac | 5 +++--
|
||||
1 file changed, 3 insertions(+), 2 deletions(-)
|
||||
|
||||
Index: parted-3.1/configure.ac
|
||||
===================================================================
|
||||
--- parted-3.1.orig/configure.ac
|
||||
+++ parted-3.1/configure.ac
|
||||
@@ -164,7 +164,8 @@ AM_CPPFLAGS="$AM_CPPFLAGS -D_REENTRANT"
|
||||
|
||||
dnl Check for programs.
|
||||
AC_ISC_POSIX
|
||||
@ -10,7 +16,7 @@
|
||||
AC_PROG_GCC_TRADITIONAL
|
||||
AM_PROG_CC_C_O
|
||||
|
||||
@@ -384,7 +385,7 @@ dnl Check for termcap
|
||||
@@ -371,7 +372,7 @@ dnl Check for termcap
|
||||
if test "$with_readline" = yes; then
|
||||
OLD_LIBS="$LIBS"
|
||||
LIBS=""
|
||||
|
@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:965e5a661d3cb721c0aafc64f440c6c88699c8ec44bae09b7d3dc816df00ab14
|
||||
size 3177408
|
@ -1,17 +0,0 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v1.4.11 (GNU/Linux)
|
||||
|
||||
iQIcBAABCAAGBQJN0/ZsAAoJEH/Z/MsAC+7uOTAQAKniexcRs0Qh3j454i3HI6O+
|
||||
aVbcfKfb3BmPLNK97dL1gXoslagO/NEjTmV1SdMtyHp7wqQBnXmM88WudS7aHK85
|
||||
YKEDlkknUtttEG8WornCJCG40VX2Z4dvEYLekVxr7bR8ZM1KzTVKioihm71/9oYe
|
||||
eP3JsVREGQ8w62ovZeOx5aVcCXGUxMe6KPebf3XUWtxGj52hVf2Jpc3tA7B4+2IR
|
||||
mM514AUIMT5yrk2djcoAEmaRvwtQ5F94HPrYwz80META5DZ3ABRmCt5feAqdTgUU
|
||||
4YM11KiN2fFf4TWalN+ol8LyUyNOTcT7zScVeIw8Pt5L/7vnFmgwlh2mVUFtLz5b
|
||||
wKSIn02LD8d5az+dZGjJFU16CvvwimIxdLRdMIIer5gLdPPVPQcmxA88sinu7VAn
|
||||
8VywCCz8EF64Y+KsPDfRKV4Tx/8k+MVF33u/3yV9x2xEEKv3+4lX3w9JCCgZzKdv
|
||||
KwX6XpNYClRGoc6IeeNoyJvOnV8eh/2wBMywbXY9GQiqeLryLJ2r0JIHrVYtVqje
|
||||
dfoSMIKnl1cYi+kWdprdSfBzLoVxNGRly5zq2LGPl9NPIR5SCzd9iOw8ValBY7X4
|
||||
lqY5umyvGL09VHGRPJ5c70ygMvYg+hvRz7jbCzjtlx9bxu4ukXQtrHp7WeYG4OY0
|
||||
0NW0+mn/FTrphvKCs1Ri
|
||||
=mleT
|
||||
-----END PGP SIGNATURE-----
|
3
parted-3.1.tar.xz
Normal file
3
parted-3.1.tar.xz
Normal file
@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:5e9cc1f91eaf016e5033d85b9b893fd6d3ffaca532a48de1082df9b94225ca15
|
||||
size 1524344
|
17
parted-3.1.tar.xz.sig
Normal file
17
parted-3.1.tar.xz.sig
Normal file
@ -0,0 +1,17 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v1.4.12 (GNU/Linux)
|
||||
|
||||
iQIcBAABCAAGBQJPUQeUAAoJEH/Z/MsAC+7uwS0P/iplXKYgLCZ7PXhAy2QWSEgC
|
||||
yEDNUN2hdK5RqXPzmyzTEObflRRkVQV8nWLBg9r5jCXKBKl0OEiBDSd9jwbdUSwI
|
||||
6ueSsbrLLpwnQkqBsh7F9zwIJ2xDsPYmhOqxTbXpITn8fv9MAMPFm0+pGYgIPC4o
|
||||
JITcP+8ufjjQpdecv/EmiM+3rrcMxgVi7/F158uj+ih4mxl7L4APG2hIib+Xdd8x
|
||||
lqzVogAQoW6n5uoQo/F2zcGv/NPMH7LqwH435VEzc3FTEKQ4ArZ6o/hYasMALW2F
|
||||
iXyjxQKDPBmiXOkKwmhRCBQtFVk1rpy6JSw07ljL2sZlScnKvq3AA9ufomdlgtIR
|
||||
vBDRjkJeB1W12sk75eQRiP1RS3+TT1rpo9kvE4a1iZkMWrHPvaCDKM48MdN/Nvb6
|
||||
nLafTM2FsHPEZ9HJCmEY4LRH0zmTJQy8KW5XSHFJgEhk22Jk5S951uTkM1sEbvHL
|
||||
RRZHIGs/RZwetIUvFFEE87hZJ6OWO0XVStUnA+ik255XgN8Ik5o4K50hI3qU0/e3
|
||||
3faMq6MpBYfQn5z1SO99/TE70hjyi8Q5E+SpuF3qn4cfhYi3zn8e6OaGNLVOXcWU
|
||||
5/9WI5v9a5br/74RmIElsieetnMvlpbe9feAvsziQooNPe584qlQq7SXVegcXGNu
|
||||
MUrTB6SjxheBtLqH0PlX
|
||||
=0NA7
|
||||
-----END PGP SIGNATURE-----
|
@ -15,9 +15,11 @@ This adds support for the irst partition type flag. Sets the type to
|
||||
libparted/labels/gpt.c | 37 +++++++++++++++++++++++++++++++++++++
|
||||
5 files changed, 64 insertions(+), 3 deletions(-)
|
||||
|
||||
--- parted-2.4.orig/doc/C/parted.8
|
||||
+++ parted-2.4/doc/C/parted.8
|
||||
@@ -132,7 +132,7 @@ or an LVM logical volume if necessary.
|
||||
Index: parted-3.1/doc/C/parted.8
|
||||
===================================================================
|
||||
--- parted-3.1.orig/doc/C/parted.8
|
||||
+++ parted-3.1/doc/C/parted.8
|
||||
@@ -104,7 +104,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",
|
||||
@ -26,9 +28,29 @@ This adds support for the irst partition type flag. Sets the type to
|
||||
\fIstate\fP should be either "on" or "off".
|
||||
.TP
|
||||
.B unit \fIunit\fP
|
||||
--- parted-2.4.orig/libparted/disk.c
|
||||
+++ parted-2.4/libparted/disk.c
|
||||
@@ -2472,6 +2472,8 @@ ped_partition_flag_get_name (PedPartitio
|
||||
Index: parted-3.1/include/parted/disk.h
|
||||
===================================================================
|
||||
--- parted-3.1.orig/include/parted/disk.h
|
||||
+++ parted-3.1/include/parted/disk.h
|
||||
@@ -73,10 +73,11 @@ enum _PedPartitionFlag {
|
||||
PED_PARTITION_APPLE_TV_RECOVERY=13,
|
||||
PED_PARTITION_DIAG=14,
|
||||
PED_PARTITION_LEGACY_BOOT=15,
|
||||
- PED_PARTITION_TYPE=16
|
||||
+ PED_PARTITION_TYPE=16,
|
||||
+ PED_PARTITION_IRST=17
|
||||
};
|
||||
#define PED_PARTITION_FIRST_FLAG PED_PARTITION_BOOT
|
||||
-#define PED_PARTITION_LAST_FLAG PED_PARTITION_TYPE
|
||||
+#define PED_PARTITION_LAST_FLAG PED_PARTITION_IRST
|
||||
|
||||
enum _PedDiskTypeFeature {
|
||||
PED_DISK_TYPE_EXTENDED=1, /**< supports extended partitions */
|
||||
Index: parted-3.1/libparted/disk.c
|
||||
===================================================================
|
||||
--- parted-3.1.orig/libparted/disk.c
|
||||
+++ parted-3.1/libparted/disk.c
|
||||
@@ -2473,6 +2473,8 @@ ped_partition_flag_get_name (PedPartitio
|
||||
return N_("diag");
|
||||
case PED_PARTITION_LEGACY_BOOT:
|
||||
return N_("legacy_boot");
|
||||
@ -37,8 +59,10 @@ This adds support for the irst partition type flag. Sets the type to
|
||||
|
||||
default:
|
||||
ped_exception_throw (
|
||||
--- parted-2.4.orig/libparted/labels/dos.c
|
||||
+++ parted-2.4/libparted/labels/dos.c
|
||||
Index: parted-3.1/libparted/labels/dos.c
|
||||
===================================================================
|
||||
--- parted-3.1.orig/libparted/labels/dos.c
|
||||
+++ parted-3.1/libparted/labels/dos.c
|
||||
@@ -85,6 +85,7 @@ static const char MBR_BOOT_CODE[] = {
|
||||
#define PARTITION_LDM 0x42
|
||||
#define PARTITION_LINUX_SWAP 0x82
|
||||
@ -137,8 +161,10 @@ This adds support for the irst partition type flag. Sets the type to
|
||||
case PED_PARTITION_DIAG:
|
||||
return 1;
|
||||
|
||||
--- parted-2.4.orig/libparted/labels/gpt.c
|
||||
+++ parted-2.4/libparted/labels/gpt.c
|
||||
Index: parted-3.1/libparted/labels/gpt.c
|
||||
===================================================================
|
||||
--- parted-3.1.orig/libparted/labels/gpt.c
|
||||
+++ parted-3.1/libparted/labels/gpt.c
|
||||
@@ -142,6 +142,10 @@ typedef struct
|
||||
((efi_guid_t) { PED_CPU_TO_LE32 (0x5265636F), PED_CPU_TO_LE16 (0x7665), \
|
||||
PED_CPU_TO_LE16 (0x11AA), 0xaa, 0x11, \
|
||||
@ -158,7 +184,7 @@ This adds support for the irst partition type flag. Sets the type to
|
||||
} GPTPartitionData;
|
||||
|
||||
static PedDiskType gpt_disk_type;
|
||||
@@ -879,6 +884,7 @@ _parse_part_entry (PedDisk *disk, GuidPa
|
||||
@@ -883,6 +888,7 @@ _parse_part_entry (PedDisk *disk, GuidPa
|
||||
= gpt_part_data->hidden = gpt_part_data->msftres
|
||||
= gpt_part_data->msftrecv
|
||||
= gpt_part_data->legacy_boot
|
||||
@ -166,7 +192,7 @@ This adds support for the irst partition type flag. Sets the type to
|
||||
= gpt_part_data->bios_grub = gpt_part_data->atvrecv = 0;
|
||||
|
||||
if (pte->Attributes.RequiredToFunction & 0x1)
|
||||
@@ -902,6 +908,8 @@ _parse_part_entry (PedDisk *disk, GuidPa
|
||||
@@ -906,6 +912,8 @@ _parse_part_entry (PedDisk *disk, GuidPa
|
||||
gpt_part_data->msftrecv = 1;
|
||||
else if (!guid_cmp (gpt_part_data->type, PARTITION_APPLE_TV_RECOVERY_GUID))
|
||||
gpt_part_data->atvrecv = 1;
|
||||
@ -175,7 +201,7 @@ This adds support for the irst partition type flag. Sets the type to
|
||||
|
||||
return part;
|
||||
}
|
||||
@@ -1509,6 +1517,7 @@ gpt_partition_new (const PedDisk *disk,
|
||||
@@ -1518,6 +1526,7 @@ gpt_partition_new (const PedDisk *disk,
|
||||
gpt_part_data->msftrecv = 0;
|
||||
gpt_part_data->atvrecv = 0;
|
||||
gpt_part_data->legacy_boot = 0;
|
||||
@ -183,7 +209,7 @@ This adds support for the irst partition type flag. Sets the type to
|
||||
uuid_generate ((unsigned char *) &gpt_part_data->uuid);
|
||||
swap_uuid_and_efi_guid ((unsigned char *) (&gpt_part_data->uuid));
|
||||
memset (gpt_part_data->name, 0, sizeof gpt_part_data->name);
|
||||
@@ -1614,6 +1623,11 @@ gpt_partition_set_system (PedPartition *
|
||||
@@ -1621,6 +1630,11 @@ gpt_partition_set_system (PedPartition *
|
||||
gpt_part_data->type = PARTITION_APPLE_TV_RECOVERY_GUID;
|
||||
return 1;
|
||||
}
|
||||
@ -195,7 +221,7 @@ This adds support for the irst partition type flag. Sets the type to
|
||||
|
||||
if (fs_type)
|
||||
{
|
||||
@@ -1714,6 +1728,7 @@ gpt_partition_set_flag (PedPartition *pa
|
||||
@@ -1721,6 +1735,7 @@ gpt_partition_set_flag (PedPartition *pa
|
||||
= gpt_part_data->hp_service
|
||||
= gpt_part_data->msftres
|
||||
= gpt_part_data->msftrecv
|
||||
@ -203,7 +229,7 @@ This adds support for the irst partition type flag. Sets the type to
|
||||
= gpt_part_data->atvrecv = 0;
|
||||
return gpt_partition_set_system (part, part->fs_type);
|
||||
case PED_PARTITION_BIOS_GRUB:
|
||||
@@ -1725,6 +1740,7 @@ gpt_partition_set_flag (PedPartition *pa
|
||||
@@ -1732,6 +1747,7 @@ gpt_partition_set_flag (PedPartition *pa
|
||||
= gpt_part_data->hp_service
|
||||
= gpt_part_data->msftres
|
||||
= gpt_part_data->msftrecv
|
||||
@ -211,7 +237,7 @@ This adds support for the irst partition type flag. Sets the type to
|
||||
= gpt_part_data->atvrecv = 0;
|
||||
return gpt_partition_set_system (part, part->fs_type);
|
||||
case PED_PARTITION_RAID:
|
||||
@@ -1736,6 +1752,7 @@ gpt_partition_set_flag (PedPartition *pa
|
||||
@@ -1743,6 +1759,7 @@ gpt_partition_set_flag (PedPartition *pa
|
||||
= gpt_part_data->hp_service
|
||||
= gpt_part_data->msftres
|
||||
= gpt_part_data->msftrecv
|
||||
@ -219,7 +245,7 @@ This adds support for the irst partition type flag. Sets the type to
|
||||
= gpt_part_data->atvrecv = 0;
|
||||
return gpt_partition_set_system (part, part->fs_type);
|
||||
case PED_PARTITION_LVM:
|
||||
@@ -1747,6 +1764,7 @@ gpt_partition_set_flag (PedPartition *pa
|
||||
@@ -1754,6 +1771,7 @@ gpt_partition_set_flag (PedPartition *pa
|
||||
= gpt_part_data->hp_service
|
||||
= gpt_part_data->msftres
|
||||
= gpt_part_data->msftrecv
|
||||
@ -227,7 +253,7 @@ This adds support for the irst partition type flag. Sets the type to
|
||||
= gpt_part_data->atvrecv = 0;
|
||||
return gpt_partition_set_system (part, part->fs_type);
|
||||
case PED_PARTITION_HPSERVICE:
|
||||
@@ -1758,6 +1776,7 @@ gpt_partition_set_flag (PedPartition *pa
|
||||
@@ -1765,6 +1783,7 @@ gpt_partition_set_flag (PedPartition *pa
|
||||
= gpt_part_data->bios_grub
|
||||
= gpt_part_data->msftres
|
||||
= gpt_part_data->msftrecv
|
||||
@ -235,7 +261,7 @@ This adds support for the irst partition type flag. Sets the type to
|
||||
= gpt_part_data->atvrecv = 0;
|
||||
return gpt_partition_set_system (part, part->fs_type);
|
||||
case PED_PARTITION_MSFT_RESERVED:
|
||||
@@ -1769,6 +1788,7 @@ gpt_partition_set_flag (PedPartition *pa
|
||||
@@ -1776,6 +1795,7 @@ gpt_partition_set_flag (PedPartition *pa
|
||||
= gpt_part_data->bios_grub
|
||||
= gpt_part_data->hp_service
|
||||
= gpt_part_data->msftrecv
|
||||
@ -243,7 +269,7 @@ This adds support for the irst partition type flag. Sets the type to
|
||||
= gpt_part_data->atvrecv = 0;
|
||||
return gpt_partition_set_system (part, part->fs_type);
|
||||
case PED_PARTITION_DIAG:
|
||||
@@ -1780,6 +1800,7 @@ gpt_partition_set_flag (PedPartition *pa
|
||||
@@ -1787,6 +1807,7 @@ gpt_partition_set_flag (PedPartition *pa
|
||||
= gpt_part_data->bios_grub
|
||||
= gpt_part_data->hp_service
|
||||
= gpt_part_data->msftres
|
||||
@ -251,7 +277,7 @@ This adds support for the irst partition type flag. Sets the type to
|
||||
= gpt_part_data->atvrecv = 0;
|
||||
return gpt_partition_set_system (part, part->fs_type);
|
||||
case PED_PARTITION_APPLE_TV_RECOVERY:
|
||||
@@ -1791,8 +1812,21 @@ gpt_partition_set_flag (PedPartition *pa
|
||||
@@ -1798,8 +1819,21 @@ gpt_partition_set_flag (PedPartition *pa
|
||||
= gpt_part_data->bios_grub
|
||||
= gpt_part_data->hp_service
|
||||
= gpt_part_data->msftres
|
||||
@ -273,7 +299,7 @@ This adds support for the irst partition type flag. Sets the type to
|
||||
case PED_PARTITION_HIDDEN:
|
||||
gpt_part_data->hidden = state;
|
||||
return 1;
|
||||
@@ -1837,6 +1871,8 @@ gpt_partition_get_flag (const PedPartiti
|
||||
@@ -1844,6 +1878,8 @@ gpt_partition_get_flag (const PedPartiti
|
||||
return gpt_part_data->hidden;
|
||||
case PED_PARTITION_LEGACY_BOOT:
|
||||
return gpt_part_data->legacy_boot;
|
||||
@ -282,7 +308,7 @@ This adds support for the irst partition type flag. Sets the type to
|
||||
case PED_PARTITION_SWAP:
|
||||
case PED_PARTITION_LBA:
|
||||
case PED_PARTITION_ROOT:
|
||||
@@ -1862,6 +1898,7 @@ gpt_partition_is_flag_available (const P
|
||||
@@ -1869,6 +1905,7 @@ gpt_partition_is_flag_available (const P
|
||||
case PED_PARTITION_APPLE_TV_RECOVERY:
|
||||
case PED_PARTITION_HIDDEN:
|
||||
case PED_PARTITION_LEGACY_BOOT:
|
||||
@ -290,19 +316,3 @@ This adds support for the irst partition type flag. Sets the type to
|
||||
return 1;
|
||||
case PED_PARTITION_SWAP:
|
||||
case PED_PARTITION_ROOT:
|
||||
--- parted-2.4.orig/include/parted/disk.h
|
||||
+++ parted-2.4/include/parted/disk.h
|
||||
@@ -71,10 +71,11 @@ enum _PedPartitionFlag {
|
||||
PED_PARTITION_APPLE_TV_RECOVERY=13,
|
||||
PED_PARTITION_DIAG=14,
|
||||
PED_PARTITION_LEGACY_BOOT=15,
|
||||
- PED_PARTITION_TYPE=16
|
||||
+ PED_PARTITION_TYPE=16,
|
||||
+ PED_PARTITION_IRST=17
|
||||
};
|
||||
#define PED_PARTITION_FIRST_FLAG PED_PARTITION_BOOT
|
||||
-#define PED_PARTITION_LAST_FLAG PED_PARTITION_TYPE
|
||||
+#define PED_PARTITION_LAST_FLAG PED_PARTITION_IRST
|
||||
|
||||
enum _PedDiskTypeFeature {
|
||||
PED_DISK_TYPE_EXTENDED=1, /**< supports extended partitions */
|
||||
|
211
parted-GPT-add-support-for-PReP-GUID.patch
Normal file
211
parted-GPT-add-support-for-PReP-GUID.patch
Normal file
@ -0,0 +1,211 @@
|
||||
From d151cc20af79c89383ffacc89c1f646f831fc3e6 Mon Sep 17 00:00:00 2001
|
||||
From: Daniel Battaiola Kreling <dbkreling@br.ibm.com>
|
||||
Date: Mon, 7 Oct 2013 11:51:50 +0530
|
||||
Subject: [PATCH] GPT: add support for PReP GUID
|
||||
|
||||
PReP (PowerPC Reference Platform) boot partition is the first partition used in
|
||||
PowerPC platform for containing the bootable kernel or bootloader. The firmware
|
||||
searches for this partition and jumps to it for booting. So far no GUID was
|
||||
specified for this partition type and hence booting from GPT disk was not
|
||||
supported on this platform. A new GUID 9e1a2d38-c612-4316-aa26-8b49521e5a8b for
|
||||
PReP partition is proposed to be included in GPT.
|
||||
---
|
||||
NEWS | 7 +++++++
|
||||
doc/parted.texi | 2 +-
|
||||
libparted/labels/gpt.c | 38 ++++++++++++++++++++++++++++++++++++++
|
||||
3 files changed, 46 insertions(+), 1 deletion(-)
|
||||
|
||||
Index: parted-3.1/NEWS
|
||||
===================================================================
|
||||
--- parted-3.1.orig/NEWS
|
||||
+++ parted-3.1/NEWS
|
||||
@@ -1,5 +1,12 @@
|
||||
GNU parted NEWS -*- outline -*-
|
||||
|
||||
+* Noteworthy changes post release 3.1
|
||||
+
|
||||
+** New features
|
||||
+
|
||||
+ Add support for prep flag to GPT to select PowerPC Reference Platform
|
||||
+ boot partition type.
|
||||
+
|
||||
* Noteworthy changes in release 3.1 (2012-03-02) [stable]
|
||||
|
||||
** New features
|
||||
Index: parted-3.1/doc/parted.texi
|
||||
===================================================================
|
||||
--- parted-3.1.orig/doc/parted.texi
|
||||
+++ parted-3.1/doc/parted.texi
|
||||
@@ -822,7 +822,7 @@ physical volume.
|
||||
by the Linux/PA-RISC boot loader, palo.
|
||||
|
||||
@item PREP
|
||||
-(MS-DOS) - this flag can be enabled so that the partition can be used
|
||||
+(MS-DOS, GPT) - this flag can be enabled so that the partition can be used
|
||||
as a PReP boot partition on PowerPC PReP or IBM RS6K/CHRP hardware.
|
||||
|
||||
@item DIAG
|
||||
Index: parted-3.1/libparted/labels/gpt.c
|
||||
===================================================================
|
||||
--- parted-3.1.orig/libparted/labels/gpt.c
|
||||
+++ parted-3.1/libparted/labels/gpt.c
|
||||
@@ -142,6 +142,10 @@ typedef struct
|
||||
((efi_guid_t) { PED_CPU_TO_LE32 (0x5265636F), PED_CPU_TO_LE16 (0x7665), \
|
||||
PED_CPU_TO_LE16 (0x11AA), 0xaa, 0x11, \
|
||||
{ 0x00, 0x30, 0x65, 0x43, 0xEC, 0xAC }})
|
||||
+#define PARTITION_PREP_GUID \
|
||||
+ ((efi_guid_t) { PED_CPU_TO_LE32 (0x9e1a2d38), PED_CPU_TO_LE16 (0xc612), \
|
||||
+ PED_CPU_TO_LE16 (0x4316), 0xaa, 0x26, \
|
||||
+ { 0x8b, 0x49, 0x52, 0x1e, 0x5a, 0x8b }})
|
||||
#define PARTITION_IRST_GUID \
|
||||
((efi_guid_t) { PED_CPU_TO_LE32 (0xD3BFE2DE), PED_CPU_TO_LE16 (0x3DAF), \
|
||||
PED_CPU_TO_LE16 (0x11DF), 0xba, 0x40, \
|
||||
@@ -286,6 +290,7 @@ typedef struct _GPTPartitionData
|
||||
int atvrecv;
|
||||
int msftrecv;
|
||||
int legacy_boot;
|
||||
+ int prep;
|
||||
int irst;
|
||||
} GPTPartitionData;
|
||||
|
||||
@@ -888,6 +893,7 @@ _parse_part_entry (PedDisk *disk, GuidPa
|
||||
= gpt_part_data->hidden = gpt_part_data->msftres
|
||||
= gpt_part_data->msftrecv
|
||||
= gpt_part_data->legacy_boot
|
||||
+ = gpt_part_data->prep
|
||||
= gpt_part_data->irst
|
||||
= gpt_part_data->bios_grub = gpt_part_data->atvrecv = 0;
|
||||
|
||||
@@ -912,6 +918,8 @@ _parse_part_entry (PedDisk *disk, GuidPa
|
||||
gpt_part_data->msftrecv = 1;
|
||||
else if (!guid_cmp (gpt_part_data->type, PARTITION_APPLE_TV_RECOVERY_GUID))
|
||||
gpt_part_data->atvrecv = 1;
|
||||
+ else if (!guid_cmp (gpt_part_data->type, PARTITION_PREP_GUID))
|
||||
+ gpt_part_data->prep = 1;
|
||||
else if (!guid_cmp (gpt_part_data->type, PARTITION_IRST_GUID))
|
||||
gpt_part_data->irst = 1;
|
||||
|
||||
@@ -1526,6 +1534,7 @@ gpt_partition_new (const PedDisk *disk,
|
||||
gpt_part_data->msftrecv = 0;
|
||||
gpt_part_data->atvrecv = 0;
|
||||
gpt_part_data->legacy_boot = 0;
|
||||
+ gpt_part_data->prep = 0;
|
||||
gpt_part_data->irst = 0;
|
||||
uuid_generate ((unsigned char *) &gpt_part_data->uuid);
|
||||
swap_uuid_and_efi_guid ((unsigned char *) (&gpt_part_data->uuid));
|
||||
@@ -1600,6 +1609,11 @@ gpt_partition_set_system (PedPartition *
|
||||
gpt_part_data->type = PARTITION_RAID_GUID;
|
||||
return 1;
|
||||
}
|
||||
+ if (gpt_part_data->prep)
|
||||
+ {
|
||||
+ gpt_part_data->type = PARTITION_PREP_GUID;
|
||||
+ return 1;
|
||||
+ }
|
||||
if (gpt_part_data->boot)
|
||||
{
|
||||
gpt_part_data->type = PARTITION_SYSTEM_GUID;
|
||||
@@ -1735,6 +1749,7 @@ gpt_partition_set_flag (PedPartition *pa
|
||||
= gpt_part_data->hp_service
|
||||
= gpt_part_data->msftres
|
||||
= gpt_part_data->msftrecv
|
||||
+ = gpt_part_data->prep
|
||||
= gpt_part_data->irst
|
||||
= gpt_part_data->atvrecv = 0;
|
||||
return gpt_partition_set_system (part, part->fs_type);
|
||||
@@ -1747,6 +1762,7 @@ gpt_partition_set_flag (PedPartition *pa
|
||||
= gpt_part_data->hp_service
|
||||
= gpt_part_data->msftres
|
||||
= gpt_part_data->msftrecv
|
||||
+ = gpt_part_data->prep
|
||||
= gpt_part_data->irst
|
||||
= gpt_part_data->atvrecv = 0;
|
||||
return gpt_partition_set_system (part, part->fs_type);
|
||||
@@ -1759,6 +1775,7 @@ gpt_partition_set_flag (PedPartition *pa
|
||||
= gpt_part_data->hp_service
|
||||
= gpt_part_data->msftres
|
||||
= gpt_part_data->msftrecv
|
||||
+ = gpt_part_data->prep
|
||||
= gpt_part_data->irst
|
||||
= gpt_part_data->atvrecv = 0;
|
||||
return gpt_partition_set_system (part, part->fs_type);
|
||||
@@ -1771,6 +1788,7 @@ gpt_partition_set_flag (PedPartition *pa
|
||||
= gpt_part_data->hp_service
|
||||
= gpt_part_data->msftres
|
||||
= gpt_part_data->msftrecv
|
||||
+ = gpt_part_data->prep
|
||||
= gpt_part_data->irst
|
||||
= gpt_part_data->atvrecv = 0;
|
||||
return gpt_partition_set_system (part, part->fs_type);
|
||||
@@ -1783,6 +1801,7 @@ gpt_partition_set_flag (PedPartition *pa
|
||||
= gpt_part_data->bios_grub
|
||||
= gpt_part_data->msftres
|
||||
= gpt_part_data->msftrecv
|
||||
+ = gpt_part_data->prep
|
||||
= gpt_part_data->irst
|
||||
= gpt_part_data->atvrecv = 0;
|
||||
return gpt_partition_set_system (part, part->fs_type);
|
||||
@@ -1795,6 +1814,7 @@ gpt_partition_set_flag (PedPartition *pa
|
||||
= gpt_part_data->bios_grub
|
||||
= gpt_part_data->hp_service
|
||||
= gpt_part_data->msftrecv
|
||||
+ = gpt_part_data->prep
|
||||
= gpt_part_data->irst
|
||||
= gpt_part_data->atvrecv = 0;
|
||||
return gpt_partition_set_system (part, part->fs_type);
|
||||
@@ -1807,6 +1827,7 @@ gpt_partition_set_flag (PedPartition *pa
|
||||
= gpt_part_data->bios_grub
|
||||
= gpt_part_data->hp_service
|
||||
= gpt_part_data->msftres
|
||||
+ = gpt_part_data->prep
|
||||
= gpt_part_data->irst
|
||||
= gpt_part_data->atvrecv = 0;
|
||||
return gpt_partition_set_system (part, part->fs_type);
|
||||
@@ -1819,9 +1840,22 @@ gpt_partition_set_flag (PedPartition *pa
|
||||
= gpt_part_data->bios_grub
|
||||
= gpt_part_data->hp_service
|
||||
= gpt_part_data->msftres
|
||||
+ = gpt_part_data->prep
|
||||
= gpt_part_data->irst
|
||||
= gpt_part_data->msftrecv = 0;
|
||||
return gpt_partition_set_system (part, part->fs_type);
|
||||
+ case PED_PARTITION_PREP:
|
||||
+ gpt_part_data->prep = state;
|
||||
+ if (state)
|
||||
+ gpt_part_data->boot
|
||||
+ = gpt_part_data->raid
|
||||
+ = gpt_part_data->lvm
|
||||
+ = gpt_part_data->bios_grub
|
||||
+ = gpt_part_data->hp_service
|
||||
+ = gpt_part_data->msftres
|
||||
+ = gpt_part_data->msftrecv
|
||||
+ = gpt_part_data->atvrecv = 0;
|
||||
+ return gpt_partition_set_system (part, part->fs_type);
|
||||
case PED_PARTITION_IRST:
|
||||
gpt_part_data->irst = state;
|
||||
if (state)
|
||||
@@ -1832,6 +1866,7 @@ gpt_partition_set_flag (PedPartition *pa
|
||||
= gpt_part_data->hp_service
|
||||
= gpt_part_data->msftres
|
||||
= gpt_part_data->msftrecv
|
||||
+ = gpt_part_data->prep
|
||||
= gpt_part_data->atvrecv = 0;
|
||||
return gpt_partition_set_system (part, part->fs_type);
|
||||
case PED_PARTITION_HIDDEN:
|
||||
@@ -1878,6 +1913,8 @@ gpt_partition_get_flag (const PedPartiti
|
||||
return gpt_part_data->hidden;
|
||||
case PED_PARTITION_LEGACY_BOOT:
|
||||
return gpt_part_data->legacy_boot;
|
||||
+ case PED_PARTITION_PREP:
|
||||
+ return gpt_part_data->prep;
|
||||
case PED_PARTITION_IRST:
|
||||
return gpt_part_data->irst;
|
||||
case PED_PARTITION_SWAP:
|
||||
@@ -1906,6 +1943,7 @@ gpt_partition_is_flag_available (const P
|
||||
case PED_PARTITION_HIDDEN:
|
||||
case PED_PARTITION_LEGACY_BOOT:
|
||||
case PED_PARTITION_IRST:
|
||||
+ case PED_PARTITION_PREP:
|
||||
return 1;
|
||||
case PED_PARTITION_SWAP:
|
||||
case PED_PARTITION_ROOT:
|
@ -11,62 +11,28 @@ Date: Thu Feb 12 15:15:30 2009 +0100
|
||||
Signed-off-by: Luca Bruno <lucab@debian.org>
|
||||
|
||||
---
|
||||
configure.ac | 4 -
|
||||
libparted/fs/Makefile.am | 3 -
|
||||
libparted/fs/btrfs/Makefile.am | 8 ++
|
||||
libparted/fs/btrfs/btrfs.c | 110 +++++++++++++++++++++++++++++++++++++++++
|
||||
libparted/libparted.c | 4 +
|
||||
5 files changed, 126 insertions(+), 3 deletions(-)
|
||||
libparted/fs/Makefile.am | 1
|
||||
libparted/fs/btrfs/btrfs.c | 96 ++
|
||||
libparted/libparted.c | 4
|
||||
4 files changed, 1933 insertions(+)
|
||||
|
||||
Index: parted-2.4/configure.ac
|
||||
Index: parted-3.1/libparted/fs/Makefile.am
|
||||
===================================================================
|
||||
@@ -626,6 +625,7 @@ libparted/Makefile
|
||||
libparted/labels/Makefile
|
||||
libparted/fs/Makefile
|
||||
libparted/fs/amiga/Makefile
|
||||
+libparted/fs/btrfs/Makefile
|
||||
libparted/fs/ext2/Makefile
|
||||
libparted/fs/fat/Makefile
|
||||
libparted/fs/hfs/Makefile
|
||||
Index: parted-2.4/libparted/fs/Makefile.am
|
||||
===================================================================
|
||||
--- parted-2.4.orig/libparted/fs/Makefile.am
|
||||
+++ parted-2.4/libparted/fs/Makefile.am
|
||||
@@ -4,7 +4,7 @@
|
||||
# This file may be modified and/or distributed without restriction.
|
||||
|
||||
SUBDIRS = amiga ext2 ufs fat ntfs hfs linux_swap xfs jfs reiserfs \
|
||||
- nilfs2 # bfs
|
||||
+ nilfs2 btrfs # bfs
|
||||
|
||||
partedincludedir = -I$(top_srcdir)/include
|
||||
noinst_LTLIBRARIES = libfs.la
|
||||
@@ -25,6 +25,7 @@ libfs_la_LIBADD = $(UUID_LIBS) \
|
||||
xfs/libxfs.la \
|
||||
jfs/libjfs.la \
|
||||
reiserfs/libreiserfs.la \
|
||||
+ btrfs/libbtrfs.la \
|
||||
nilfs2/libnilfs2.la
|
||||
# bfs/libbfs.la
|
||||
|
||||
Index: parted-2.4/libparted/fs/btrfs/Makefile.am
|
||||
--- parted-3.1.orig/libparted/fs/Makefile.am
|
||||
+++ parted-3.1/libparted/fs/Makefile.am
|
||||
@@ -25,6 +25,7 @@ libfs_la_SOURCES = \
|
||||
amiga/asfs.c \
|
||||
amiga/asfs.h \
|
||||
amiga/a-interface.c \
|
||||
+ btrfs/btrfs.c \
|
||||
ext2/ext2.h \
|
||||
ext2/ext2_fs.h \
|
||||
ext2/interface.c \
|
||||
Index: parted-3.1/libparted/fs/btrfs/btrfs.c
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ parted-2.4/libparted/fs/btrfs/Makefile.am
|
||||
@@ -0,0 +1,8 @@
|
||||
+partedincludedir = -I$(top_srcdir)/include
|
||||
+
|
||||
+noinst_LTLIBRARIES = libbtrfs.la
|
||||
+libbtrfs_la_SOURCES = btrfs.c
|
||||
+
|
||||
+INCLUDES = $(partedincludedir) $(INTLINCS)
|
||||
+
|
||||
+MAINTAINERCLEANFILES = Makefile.in
|
||||
Index: parted-2.4/libparted/fs/btrfs/btrfs.c
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ parted-2.4/libparted/fs/btrfs/btrfs.c
|
||||
@@ -0,0 +1,110 @@
|
||||
+++ parted-3.1/libparted/fs/btrfs/btrfs.c
|
||||
@@ -0,0 +1,96 @@
|
||||
+/*
|
||||
+ libparted - a library for manipulating disk partitions
|
||||
+ Copyright (C) 2009 Free Software Foundation, Inc.
|
||||
@ -141,20 +107,6 @@ Index: parted-2.4/libparted/fs/btrfs/btrfs.c
|
||||
+
|
||||
+static PedFileSystemOps btrfs_ops = {
|
||||
+ probe: btrfs_probe,
|
||||
+#ifndef DISCOVER_ONLY
|
||||
+ clobber: btrfs_clobber,
|
||||
+#else
|
||||
+ clobber: NULL,
|
||||
+#endif
|
||||
+ open: NULL,
|
||||
+ create: NULL,
|
||||
+ close: NULL,
|
||||
+ check: NULL,
|
||||
+ copy: NULL,
|
||||
+ resize: NULL,
|
||||
+ get_create_constraint: NULL,
|
||||
+ get_resize_constraint: NULL,
|
||||
+ get_copy_constraint: NULL
|
||||
+};
|
||||
+
|
||||
+static PedFileSystemType btrfs_type = {
|
||||
@ -177,11 +129,11 @@ Index: parted-2.4/libparted/fs/btrfs/btrfs.c
|
||||
+}
|
||||
+
|
||||
+
|
||||
Index: parted-2.4/libparted/libparted.c
|
||||
Index: parted-3.1/libparted/libparted.c
|
||||
===================================================================
|
||||
--- parted-2.4.orig/libparted/libparted.c
|
||||
+++ parted-2.4/libparted/libparted.c
|
||||
@@ -110,6 +110,7 @@ extern void ped_file_system_hfs_init (vo
|
||||
--- parted-3.1.orig/libparted/libparted.c
|
||||
+++ parted-3.1/libparted/libparted.c
|
||||
@@ -109,6 +109,7 @@ extern void ped_file_system_hfs_init (vo
|
||||
extern void ped_file_system_fat_init (void);
|
||||
extern void ped_file_system_ext2_init (void);
|
||||
extern void ped_file_system_nilfs2_init (void);
|
||||
@ -189,15 +141,15 @@ Index: parted-2.4/libparted/libparted.c
|
||||
|
||||
static void
|
||||
init_file_system_types ()
|
||||
@@ -125,6 +126,7 @@ init_file_system_types ()
|
||||
@@ -124,6 +125,7 @@ init_file_system_types ()
|
||||
ped_file_system_fat_init ();
|
||||
ped_file_system_ext2_init ();
|
||||
ped_file_system_nilfs2_init ();
|
||||
+ ped_file_system_btrfs_init ();
|
||||
}
|
||||
#endif /* ENABLE_FS */
|
||||
|
||||
@@ -191,6 +193,7 @@ extern void ped_file_system_ntfs_done (v
|
||||
extern void ped_disk_aix_done ();
|
||||
@@ -185,6 +187,7 @@ extern void ped_file_system_ntfs_done (v
|
||||
extern void ped_file_system_reiserfs_done (void);
|
||||
extern void ped_file_system_ufs_done (void);
|
||||
extern void ped_file_system_xfs_done (void);
|
||||
@ -205,11 +157,11 @@ Index: parted-2.4/libparted/libparted.c
|
||||
extern void ped_file_system_amiga_done (void);
|
||||
|
||||
static void
|
||||
@@ -206,6 +209,7 @@ done_file_system_types ()
|
||||
@@ -200,6 +203,7 @@ done_file_system_types ()
|
||||
ped_file_system_reiserfs_done ();
|
||||
ped_file_system_ufs_done ();
|
||||
ped_file_system_xfs_done ();
|
||||
+ ped_file_system_btrfs_done ();
|
||||
ped_file_system_amiga_done ();
|
||||
}
|
||||
#endif /* ENABLE_FS */
|
||||
|
||||
|
@ -1,8 +1,12 @@
|
||||
Index: parted-2.4/libparted/arch/linux.c
|
||||
---
|
||||
libparted/arch/linux.c | 7 +++++--
|
||||
1 file changed, 5 insertions(+), 2 deletions(-)
|
||||
|
||||
Index: parted-3.1/libparted/arch/linux.c
|
||||
===================================================================
|
||||
--- parted-2.4.orig/libparted/arch/linux.c
|
||||
+++ parted-2.4/libparted/arch/linux.c
|
||||
@@ -2226,8 +2226,11 @@ _device_get_part_path (PedDevice *dev, i
|
||||
--- parted-3.1.orig/libparted/arch/linux.c
|
||||
+++ parted-3.1/libparted/arch/linux.c
|
||||
@@ -2239,8 +2239,11 @@ _device_get_part_path (PedDevice *dev, i
|
||||
result = zasprintf ("%.*s/part%d",
|
||||
(int) (path_len - 5), dev->path, num);
|
||||
} else {
|
||||
@ -14,5 +18,5 @@ Index: parted-2.4/libparted/arch/linux.c
|
||||
+ else
|
||||
+ p = (dev->type == PED_DEVICE_DAC960
|
||||
|| dev->type == PED_DEVICE_ATARAID
|
||||
|| dev->type == PED_DEVICE_DM
|
||||
|| isdigit (dev->path[path_len - 1])
|
||||
? "_part" : "");
|
||||
|
@ -1,33 +0,0 @@
|
||||
---
|
||||
libparted/labels/gpt.c | 8 ++++----
|
||||
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
Index: parted-2.4/libparted/labels/gpt.c
|
||||
===================================================================
|
||||
--- parted-2.4.orig/libparted/labels/gpt.c
|
||||
+++ parted-2.4/libparted/labels/gpt.c
|
||||
@@ -1256,9 +1256,9 @@ _write_pmbr (const PedDisk *disk)
|
||||
pmbr->PartitionRecord[pmbr_id].EndSector = 0xFF;
|
||||
pmbr->PartitionRecord[pmbr_id].EndTrack = 0xFF;
|
||||
pmbr->PartitionRecord[pmbr_id].StartingLBA = PED_CPU_TO_LE32(1);
|
||||
- pmbr->PartitionRecord[pmbr_id].SizeInLBA = 1;
|
||||
+ pmbr->PartitionRecord[pmbr_id].SizeInLBA = PED_CPU_TO_LE32 (1);
|
||||
if (esp)
|
||||
- pmbr->PartitionRecord[pmbr_id].SizeInLBA = esp->geom.end - 1;
|
||||
+ pmbr->PartitionRecord[pmbr_id].SizeInLBA = PED_CPU_TO_LE32 (esp->geom.end - 1);
|
||||
|
||||
/* sync the first 3 GPT entries to MBR primary partitions */
|
||||
for (i=first_entry; i < last_entry; i++) {
|
||||
@@ -1284,10 +1284,10 @@ _write_pmbr (const PedDisk *disk)
|
||||
pmbr->PartitionRecord[i].EndHead = 0xFE;
|
||||
pmbr->PartitionRecord[i].EndSector = 0xFF;
|
||||
pmbr->PartitionRecord[i].EndTrack = 0xFF;
|
||||
- pmbr->PartitionRecord[i].StartingLBA = _part_32bitmax(part->geom.start);
|
||||
+ pmbr->PartitionRecord[i].StartingLBA = PED_CPU_TO_LE32 (_part_32bitmax(part->geom.start));
|
||||
if(((GPTPartitionData*)part->disk_specific)->boot)
|
||||
pmbr->PartitionRecord[i].BootIndicator = 0x80;
|
||||
- pmbr->PartitionRecord[i].SizeInLBA = _part_32bitmax(part->geom.end - part->geom.start + 1);
|
||||
+ pmbr->PartitionRecord[i].SizeInLBA = PED_CPU_TO_LE32 (_part_32bitmax(part->geom.end - part->geom.start + 1));
|
||||
}
|
||||
}
|
||||
int write_ok = ped_device_write (dev, pmbr, GPT_PMBR_LBA,
|
@ -1,29 +1,142 @@
|
||||
---
|
||||
libparted/labels/gpt.c | 109 ++++++++++++++++++++++++++++++++++++++++++++++++-
|
||||
1 file changed, 107 insertions(+), 2 deletions(-)
|
||||
libparted/labels/gpt.c | 239 ++++++++++++++++++++++++++++++++++++++++++++++++-
|
||||
1 file changed, 235 insertions(+), 4 deletions(-)
|
||||
|
||||
Index: libparted/labels/gpt.c
|
||||
Index: parted-3.1/libparted/labels/gpt.c
|
||||
===================================================================
|
||||
--- libparted/labels/gpt.c.orig
|
||||
+++ libparted/labels/gpt.c
|
||||
@@ -51,6 +51,11 @@
|
||||
# define _(String) (String)
|
||||
#endif /* ENABLE_NLS */
|
||||
--- parted-3.1.orig/libparted/labels/gpt.c
|
||||
+++ parted-3.1/libparted/labels/gpt.c
|
||||
@@ -285,6 +285,7 @@ typedef struct _GPTPartitionData
|
||||
} GPTPartitionData;
|
||||
|
||||
+/* IA64 always has a properly working EFI implementation */
|
||||
+#ifndef __ia64__
|
||||
+#define GPT_SYNC_MBR
|
||||
+#endif
|
||||
static PedDiskType gpt_disk_type;
|
||||
+static PedDiskType gpt_sync_mbr_disk_type;
|
||||
|
||||
static inline uint32_t
|
||||
pth_get_size (const PedDevice *dev)
|
||||
@@ -453,8 +454,50 @@ _pmbr_is_valid (const LegacyMBR_t *mbr)
|
||||
return 0;
|
||||
}
|
||||
|
||||
+/* checks if device has a hybrid protective MBR partition table
|
||||
+ *
|
||||
+ * If the 1st partition has type 0xEE that spans the entire
|
||||
+ * size of the disk from sector 1 to the last sector
|
||||
+ * (or 2 TiB, whichever is smaller), we consider it 'normal' GPT.
|
||||
+ * Otherwise it is synced GPT with hybridized pMBR.
|
||||
+ */
|
||||
+static inline int
|
||||
+_has_hybrid_pmbr (const PedDevice *dev)
|
||||
+{
|
||||
+ int has_hybrid_pmbr = 1;
|
||||
+
|
||||
#define EFI_PMBR_OSTYPE_EFI 0xEE
|
||||
#define MSDOS_MBR_SIGNATURE 0xaa55
|
||||
+ PED_ASSERT (dev != NULL);
|
||||
+
|
||||
+ void *label;
|
||||
+ if (!ptt_read_sector (dev, 0, &label))
|
||||
+ return 0;
|
||||
+
|
||||
+ LegacyMBR_t mbr;
|
||||
+ memcpy(&mbr, label, sizeof(mbr));
|
||||
+
|
||||
+ if (mbr.Signature != PED_CPU_TO_LE16 (MSDOS_MBR_SIGNATURE)) {
|
||||
+ free(label);
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ uint32_t efi_gpt_expected_size;
|
||||
+ if ((dev->length - 1ULL) > 0xFFFFFFFFULL)
|
||||
+ efi_gpt_expected_size = 0xFFFFFFFF;
|
||||
+ else
|
||||
+ efi_gpt_expected_size = dev->length - 1UL;
|
||||
+
|
||||
+ if ((mbr.PartitionRecord[0].OSType == EFI_PMBR_OSTYPE_EFI) &&
|
||||
+ (mbr.PartitionRecord[0].StartingLBA == PED_CPU_TO_LE32(1)) &&
|
||||
+ (mbr.PartitionRecord[0].SizeInLBA == PED_CPU_TO_LE32(efi_gpt_expected_size)))
|
||||
+ /* pMBR is not hybrid */
|
||||
+ has_hybrid_pmbr = 0;
|
||||
+
|
||||
+ free(label);
|
||||
+ return has_hybrid_pmbr;
|
||||
+}
|
||||
+
|
||||
static int
|
||||
-gpt_probe (const PedDevice *dev)
|
||||
+_gpt_probe_generic(const PedDevice *dev)
|
||||
{
|
||||
GuidPartitionTableHeader_t *gpt = NULL;
|
||||
int gpt_sig_found = 0;
|
||||
@@ -507,6 +550,19 @@ gpt_probe (const PedDevice *dev)
|
||||
return ok;
|
||||
}
|
||||
|
||||
@@ -1072,11 +1077,60 @@ error:
|
||||
+static int
|
||||
+gpt_probe (const PedDevice *dev)
|
||||
+{
|
||||
+ return _gpt_probe_generic(dev) && !_has_hybrid_pmbr(dev);
|
||||
+}
|
||||
+
|
||||
+
|
||||
+static int
|
||||
+gpt_sync_mbr_probe (const PedDevice *dev)
|
||||
+{
|
||||
+ return _gpt_probe_generic(dev) && _has_hybrid_pmbr(dev);
|
||||
+}
|
||||
+
|
||||
static PedDisk *
|
||||
gpt_alloc (const PedDevice *dev)
|
||||
{
|
||||
@@ -544,6 +600,36 @@ error:
|
||||
}
|
||||
|
||||
static PedDisk *
|
||||
+gpt_sync_mbr_alloc (const PedDevice *dev)
|
||||
+{
|
||||
+ PedDisk *disk;
|
||||
+ GPTDiskData *gpt_disk_data;
|
||||
+ PedSector data_start, data_end;
|
||||
+
|
||||
+ disk = _ped_disk_alloc ((PedDevice *) dev, &gpt_sync_mbr_disk_type);
|
||||
+ if (!disk)
|
||||
+ goto error;
|
||||
+ disk->disk_specific = gpt_disk_data = ped_malloc (sizeof (GPTDiskData));
|
||||
+ if (!disk->disk_specific)
|
||||
+ goto error_free_disk;
|
||||
+
|
||||
+ data_start = 2 + GPT_DEFAULT_PARTITION_ENTRY_ARRAY_SIZE / dev->sector_size;
|
||||
+ data_end = dev->length - 2
|
||||
+ - GPT_DEFAULT_PARTITION_ENTRY_ARRAY_SIZE / dev->sector_size;
|
||||
+ ped_geometry_init (&gpt_disk_data->data_area, dev, data_start,
|
||||
+ data_end - data_start + 1);
|
||||
+ gpt_disk_data->entry_count = GPT_DEFAULT_PARTITION_ENTRIES;
|
||||
+ uuid_generate ((unsigned char *) &gpt_disk_data->uuid);
|
||||
+ swap_uuid_and_efi_guid ((unsigned char *) (&gpt_disk_data->uuid));
|
||||
+ return disk;
|
||||
+
|
||||
+error_free_disk:
|
||||
+ free (disk);
|
||||
+error:
|
||||
+ return NULL;
|
||||
+}
|
||||
+
|
||||
+static PedDisk *
|
||||
gpt_duplicate (const PedDisk *disk)
|
||||
{
|
||||
PedDisk *new_disk;
|
||||
@@ -920,7 +1006,7 @@ gpt_read (PedDisk *disk)
|
||||
|
||||
/* motivation: let the user decide about the pmbr... during
|
||||
ped_disk_probe(), they probably didn't get a choice... */
|
||||
- if (!gpt_probe (disk->dev))
|
||||
+ if (!gpt_probe (disk->dev) && !gpt_sync_mbr_probe(disk->dev))
|
||||
goto error;
|
||||
|
||||
GuidPartitionTableHeader_t *gpt = NULL;
|
||||
@@ -1077,11 +1163,59 @@ error:
|
||||
return 0;
|
||||
}
|
||||
|
||||
+
|
||||
+#ifdef GPT_SYNC_MBR
|
||||
+static inline unsigned char
|
||||
+_part_to_ostype (PedPartition* part)
|
||||
+{
|
||||
@ -61,7 +174,6 @@ Index: libparted/labels/gpt.c
|
||||
+ else
|
||||
+ return (uint32_t)in;
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
+
|
||||
#ifndef DISCOVER_ONLY
|
||||
@ -72,33 +184,29 @@ Index: libparted/labels/gpt.c
|
||||
{
|
||||
+ PedDevice * dev = disk->dev;
|
||||
+
|
||||
+#ifdef GPT_SYNC_MBR
|
||||
+ /* need sync GPT -> hybrid pMBR ? */
|
||||
+ int sync_pmbr = !strcmp(disk->type->name, "gpt_sync_mbr") ? 1 : 0;
|
||||
+
|
||||
+ int i, pmbr_id, first_entry = 0, last_entry = 3;
|
||||
+ PedPartition *part = NULL, *esp;
|
||||
+#endif
|
||||
+
|
||||
/* The UEFI spec is not clear about what to do with the following
|
||||
elements of the Protective MBR (pmbr): BootCode (0-440B),
|
||||
UniqueMBRSignature (440B-444B) and Unknown (444B-446B).
|
||||
@@ -1086,10 +1140,13 @@ _write_pmbr (PedDevice *dev)
|
||||
return 0;
|
||||
LegacyMBR_t *pmbr = s0;
|
||||
|
||||
+#ifndef GPT_SYNC_MBR
|
||||
/* Zero out the legacy partitions. */
|
||||
@@ -1095,6 +1229,8 @@ _write_pmbr (PedDevice *dev)
|
||||
memset (pmbr->PartitionRecord, 0, sizeof pmbr->PartitionRecord);
|
||||
+#endif
|
||||
|
||||
pmbr->Signature = PED_CPU_TO_LE16 (MSDOS_MBR_SIGNATURE);
|
||||
+#ifndef GPT_SYNC_MBR
|
||||
+
|
||||
+ if (!sync_pmbr) {
|
||||
pmbr->PartitionRecord[0].OSType = EFI_PMBR_OSTYPE_EFI;
|
||||
pmbr->PartitionRecord[0].StartSector = 1;
|
||||
pmbr->PartitionRecord[0].EndHead = 0xFE;
|
||||
@@ -1100,6 +1157,53 @@ _write_pmbr (PedDevice *dev)
|
||||
@@ -1105,7 +1241,60 @@ _write_pmbr (PedDevice *dev)
|
||||
pmbr->PartitionRecord[0].SizeInLBA = PED_CPU_TO_LE32 (0xFFFFFFFF);
|
||||
else
|
||||
pmbr->PartitionRecord[0].SizeInLBA = PED_CPU_TO_LE32 (dev->length - 1UL);
|
||||
+#else
|
||||
+ } else {
|
||||
+ /* Search for an EFI System Partition */
|
||||
+ esp = _find_first_part(disk);
|
||||
+ if (!esp || !esp->fs_type || strncmp (esp->fs_type->name, "fat", 3) != 0)
|
||||
@ -118,9 +226,9 @@ Index: libparted/labels/gpt.c
|
||||
+ pmbr->PartitionRecord[pmbr_id].EndSector = 0xFF;
|
||||
+ pmbr->PartitionRecord[pmbr_id].EndTrack = 0xFF;
|
||||
+ pmbr->PartitionRecord[pmbr_id].StartingLBA = PED_CPU_TO_LE32(1);
|
||||
+ pmbr->PartitionRecord[pmbr_id].SizeInLBA = 1;
|
||||
+ pmbr->PartitionRecord[pmbr_id].SizeInLBA = PED_CPU_TO_LE32 (1);
|
||||
+ if (esp)
|
||||
+ pmbr->PartitionRecord[pmbr_id].SizeInLBA = esp->geom.end - 1;
|
||||
+ pmbr->PartitionRecord[pmbr_id].SizeInLBA = PED_CPU_TO_LE32 (esp->geom.end - 1);
|
||||
+
|
||||
+ /* sync the first 3 GPT entries to MBR primary partitions */
|
||||
+ for (i=first_entry; i < last_entry; i++) {
|
||||
@ -132,6 +240,13 @@ Index: libparted/labels/gpt.c
|
||||
+ i--;
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
+ /* partition can not be represented by dos label - don't sync it */
|
||||
+ if (part->geom.start > 0xFFFFFFFF ||
|
||||
+ (part->geom.end - part->geom.start + 1) > 0xFFFFFFFF) {
|
||||
+ continue;
|
||||
+ }
|
||||
|
||||
+ pmbr->PartitionRecord[i].OSType = _part_to_ostype(part);
|
||||
+ pmbr->PartitionRecord[i].StartHead = 0xFE;
|
||||
+ pmbr->PartitionRecord[i].StartSector = 0xFF;
|
||||
@ -139,17 +254,17 @@ Index: libparted/labels/gpt.c
|
||||
+ pmbr->PartitionRecord[i].EndHead = 0xFE;
|
||||
+ pmbr->PartitionRecord[i].EndSector = 0xFF;
|
||||
+ pmbr->PartitionRecord[i].EndTrack = 0xFF;
|
||||
+ pmbr->PartitionRecord[i].StartingLBA = _part_32bitmax(part->geom.start);
|
||||
+ pmbr->PartitionRecord[i].StartingLBA = PED_CPU_TO_LE32 (_part_32bitmax(part->geom.start));
|
||||
+ if(((GPTPartitionData*)part->disk_specific)->boot)
|
||||
+ pmbr->PartitionRecord[i].BootIndicator = 0x80;
|
||||
+ pmbr->PartitionRecord[i].SizeInLBA = _part_32bitmax(part->geom.end - part->geom.start + 1);
|
||||
+ pmbr->PartitionRecord[i].SizeInLBA = PED_CPU_TO_LE32 (_part_32bitmax(part->geom.end - part->geom.start + 1));
|
||||
+ }
|
||||
+ }
|
||||
+#endif
|
||||
|
||||
int write_ok = ped_device_write (dev, pmbr, GPT_PMBR_LBA,
|
||||
GPT_PMBR_SECTORS);
|
||||
@@ -1216,7 +1320,7 @@ gpt_write (const PedDisk *disk)
|
||||
ptes_crc = efi_crc32 (ptes, ptes_size);
|
||||
free (s0);
|
||||
@@ -1225,7 +1414,7 @@ gpt_write (const PedDisk *disk)
|
||||
ptes_crc = efi_crc32 (ptes, ptes_bytes);
|
||||
|
||||
/* Write protective MBR */
|
||||
- if (!_write_pmbr (disk->dev))
|
||||
@ -157,3 +272,69 @@ Index: libparted/labels/gpt.c
|
||||
goto error_free_ptes;
|
||||
|
||||
/* Write PTH and PTEs */
|
||||
@@ -1802,6 +1991,38 @@ static PedDiskOps gpt_disk_ops =
|
||||
PT_op_function_initializers (gpt)
|
||||
};
|
||||
|
||||
+static PedDiskOps gpt_sync_mbr_disk_ops =
|
||||
+{
|
||||
+ clobber: NULL,
|
||||
+ write: NULL_IF_DISCOVER_ONLY (gpt_write),
|
||||
+
|
||||
+ partition_set_name: gpt_partition_set_name,
|
||||
+ partition_get_name: gpt_partition_get_name,
|
||||
+
|
||||
+ /* probe function redefined */
|
||||
+ probe: gpt_sync_mbr_probe,
|
||||
+ /* alloc function redefined */
|
||||
+ alloc: gpt_sync_mbr_alloc,
|
||||
+ duplicate: gpt_duplicate,
|
||||
+ free: gpt_free,
|
||||
+ read: gpt_read,
|
||||
+ partition_new: gpt_partition_new,
|
||||
+ partition_duplicate: gpt_partition_duplicate,
|
||||
+ partition_set_flag: gpt_partition_set_flag,
|
||||
+ partition_get_flag: gpt_partition_get_flag,
|
||||
+ partition_set_system: gpt_partition_set_system,
|
||||
+ partition_is_flag_available: gpt_partition_is_flag_available,
|
||||
+ partition_align: gpt_partition_align,
|
||||
+ partition_destroy: gpt_partition_destroy,
|
||||
+ partition_enumerate: gpt_partition_enumerate,
|
||||
+ alloc_metadata: gpt_alloc_metadata,
|
||||
+ get_max_primary_partition_count: gpt_get_max_primary_partition_count,
|
||||
+ get_max_supported_partition_count: gpt_get_max_supported_partition_count,
|
||||
+ partition_check: gpt_partition_check,
|
||||
+ max_length: gpt_partition_max_length,
|
||||
+ max_start_sector: gpt_partition_max_start_sector
|
||||
+};
|
||||
+
|
||||
static PedDiskType gpt_disk_type =
|
||||
{
|
||||
next: NULL,
|
||||
@@ -1810,16 +2031,26 @@ static PedDiskType gpt_disk_type =
|
||||
features: PED_DISK_TYPE_PARTITION_NAME
|
||||
};
|
||||
|
||||
+static PedDiskType gpt_sync_mbr_disk_type =
|
||||
+{
|
||||
+ next: NULL,
|
||||
+ name: "gpt_sync_mbr",
|
||||
+ ops: &gpt_sync_mbr_disk_ops,
|
||||
+ features: PED_DISK_TYPE_PARTITION_NAME
|
||||
+};
|
||||
+
|
||||
void
|
||||
ped_disk_gpt_init ()
|
||||
{
|
||||
ped_disk_type_register (&gpt_disk_type);
|
||||
+ ped_disk_type_register (&gpt_sync_mbr_disk_type);
|
||||
}
|
||||
|
||||
void
|
||||
ped_disk_gpt_done ()
|
||||
{
|
||||
ped_disk_type_unregister (&gpt_disk_type);
|
||||
+ ped_disk_type_unregister (&gpt_sync_mbr_disk_type);
|
||||
}
|
||||
|
||||
verify (sizeof (GuidPartitionEntryAttributes_t) == 8);
|
||||
|
@ -1,287 +0,0 @@
|
||||
Index: parted-2.4/libparted/labels/gpt.c
|
||||
===================================================================
|
||||
--- parted-2.4.orig/libparted/labels/gpt.c
|
||||
+++ parted-2.4/libparted/labels/gpt.c
|
||||
@@ -51,11 +51,6 @@
|
||||
# define _(String) (String)
|
||||
#endif /* ENABLE_NLS */
|
||||
|
||||
-/* IA64 always has a properly working EFI implementation */
|
||||
-#ifndef __ia64__
|
||||
-#define GPT_SYNC_MBR
|
||||
-#endif
|
||||
-
|
||||
#define EFI_PMBR_OSTYPE_EFI 0xEE
|
||||
#define MSDOS_MBR_SIGNATURE 0xaa55
|
||||
|
||||
@@ -290,6 +285,7 @@ typedef struct _GPTPartitionData
|
||||
} GPTPartitionData;
|
||||
|
||||
static PedDiskType gpt_disk_type;
|
||||
+static PedDiskType gpt_sync_mbr_disk_type;
|
||||
|
||||
static inline uint32_t
|
||||
pth_get_size (const PedDevice *dev)
|
||||
@@ -458,8 +454,50 @@ _pmbr_is_valid (const LegacyMBR_t *mbr)
|
||||
return 0;
|
||||
}
|
||||
|
||||
+/* checks if device has a hybrid protective MBR partition table
|
||||
+ *
|
||||
+ * If the 1st partition has type 0xEE that spans the entire
|
||||
+ * size of the disk from sector 1 to the last sector
|
||||
+ * (or 2 TiB, whichever is smaller), we consider it 'normal' GPT.
|
||||
+ * Otherwise it is synced GPT with hybridized pMBR.
|
||||
+ */
|
||||
+static inline int
|
||||
+_has_hybrid_pmbr (const PedDevice *dev)
|
||||
+{
|
||||
+ int has_hybrid_pmbr = 1;
|
||||
+
|
||||
+ PED_ASSERT (dev != NULL);
|
||||
+
|
||||
+ void *label;
|
||||
+ if (!ptt_read_sector (dev, 0, &label))
|
||||
+ return 0;
|
||||
+
|
||||
+ LegacyMBR_t mbr;
|
||||
+ memcpy(&mbr, label, sizeof(mbr));
|
||||
+
|
||||
+ if (mbr.Signature != PED_CPU_TO_LE16 (MSDOS_MBR_SIGNATURE)) {
|
||||
+ free(label);
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ uint32_t efi_gpt_expected_size;
|
||||
+ if ((dev->length - 1ULL) > 0xFFFFFFFFULL)
|
||||
+ efi_gpt_expected_size = 0xFFFFFFFF;
|
||||
+ else
|
||||
+ efi_gpt_expected_size = dev->length - 1UL;
|
||||
+
|
||||
+ if ((mbr.PartitionRecord[0].OSType == EFI_PMBR_OSTYPE_EFI) &&
|
||||
+ (mbr.PartitionRecord[0].StartingLBA == PED_CPU_TO_LE32(1)) &&
|
||||
+ (mbr.PartitionRecord[0].SizeInLBA == PED_CPU_TO_LE32(efi_gpt_expected_size)))
|
||||
+ /* pMBR is not hybrid */
|
||||
+ has_hybrid_pmbr = 0;
|
||||
+
|
||||
+ free(label);
|
||||
+ return has_hybrid_pmbr;
|
||||
+}
|
||||
+
|
||||
static int
|
||||
-gpt_probe (const PedDevice *dev)
|
||||
+_gpt_probe_generic(const PedDevice *dev)
|
||||
{
|
||||
GuidPartitionTableHeader_t *gpt = NULL;
|
||||
int gpt_sig_found = 0;
|
||||
@@ -512,6 +550,19 @@ gpt_probe (const PedDevice *dev)
|
||||
return ok;
|
||||
}
|
||||
|
||||
+static int
|
||||
+gpt_probe (const PedDevice *dev)
|
||||
+{
|
||||
+ return _gpt_probe_generic(dev) && !_has_hybrid_pmbr(dev);
|
||||
+}
|
||||
+
|
||||
+
|
||||
+static int
|
||||
+gpt_sync_mbr_probe (const PedDevice *dev)
|
||||
+{
|
||||
+ return _gpt_probe_generic(dev) && _has_hybrid_pmbr(dev);
|
||||
+}
|
||||
+
|
||||
static PedDisk *
|
||||
gpt_alloc (const PedDevice *dev)
|
||||
{
|
||||
@@ -543,6 +594,36 @@ error:
|
||||
}
|
||||
|
||||
static PedDisk *
|
||||
+gpt_sync_mbr_alloc (const PedDevice *dev)
|
||||
+{
|
||||
+ PedDisk *disk;
|
||||
+ GPTDiskData *gpt_disk_data;
|
||||
+ PedSector data_start, data_end;
|
||||
+
|
||||
+ disk = _ped_disk_alloc ((PedDevice *) dev, &gpt_sync_mbr_disk_type);
|
||||
+ if (!disk)
|
||||
+ goto error;
|
||||
+ disk->disk_specific = gpt_disk_data = ped_malloc (sizeof (GPTDiskData));
|
||||
+ if (!disk->disk_specific)
|
||||
+ goto error_free_disk;
|
||||
+
|
||||
+ data_start = 2 + GPT_DEFAULT_PARTITION_ENTRY_ARRAY_SIZE / dev->sector_size;
|
||||
+ data_end = dev->length - 2
|
||||
+ - GPT_DEFAULT_PARTITION_ENTRY_ARRAY_SIZE / dev->sector_size;
|
||||
+ ped_geometry_init (&gpt_disk_data->data_area, dev, data_start,
|
||||
+ data_end - data_start + 1);
|
||||
+ gpt_disk_data->entry_count = GPT_DEFAULT_PARTITION_ENTRIES;
|
||||
+ uuid_generate ((unsigned char *) &gpt_disk_data->uuid);
|
||||
+ swap_uuid_and_efi_guid ((unsigned char *) (&gpt_disk_data->uuid));
|
||||
+ return disk;
|
||||
+
|
||||
+error_free_disk:
|
||||
+ free (disk);
|
||||
+error:
|
||||
+ return NULL;
|
||||
+}
|
||||
+
|
||||
+static PedDisk *
|
||||
gpt_duplicate (const PedDisk *disk)
|
||||
{
|
||||
PedDisk *new_disk;
|
||||
@@ -920,7 +1001,7 @@ gpt_read (PedDisk *disk)
|
||||
|
||||
/* motivation: let the user decide about the pmbr... during
|
||||
ped_disk_probe(), they probably didn't get a choice... */
|
||||
- if (!gpt_probe (disk->dev))
|
||||
+ if (!gpt_probe (disk->dev) && !gpt_sync_mbr_probe(disk->dev))
|
||||
goto error;
|
||||
|
||||
GuidPartitionTableHeader_t *gpt = NULL;
|
||||
@@ -1078,7 +1159,6 @@ error:
|
||||
}
|
||||
|
||||
|
||||
-#ifdef GPT_SYNC_MBR
|
||||
static inline unsigned char
|
||||
_part_to_ostype (PedPartition* part)
|
||||
{
|
||||
@@ -1116,7 +1196,6 @@ _part_32bitmax (uint64_t in)
|
||||
else
|
||||
return (uint32_t)in;
|
||||
}
|
||||
-#endif
|
||||
|
||||
|
||||
#ifndef DISCOVER_ONLY
|
||||
@@ -1126,10 +1205,11 @@ _write_pmbr (const PedDisk *disk)
|
||||
{
|
||||
PedDevice * dev = disk->dev;
|
||||
|
||||
-#ifdef GPT_SYNC_MBR
|
||||
+ /* need sync GPT -> hybrid pMBR ? */
|
||||
+ int sync_pmbr = !strcmp(disk->type->name, "gpt_sync_mbr") ? 1 : 0;
|
||||
+
|
||||
int i, pmbr_id, first_entry = 0, last_entry = 3;
|
||||
PedPartition *part = NULL, *esp;
|
||||
-#endif
|
||||
|
||||
/* The UEFI spec is not clear about what to do with the following
|
||||
elements of the Protective MBR (pmbr): BootCode (0-440B),
|
||||
@@ -1140,13 +1220,12 @@ _write_pmbr (const PedDisk *disk)
|
||||
return 0;
|
||||
LegacyMBR_t *pmbr = s0;
|
||||
|
||||
-#ifndef GPT_SYNC_MBR
|
||||
/* Zero out the legacy partitions. */
|
||||
memset (pmbr->PartitionRecord, 0, sizeof pmbr->PartitionRecord);
|
||||
-#endif
|
||||
|
||||
pmbr->Signature = PED_CPU_TO_LE16 (MSDOS_MBR_SIGNATURE);
|
||||
-#ifndef GPT_SYNC_MBR
|
||||
+
|
||||
+ if (!sync_pmbr) {
|
||||
pmbr->PartitionRecord[0].OSType = EFI_PMBR_OSTYPE_EFI;
|
||||
pmbr->PartitionRecord[0].StartSector = 1;
|
||||
pmbr->PartitionRecord[0].EndHead = 0xFE;
|
||||
@@ -1157,7 +1236,7 @@ _write_pmbr (const PedDisk *disk)
|
||||
pmbr->PartitionRecord[0].SizeInLBA = PED_CPU_TO_LE32 (0xFFFFFFFF);
|
||||
else
|
||||
pmbr->PartitionRecord[0].SizeInLBA = PED_CPU_TO_LE32 (dev->length - 1UL);
|
||||
-#else
|
||||
+ } else {
|
||||
/* Search for an EFI System Partition */
|
||||
esp = _find_first_part(disk);
|
||||
if (!esp || !esp->fs_type || strncmp (esp->fs_type->name, "fat", 3) != 0)
|
||||
@@ -1191,6 +1270,13 @@ _write_pmbr (const PedDisk *disk)
|
||||
i--;
|
||||
continue;
|
||||
}
|
||||
+
|
||||
+ /* partition can not be represented by dos label - don't sync it */
|
||||
+ if (part->geom.start > 0xFFFFFFFF ||
|
||||
+ (part->geom.end - part->geom.start + 1) > 0xFFFFFFFF) {
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
pmbr->PartitionRecord[i].OSType = _part_to_ostype(part);
|
||||
pmbr->PartitionRecord[i].StartHead = 0xFE;
|
||||
pmbr->PartitionRecord[i].StartSector = 0xFF;
|
||||
@@ -1203,8 +1289,7 @@ _write_pmbr (const PedDisk *disk)
|
||||
pmbr->PartitionRecord[i].BootIndicator = 0x80;
|
||||
pmbr->PartitionRecord[i].SizeInLBA = _part_32bitmax(part->geom.end - part->geom.start + 1);
|
||||
}
|
||||
-#endif
|
||||
-
|
||||
+ }
|
||||
int write_ok = ped_device_write (dev, pmbr, GPT_PMBR_LBA,
|
||||
GPT_PMBR_SECTORS);
|
||||
free (s0);
|
||||
@@ -1902,6 +1987,38 @@ static PedDiskOps gpt_disk_ops =
|
||||
PT_op_function_initializers (gpt)
|
||||
};
|
||||
|
||||
+static PedDiskOps gpt_sync_mbr_disk_ops =
|
||||
+{
|
||||
+ clobber: NULL,
|
||||
+ write: NULL_IF_DISCOVER_ONLY (gpt_write),
|
||||
+
|
||||
+ partition_set_name: gpt_partition_set_name,
|
||||
+ partition_get_name: gpt_partition_get_name,
|
||||
+
|
||||
+ /* probe function redefined */
|
||||
+ probe: gpt_sync_mbr_probe,
|
||||
+ /* alloc function redefined */
|
||||
+ alloc: gpt_sync_mbr_alloc,
|
||||
+ duplicate: gpt_duplicate,
|
||||
+ free: gpt_free,
|
||||
+ read: gpt_read,
|
||||
+ partition_new: gpt_partition_new,
|
||||
+ partition_duplicate: gpt_partition_duplicate,
|
||||
+ partition_set_flag: gpt_partition_set_flag,
|
||||
+ partition_get_flag: gpt_partition_get_flag,
|
||||
+ partition_set_system: gpt_partition_set_system,
|
||||
+ partition_is_flag_available: gpt_partition_is_flag_available,
|
||||
+ partition_align: gpt_partition_align,
|
||||
+ partition_destroy: gpt_partition_destroy,
|
||||
+ partition_enumerate: gpt_partition_enumerate,
|
||||
+ alloc_metadata: gpt_alloc_metadata,
|
||||
+ get_max_primary_partition_count: gpt_get_max_primary_partition_count,
|
||||
+ get_max_supported_partition_count: gpt_get_max_supported_partition_count,
|
||||
+ partition_check: gpt_partition_check,
|
||||
+ max_length: gpt_partition_max_length,
|
||||
+ max_start_sector: gpt_partition_max_start_sector
|
||||
+};
|
||||
+
|
||||
static PedDiskType gpt_disk_type =
|
||||
{
|
||||
next: NULL,
|
||||
@@ -1910,16 +2027,26 @@ static PedDiskType gpt_disk_type =
|
||||
features: PED_DISK_TYPE_PARTITION_NAME
|
||||
};
|
||||
|
||||
+static PedDiskType gpt_sync_mbr_disk_type =
|
||||
+{
|
||||
+ next: NULL,
|
||||
+ name: "gpt_sync_mbr",
|
||||
+ ops: &gpt_sync_mbr_disk_ops,
|
||||
+ features: PED_DISK_TYPE_PARTITION_NAME
|
||||
+};
|
||||
+
|
||||
void
|
||||
ped_disk_gpt_init ()
|
||||
{
|
||||
ped_disk_type_register (&gpt_disk_type);
|
||||
+ ped_disk_type_register (&gpt_sync_mbr_disk_type);
|
||||
}
|
||||
|
||||
void
|
||||
ped_disk_gpt_done ()
|
||||
{
|
||||
ped_disk_type_unregister (&gpt_disk_type);
|
||||
+ ped_disk_type_unregister (&gpt_sync_mbr_disk_type);
|
||||
}
|
||||
|
||||
verify (sizeof (GuidPartitionEntryAttributes_t) == 8);
|
@ -1,157 +0,0 @@
|
||||
Index: parted-2.4/NEWS
|
||||
===================================================================
|
||||
--- parted-2.4.orig/NEWS
|
||||
+++ parted-2.4/NEWS
|
||||
@@ -2,6 +2,10 @@ GNU parted NEWS
|
||||
|
||||
* Noteworthy changes in release 2.4 (2011-05-18) [stable]
|
||||
|
||||
+** New features
|
||||
+
|
||||
+ parted has improved support for partitionable loopback devices
|
||||
+
|
||||
** Bug fixes
|
||||
|
||||
parted no longer allows the modification of certain in-use partitions.
|
||||
Index: parted-2.4/include/parted/device.h
|
||||
===================================================================
|
||||
--- parted-2.4.orig/include/parted/device.h
|
||||
+++ parted-2.4/include/parted/device.h
|
||||
@@ -48,7 +48,8 @@ typedef enum {
|
||||
PED_DEVICE_SDMMC = 14,
|
||||
PED_DEVICE_VIRTBLK = 15,
|
||||
PED_DEVICE_AOE = 16,
|
||||
- PED_DEVICE_MD = 17
|
||||
+ PED_DEVICE_MD = 17,
|
||||
+ PED_DEVICE_LOOP = 18
|
||||
} PedDeviceType;
|
||||
|
||||
typedef struct _PedDevice PedDevice;
|
||||
Index: parted-2.4/libparted/arch/linux.c
|
||||
===================================================================
|
||||
--- parted-2.4.orig/libparted/arch/linux.c
|
||||
+++ parted-2.4/libparted/arch/linux.c
|
||||
@@ -586,7 +586,7 @@ _device_probe_type (PedDevice* dev)
|
||||
} else if (_is_virtblk_major(dev_major)) {
|
||||
dev->type = PED_DEVICE_VIRTBLK;
|
||||
} else if (dev_major == LOOP_MAJOR) {
|
||||
- dev->type = PED_DEVICE_FILE;
|
||||
+ dev->type = PED_DEVICE_LOOP;
|
||||
} else if (dev_major == MD_MAJOR) {
|
||||
dev->type = PED_DEVICE_MD;
|
||||
} else {
|
||||
@@ -1376,6 +1376,11 @@ linux_new (const char* path)
|
||||
goto error_free_arch_specific;
|
||||
break;
|
||||
|
||||
+ case PED_DEVICE_LOOP:
|
||||
+ if (!init_generic (dev, _("Loopback device")))
|
||||
+ goto error_free_arch_specific;
|
||||
+ break;
|
||||
+
|
||||
case PED_DEVICE_DM:
|
||||
{
|
||||
char* type;
|
||||
@@ -2411,6 +2416,61 @@ _blkpg_remove_partition (PedDisk* disk,
|
||||
BLKPG_DEL_PARTITION);
|
||||
}
|
||||
|
||||
+/* Read the integer from /sys/block/DEV_BASE/ENTRY and set *VAL
|
||||
+ to that value, where DEV_BASE is the last component of DEV->path.
|
||||
+ Upon success, return true. Otherwise, return false. */
|
||||
+static bool
|
||||
+_sysfs_int_entry_from_dev(PedDevice const* dev, const char *entry, int *val)
|
||||
+{
|
||||
+ char path[128];
|
||||
+ int r = snprintf(path, sizeof(path), "/sys/block/%s/%s",
|
||||
+ last_component(dev->path), entry);
|
||||
+ if (r < 0 || r >= sizeof(path))
|
||||
+ return false;
|
||||
+
|
||||
+ FILE *fp = fopen(path, "r");
|
||||
+ if (!fp)
|
||||
+ return false;
|
||||
+
|
||||
+ bool ok = fscanf(fp, "%d", val) == 1;
|
||||
+ fclose(fp);
|
||||
+
|
||||
+ return ok;
|
||||
+}
|
||||
+
|
||||
+/* Return the maximum number of partitions that the loopback device can hold.
|
||||
+ First, check the loop-module-exported max_part parameter (since linux-3.0).
|
||||
+ If that is not available, fall back to checking ext_range, which seems to
|
||||
+ have (for some reason) different semantics compared to other devices;
|
||||
+ specifically, ext_range <= 1 means that the loopback device does
|
||||
+ not support partitions. */
|
||||
+static unsigned int
|
||||
+_loop_get_partition_range(PedDevice const* dev)
|
||||
+{
|
||||
+ int max_part;
|
||||
+ bool ok = false;
|
||||
+
|
||||
+ /* max_part module param is exported since kernel 3.0 */
|
||||
+ FILE *fp = fopen("/sys/module/loop/parameters/max_part", "r");
|
||||
+ if (fp) {
|
||||
+ ok = fscanf(fp, "%d", &max_part) == 1;
|
||||
+ fclose(fp);
|
||||
+ }
|
||||
+
|
||||
+ if (ok)
|
||||
+ return max_part > 0 ? max_part : 0;
|
||||
+
|
||||
+ /*
|
||||
+ * max_part is not exported - check ext_range;
|
||||
+ * device supports partitions if ext_range > 1
|
||||
+ */
|
||||
+ int range;
|
||||
+ ok = _sysfs_int_entry_from_dev(dev, "range", &range);
|
||||
+
|
||||
+ return ok && range > 1 ? range : 0;
|
||||
+}
|
||||
+
|
||||
+
|
||||
/*
|
||||
* The number of partitions that a device can have depends on the kernel.
|
||||
* If we don't find this value in /sys/block/DEV/ext_range, we will use our own
|
||||
@@ -2419,22 +2479,12 @@ _blkpg_remove_partition (PedDisk* disk,
|
||||
static unsigned int
|
||||
_device_get_partition_range(PedDevice* dev)
|
||||
{
|
||||
- int range, r;
|
||||
- char path[128];
|
||||
- FILE* fp;
|
||||
- bool ok;
|
||||
-
|
||||
- r = snprintf(path, sizeof(path), "/sys/block/%s/ext_range",
|
||||
- last_component(dev->path));
|
||||
- if (r < 0 || r >= sizeof(path))
|
||||
- return MAX_NUM_PARTS;
|
||||
+ /* loop handling is special */
|
||||
+ if (dev->type == PED_DEVICE_LOOP)
|
||||
+ return _loop_get_partition_range(dev);
|
||||
|
||||
- fp = fopen(path, "r");
|
||||
- if (!fp)
|
||||
- return MAX_NUM_PARTS;
|
||||
-
|
||||
- ok = fscanf(fp, "%d", &range) == 1;
|
||||
- fclose(fp);
|
||||
+ int range;
|
||||
+ bool ok = _sysfs_int_entry_from_dev(dev, "ext_range", &range);
|
||||
|
||||
/* (range <= 0) is none sense.*/
|
||||
return ok && range > 0 ? range : MAX_NUM_PARTS;
|
||||
Index: parted-2.4/parted/parted.c
|
||||
===================================================================
|
||||
--- parted-2.4.orig/parted/parted.c
|
||||
+++ parted-2.4/parted/parted.c
|
||||
@@ -1464,7 +1464,7 @@ _print_disk_info (const PedDevice *dev,
|
||||
"cpqarray", "file", "ataraid", "i2o",
|
||||
"ubd", "dasd", "viodasd", "sx8", "dm",
|
||||
"xvd", "sd/mmc", "virtblk", "aoe",
|
||||
- "md"};
|
||||
+ "md", "loopback"};
|
||||
|
||||
char* start = ped_unit_format (dev, 0);
|
||||
PedUnit default_unit = ped_unit_get_default ();
|
141
parted-mac.patch
141
parted-mac.patch
@ -1,7 +1,51 @@
|
||||
Index: parted-2.4/libparted/disk.c
|
||||
---
|
||||
include/parted/disk.h | 9 +++++++--
|
||||
libparted/disk.c | 33 +++++++++++++++++++++++++++++++++
|
||||
libparted/labels/mac.c | 34 +++++++++++++++++++++++++++++++++-
|
||||
parted/parted.c | 12 ++++++++++++
|
||||
4 files changed, 85 insertions(+), 3 deletions(-)
|
||||
|
||||
Index: parted-3.1/include/parted/disk.h
|
||||
===================================================================
|
||||
--- parted-2.4.orig/libparted/disk.c
|
||||
+++ parted-2.4/libparted/disk.c
|
||||
--- parted-3.1.orig/include/parted/disk.h
|
||||
+++ parted-3.1/include/parted/disk.h
|
||||
@@ -80,10 +80,11 @@ enum _PedPartitionFlag {
|
||||
|
||||
enum _PedDiskTypeFeature {
|
||||
PED_DISK_TYPE_EXTENDED=1, /**< supports extended partitions */
|
||||
- PED_DISK_TYPE_PARTITION_NAME=2 /**< supports partition names */
|
||||
+ PED_DISK_TYPE_PARTITION_NAME=2, /**< supports partition names */
|
||||
+ PED_DISK_TYPE_SYSTEM_NAME=4 /**< supports system names */
|
||||
};
|
||||
#define PED_DISK_TYPE_FIRST_FEATURE PED_DISK_TYPE_EXTENDED
|
||||
-#define PED_DISK_TYPE_LAST_FEATURE PED_DISK_TYPE_PARTITION_NAME
|
||||
+#define PED_DISK_TYPE_LAST_FEATURE PED_DISK_TYPE_SYSTEM_NAME
|
||||
|
||||
struct _PedDisk;
|
||||
struct _PedPartition;
|
||||
@@ -243,6 +244,8 @@ struct _PedDiskOps {
|
||||
/* other */
|
||||
int (*alloc_metadata) (PedDisk* disk);
|
||||
int (*get_max_primary_partition_count) (const PedDisk* disk);
|
||||
+ void (*partition_set_system_name) (PedPartition* part, const char* name);
|
||||
+ const char* (*partition_get_system_name) (const PedPartition* part);
|
||||
bool (*get_max_supported_partition_count) (const PedDisk* disk,
|
||||
int* supported);
|
||||
PedAlignment *(*get_partition_alignment)(const PedDisk *disk);
|
||||
@@ -362,7 +365,9 @@ extern int ped_partition_is_flag_availab
|
||||
extern int ped_partition_set_system (PedPartition* part,
|
||||
const PedFileSystemType* fs_type);
|
||||
extern int ped_partition_set_name (PedPartition* part, const char* name);
|
||||
+extern int ped_partition_set_system_name (PedPartition* part, const char* name);
|
||||
extern const char* ped_partition_get_name (const PedPartition* part);
|
||||
+extern const char* ped_partition_get_system_name (const PedPartition* part);
|
||||
extern int ped_partition_is_busy (const PedPartition* part);
|
||||
extern char* ped_partition_get_path (const PedPartition* part);
|
||||
|
||||
Index: parted-3.1/libparted/disk.c
|
||||
===================================================================
|
||||
--- parted-3.1.orig/libparted/disk.c
|
||||
+++ parted-3.1/libparted/disk.c
|
||||
@@ -1179,6 +1179,39 @@ _disk_pop_update_mode (PedDisk* disk)
|
||||
* @{
|
||||
*/
|
||||
@ -42,11 +86,11 @@ Index: parted-2.4/libparted/disk.c
|
||||
PedPartition*
|
||||
_ped_partition_alloc (const PedDisk* disk, PedPartitionType type,
|
||||
const PedFileSystemType* fs_type,
|
||||
Index: parted-2.4/libparted/labels/mac.c
|
||||
Index: parted-3.1/libparted/labels/mac.c
|
||||
===================================================================
|
||||
--- parted-2.4.orig/libparted/labels/mac.c
|
||||
+++ parted-2.4/libparted/labels/mac.c
|
||||
@@ -1386,6 +1386,36 @@ mac_get_partition_alignment(const PedDis
|
||||
--- parted-3.1.orig/libparted/labels/mac.c
|
||||
+++ parted-3.1/libparted/labels/mac.c
|
||||
@@ -1395,6 +1395,36 @@ mac_get_partition_alignment(const PedDis
|
||||
return ped_alignment_new(0, sector_size);
|
||||
}
|
||||
|
||||
@ -83,7 +127,7 @@ Index: parted-2.4/libparted/labels/mac.c
|
||||
static PedConstraint*
|
||||
_primary_constraint (PedDisk* disk)
|
||||
{
|
||||
@@ -1589,6 +1619,8 @@ static PedDiskOps mac_disk_ops = {
|
||||
@@ -1598,6 +1628,8 @@ static PedDiskOps mac_disk_ops = {
|
||||
|
||||
partition_set_name: mac_partition_set_name,
|
||||
partition_get_name: mac_partition_get_name,
|
||||
@ -92,7 +136,7 @@ Index: parted-2.4/libparted/labels/mac.c
|
||||
|
||||
get_partition_alignment: mac_get_partition_alignment,
|
||||
|
||||
@@ -1599,7 +1631,7 @@ static PedDiskType mac_disk_type = {
|
||||
@@ -1608,7 +1640,7 @@ static PedDiskType mac_disk_type = {
|
||||
next: NULL,
|
||||
name: "mac",
|
||||
ops: &mac_disk_ops,
|
||||
@ -101,76 +145,33 @@ Index: parted-2.4/libparted/labels/mac.c
|
||||
};
|
||||
|
||||
void
|
||||
Index: parted-2.4/include/parted/disk.h
|
||||
Index: parted-3.1/parted/parted.c
|
||||
===================================================================
|
||||
--- parted-2.4.orig/include/parted/disk.h
|
||||
+++ parted-2.4/include/parted/disk.h
|
||||
@@ -78,10 +78,11 @@ enum _PedPartitionFlag {
|
||||
|
||||
enum _PedDiskTypeFeature {
|
||||
PED_DISK_TYPE_EXTENDED=1, /**< supports extended partitions */
|
||||
- PED_DISK_TYPE_PARTITION_NAME=2 /**< supports partition names */
|
||||
+ PED_DISK_TYPE_PARTITION_NAME=2, /**< supports partition names */
|
||||
+ PED_DISK_TYPE_SYSTEM_NAME=4 /**< supports system names */
|
||||
};
|
||||
#define PED_DISK_TYPE_FIRST_FEATURE PED_DISK_TYPE_EXTENDED
|
||||
-#define PED_DISK_TYPE_LAST_FEATURE PED_DISK_TYPE_PARTITION_NAME
|
||||
+#define PED_DISK_TYPE_LAST_FEATURE PED_DISK_TYPE_SYSTEM_NAME
|
||||
|
||||
struct _PedDisk;
|
||||
struct _PedPartition;
|
||||
@@ -241,6 +242,8 @@ struct _PedDiskOps {
|
||||
/* other */
|
||||
int (*alloc_metadata) (PedDisk* disk);
|
||||
int (*get_max_primary_partition_count) (const PedDisk* disk);
|
||||
+ void (*partition_set_system_name) (PedPartition* part, const char* name);
|
||||
+ const char* (*partition_get_system_name) (const PedPartition* part);
|
||||
bool (*get_max_supported_partition_count) (const PedDisk* disk,
|
||||
int* supported);
|
||||
PedAlignment *(*get_partition_alignment)(const PedDisk *disk);
|
||||
@@ -327,7 +330,9 @@ extern int ped_partition_is_flag_availab
|
||||
extern int ped_partition_set_system (PedPartition* part,
|
||||
const PedFileSystemType* fs_type);
|
||||
extern int ped_partition_set_name (PedPartition* part, const char* name);
|
||||
+extern int ped_partition_set_system_name (PedPartition* part, const char* name);
|
||||
extern const char* ped_partition_get_name (const PedPartition* part);
|
||||
+extern const char* ped_partition_get_system_name (const PedPartition* part);
|
||||
extern int ped_partition_is_busy (const PedPartition* part);
|
||||
extern char* ped_partition_get_path (const PedPartition* part);
|
||||
|
||||
Index: parted-2.4/parted/parted.c
|
||||
===================================================================
|
||||
--- parted-2.4.orig/parted/parted.c
|
||||
+++ parted-2.4/parted/parted.c
|
||||
@@ -1292,6 +1292,7 @@ partition_print_flags (PedPartition* par
|
||||
char* res = ped_malloc(1);
|
||||
void* _res = res;
|
||||
--- parted-3.1.orig/parted/parted.c
|
||||
+++ parted-3.1/parted/parted.c
|
||||
@@ -889,6 +889,7 @@ static char*
|
||||
partition_print_flags (PedPartition const *part)
|
||||
{
|
||||
int xtype;
|
||||
+ const char* sysname;
|
||||
|
||||
*res = '\0';
|
||||
|
||||
@@ -1326,6 +1327,23 @@ partition_print_flags (PedPartition* par
|
||||
char *res = xstrdup ("");
|
||||
if (!part)
|
||||
return res;
|
||||
@@ -921,6 +922,17 @@ partition_print_flags (PedPartition cons
|
||||
}
|
||||
}
|
||||
|
||||
+ sysname = ped_partition_get_system_name( part );
|
||||
+ if (sysname) {
|
||||
+ if (first_flag)
|
||||
+ first_flag = 0;
|
||||
+ else {
|
||||
+ _res = res;
|
||||
+ ped_realloc (&_res, strlen (res)
|
||||
+ + 1 + 2);
|
||||
+ res = _res;
|
||||
+ strncat (res, ", ", 2);
|
||||
+ }
|
||||
+ _res = res;
|
||||
+ ped_realloc (&_res, strlen (res) + 6 + strlen(sysname));
|
||||
+ res = _res;
|
||||
+ strcat (res, "type=");
|
||||
+ strcat (res, sysname);
|
||||
+ char tmpstr[21];
|
||||
+ snprintf(tmpstr, sizeof(tmpstr) - 1, "type=%s", sysname);
|
||||
+ size_t new_len = res_buf_len + strlen(sep) + strlen(tmpstr);
|
||||
+ res = xrealloc(res, new_len);
|
||||
+ stpcpy (stpcpy (res + res_buf_len - 1, sep), tmpstr);
|
||||
+ res_buf_len = new_len;
|
||||
+ sep = ", ";
|
||||
+ }
|
||||
+
|
||||
return res;
|
||||
}
|
||||
|
||||
|
122
parted-resize-command.patch
Normal file
122
parted-resize-command.patch
Normal file
@ -0,0 +1,122 @@
|
||||
---
|
||||
parted/parted.c | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 86 insertions(+)
|
||||
|
||||
Index: parted-3.1/parted/parted.c
|
||||
===================================================================
|
||||
--- parted-3.1.orig/parted/parted.c
|
||||
+++ parted-3.1/parted/parted.c
|
||||
@@ -152,6 +152,9 @@ static const char* fs_type_msg_start = N
|
||||
static const char* start_end_msg = N_("START and END are disk locations, such as "
|
||||
"4GB or 10%. Negative values count from the end of the disk. "
|
||||
"For example, -1s specifies exactly the last sector.\n");
|
||||
+static const char* end_msg = N_("END is disk location, such as "
|
||||
+ "4GB or 10%. Negative value counts from the end of the disk. "
|
||||
+ "For example, -1s specifies exactly the last sector.\n");
|
||||
static const char* state_msg = N_("STATE is one of: on, off\n");
|
||||
static const char* device_msg = N_("DEVICE is usually /dev/hda or /dev/sda\n");
|
||||
static const char* name_msg = N_("NAME is any word you want\n");
|
||||
@@ -461,6 +464,21 @@ constraint_from_start_end (PedDevice* de
|
||||
range_start, range_end, 1, dev->length);
|
||||
}
|
||||
|
||||
+static PedConstraint*
|
||||
+constraint_from_start_end_fixed_start (PedDevice* dev, PedSector start_sector,
|
||||
+ PedGeometry* range_end)
|
||||
+{
|
||||
+ PedGeometry range_start;
|
||||
+ range_start.dev = dev;
|
||||
+ range_start.start = start_sector;
|
||||
+ range_start.end = start_sector;
|
||||
+ range_start.length = 1;
|
||||
+
|
||||
+ return ped_constraint_new (ped_alignment_any, ped_alignment_any,
|
||||
+ &range_start, range_end, 1, dev->length);
|
||||
+}
|
||||
+
|
||||
+
|
||||
void
|
||||
help_on (char* topic)
|
||||
{
|
||||
@@ -1527,6 +1545,66 @@ error:
|
||||
return 0;
|
||||
}
|
||||
|
||||
+
|
||||
+static int
|
||||
+do_resize (PedDevice** dev)
|
||||
+{
|
||||
+ PedDisk *disk;
|
||||
+ PedPartition *part = NULL;
|
||||
+ PedSector start, end, oldend;
|
||||
+ PedGeometry *range_end = NULL;
|
||||
+ PedConstraint* constraint;
|
||||
+
|
||||
+ disk = ped_disk_new (*dev);
|
||||
+ if (!disk)
|
||||
+ goto error;
|
||||
+
|
||||
+ if (ped_disk_is_flag_available(disk, PED_DISK_CYLINDER_ALIGNMENT))
|
||||
+ if (!ped_disk_set_flag(disk, PED_DISK_CYLINDER_ALIGNMENT,
|
||||
+ alignment == ALIGNMENT_CYLINDER))
|
||||
+ goto error;
|
||||
+
|
||||
+ if (!command_line_get_partition (_("Partition number?"), disk, &part))
|
||||
+ goto error;
|
||||
+ if (!_partition_warn_busy (part))
|
||||
+ goto error;
|
||||
+
|
||||
+ start = part->geom.start;
|
||||
+ end = oldend = part->geom.end;
|
||||
+ if (!command_line_get_sector (_("End?"), *dev, &end, &range_end, NULL))
|
||||
+ goto error;
|
||||
+ /* 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,
|
||||
+ start, end))
|
||||
+ goto error_destroy_constraint;
|
||||
+ /* warn when shrinking partition - might lose data */
|
||||
+ if (part->geom.end < oldend)
|
||||
+ if (ped_exception_throw (
|
||||
+ PED_EXCEPTION_WARNING,
|
||||
+ PED_EXCEPTION_YES_NO,
|
||||
+ _("Shrinking a partition can cause data loss, " \
|
||||
+ "are you sure you want to continue?")) != PED_EXCEPTION_YES)
|
||||
+ goto error_destroy_constraint;
|
||||
+ ped_disk_commit (disk);
|
||||
+ ped_constraint_destroy (constraint);
|
||||
+ if (range_end != NULL)
|
||||
+ ped_geometry_destroy (range_end);
|
||||
+
|
||||
+ if ((*dev)->type != PED_DEVICE_FILE)
|
||||
+ disk_is_modified = 1;
|
||||
+
|
||||
+ return 1;
|
||||
+
|
||||
+error_destroy_constraint:
|
||||
+ ped_constraint_destroy (constraint);
|
||||
+error:
|
||||
+ if (range_end != NULL)
|
||||
+ ped_geometry_destroy (range_end);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+
|
||||
static int
|
||||
do_rm (PedDevice** dev)
|
||||
{
|
||||
@@ -1899,6 +1977,14 @@ NULL),
|
||||
str_list_create (_(start_end_msg), NULL), 1));
|
||||
|
||||
command_register (commands, command_create (
|
||||
+ str_list_create_unique ("resize", _("resize"), NULL),
|
||||
+ do_resize,
|
||||
+ str_list_create (
|
||||
+_("resize NUMBER END change end sector of partition NUMBER"),
|
||||
+NULL),
|
||||
+ str_list_create (_(number_msg), _(end_msg), NULL), 1));
|
||||
+
|
||||
+command_register (commands, command_create (
|
||||
str_list_create_unique ("rm", _("rm"), NULL),
|
||||
do_rm,
|
||||
str_list_create (
|
@ -1,18 +0,0 @@
|
||||
Index: parted-2.4/lib/stdio.in.h
|
||||
===================================================================
|
||||
--- parted-2.4.orig/lib/stdio.in.h
|
||||
+++ parted-2.4/lib/stdio.in.h
|
||||
@@ -731,11 +731,13 @@ _GL_CXXALIAS_RPL (gets, char *, (char *s
|
||||
_GL_CXXALIAS_SYS (gets, char *, (char *s));
|
||||
# undef gets
|
||||
# endif
|
||||
+# if HAVE_RAW_DECL_GETS
|
||||
_GL_CXXALIASWARN (gets);
|
||||
/* It is very rare that the developer ever has full control of stdin,
|
||||
so any use of gets warrants an unconditional warning. Assume it is
|
||||
always declared, since it is required by C89. */
|
||||
_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
|
||||
+# endif
|
||||
#endif
|
||||
|
||||
|
@ -1,76 +1,16 @@
|
||||
---
|
||||
include/parted/disk.h | 9 +++++----
|
||||
libparted/disk.c | 2 ++
|
||||
libparted/labels/dos.c | 8 ++++++++
|
||||
parted/parted.c | 24 +++++++++++++++++++++---
|
||||
parted/ui.c | 3 +++
|
||||
5 files changed, 39 insertions(+), 7 deletions(-)
|
||||
include/parted/disk.h | 5 ++--
|
||||
libparted/disk.c | 2 +
|
||||
libparted/labels/dos.c | 8 ++++++
|
||||
parted/parted.c | 59 ++++++++++++++++++++++++++++++++-----------------
|
||||
parted/ui.c | 3 ++
|
||||
5 files changed, 55 insertions(+), 22 deletions(-)
|
||||
|
||||
Index: parted-2.4/libparted/disk.c
|
||||
Index: parted-3.1/include/parted/disk.h
|
||||
===================================================================
|
||||
--- parted-2.4.orig/libparted/disk.c
|
||||
+++ parted-2.4/libparted/disk.c
|
||||
@@ -2425,6 +2425,8 @@ ped_partition_flag_get_name (PedPartitio
|
||||
return N_("lba");
|
||||
case PED_PARTITION_HPSERVICE:
|
||||
return N_("hp-service");
|
||||
+ case PED_PARTITION_TYPE:
|
||||
+ return N_("type");
|
||||
case PED_PARTITION_PALO:
|
||||
return N_("palo");
|
||||
case PED_PARTITION_PREP:
|
||||
Index: parted-2.4/libparted/labels/dos.c
|
||||
===================================================================
|
||||
--- parted-2.4.orig/libparted/labels/dos.c
|
||||
+++ parted-2.4/libparted/labels/dos.c
|
||||
@@ -1496,6 +1496,10 @@ msdos_partition_set_flag (PedPartition*
|
||||
disk = part->disk;
|
||||
|
||||
switch (flag) {
|
||||
+ case PED_PARTITION_TYPE:
|
||||
+ dos_data->system = state;
|
||||
+ return 1;
|
||||
+
|
||||
case PED_PARTITION_HIDDEN:
|
||||
if (part->type == PED_PARTITION_EXTENDED) {
|
||||
ped_exception_throw (
|
||||
@@ -1591,6 +1595,9 @@ msdos_partition_get_flag (const PedParti
|
||||
case PED_PARTITION_LBA:
|
||||
return dos_data->lba;
|
||||
|
||||
+ case PED_PARTITION_TYPE:
|
||||
+ return dos_data->system;
|
||||
+
|
||||
case PED_PARTITION_PALO:
|
||||
return dos_data->palo;
|
||||
|
||||
@@ -1617,6 +1624,7 @@ msdos_partition_is_flag_available (const
|
||||
case PED_PARTITION_RAID:
|
||||
case PED_PARTITION_LVM:
|
||||
case PED_PARTITION_LBA:
|
||||
+ case PED_PARTITION_TYPE:
|
||||
case PED_PARTITION_PALO:
|
||||
case PED_PARTITION_PREP:
|
||||
case PED_PARTITION_DIAG:
|
||||
Index: parted-2.4/parted/ui.c
|
||||
===================================================================
|
||||
--- parted-2.4.orig/parted/ui.c
|
||||
+++ parted-2.4/parted/ui.c
|
||||
@@ -917,6 +917,9 @@ command_line_get_integer (const char* pr
|
||||
NULL, 1);
|
||||
if (!input)
|
||||
return 0;
|
||||
+ if (strstr(input, "0x") == input)
|
||||
+ valid = sscanf (input, "%x", value);
|
||||
+ else
|
||||
valid = sscanf (input, "%d", value);
|
||||
free (input);
|
||||
return valid;
|
||||
Index: parted-2.4/include/parted/disk.h
|
||||
===================================================================
|
||||
--- parted-2.4.orig/include/parted/disk.h
|
||||
+++ parted-2.4/include/parted/disk.h
|
||||
@@ -70,10 +70,11 @@ enum _PedPartitionFlag {
|
||||
--- parted-3.1.orig/include/parted/disk.h
|
||||
+++ parted-3.1/include/parted/disk.h
|
||||
@@ -72,10 +72,11 @@ enum _PedPartitionFlag {
|
||||
PED_PARTITION_BIOS_GRUB=12,
|
||||
PED_PARTITION_APPLE_TV_RECOVERY=13,
|
||||
PED_PARTITION_DIAG=14,
|
||||
@ -84,53 +24,117 @@ Index: parted-2.4/include/parted/disk.h
|
||||
|
||||
enum _PedDiskTypeFeature {
|
||||
PED_DISK_TYPE_EXTENDED=1, /**< supports extended partitions */
|
||||
Index: parted-2.4/parted/parted.c
|
||||
Index: parted-3.1/libparted/disk.c
|
||||
===================================================================
|
||||
--- parted-2.4.orig/parted/parted.c
|
||||
+++ parted-2.4/parted/parted.c
|
||||
@@ -1291,13 +1291,14 @@ partition_print_flags (PedPartition* par
|
||||
const char* name;
|
||||
char* res = ped_malloc(1);
|
||||
void* _res = res;
|
||||
+ int xtype;
|
||||
--- parted-3.1.orig/libparted/disk.c
|
||||
+++ parted-3.1/libparted/disk.c
|
||||
@@ -2426,6 +2426,8 @@ ped_partition_flag_get_name (PedPartitio
|
||||
return N_("lba");
|
||||
case PED_PARTITION_HPSERVICE:
|
||||
return N_("hp-service");
|
||||
+ case PED_PARTITION_TYPE:
|
||||
+ return N_("type");
|
||||
case PED_PARTITION_PALO:
|
||||
return N_("palo");
|
||||
case PED_PARTITION_PREP:
|
||||
Index: parted-3.1/libparted/labels/dos.c
|
||||
===================================================================
|
||||
--- parted-3.1.orig/libparted/labels/dos.c
|
||||
+++ parted-3.1/libparted/labels/dos.c
|
||||
@@ -1509,6 +1509,10 @@ msdos_partition_set_flag (PedPartition*
|
||||
disk = part->disk;
|
||||
|
||||
*res = '\0';
|
||||
switch (flag) {
|
||||
+ case PED_PARTITION_TYPE:
|
||||
+ dos_data->system = state;
|
||||
+ return 1;
|
||||
+
|
||||
case PED_PARTITION_HIDDEN:
|
||||
if (part->type == PED_PARTITION_EXTENDED) {
|
||||
ped_exception_throw (
|
||||
@@ -1604,6 +1608,9 @@ msdos_partition_get_flag (const PedParti
|
||||
case PED_PARTITION_LBA:
|
||||
return dos_data->lba;
|
||||
|
||||
first_flag = 1;
|
||||
for (flag = ped_partition_flag_next (0); flag;
|
||||
flag = ped_partition_flag_next (flag)) {
|
||||
- if (ped_partition_get_flag (part, flag)) {
|
||||
+ if (xtype = ped_partition_get_flag (part, flag)) {
|
||||
if (first_flag)
|
||||
first_flag = 0;
|
||||
else {
|
||||
@@ -1306,7 +1307,16 @@ partition_print_flags (PedPartition* par
|
||||
res = _res;
|
||||
strncat (res, ", ", 2);
|
||||
}
|
||||
+ case PED_PARTITION_TYPE:
|
||||
+ return dos_data->system;
|
||||
+
|
||||
case PED_PARTITION_PALO:
|
||||
return dos_data->palo;
|
||||
|
||||
@@ -1630,6 +1637,7 @@ msdos_partition_is_flag_available (const
|
||||
case PED_PARTITION_RAID:
|
||||
case PED_PARTITION_LVM:
|
||||
case PED_PARTITION_LBA:
|
||||
+ case PED_PARTITION_TYPE:
|
||||
case PED_PARTITION_PALO:
|
||||
case PED_PARTITION_PREP:
|
||||
case PED_PARTITION_DIAG:
|
||||
Index: parted-3.1/parted/parted.c
|
||||
===================================================================
|
||||
--- parted-3.1.orig/parted/parted.c
|
||||
+++ parted-3.1/parted/parted.c
|
||||
@@ -888,28 +888,40 @@ error:
|
||||
static char*
|
||||
partition_print_flags (PedPartition const *part)
|
||||
{
|
||||
- char *res = xstrdup ("");
|
||||
- if (!part)
|
||||
- return res;
|
||||
-
|
||||
- PedPartitionFlag flag;
|
||||
- size_t res_buf_len = 1;
|
||||
- char const *sep = "";
|
||||
- for (flag = ped_partition_flag_next (0); flag;
|
||||
- flag = ped_partition_flag_next (flag))
|
||||
- {
|
||||
- if (ped_partition_get_flag (part, flag))
|
||||
+ int xtype;
|
||||
+ char *res = xstrdup ("");
|
||||
+ if (!part)
|
||||
+ return res;
|
||||
+
|
||||
+ PedPartitionFlag flag;
|
||||
+ size_t res_buf_len = 1;
|
||||
+ char const *sep = "";
|
||||
+ for (flag = ped_partition_flag_next (0); flag;
|
||||
+ flag = ped_partition_flag_next (flag))
|
||||
{
|
||||
- const char *name = _(ped_partition_flag_get_name (flag));
|
||||
- size_t new_len = res_buf_len + strlen (sep) + strlen (name);
|
||||
- res = xrealloc (res, new_len);
|
||||
- stpcpy (stpcpy (res + res_buf_len - 1, sep), name);
|
||||
- res_buf_len = new_len;
|
||||
- sep = ", ";
|
||||
+ if (xtype = ped_partition_get_flag (part, flag))
|
||||
+ {
|
||||
+ if (flag == PED_PARTITION_TYPE) {
|
||||
+ char tmpstr[21];
|
||||
+ int len = snprintf(tmpstr,sizeof(tmpstr)-1,"type=%02x",xtype);
|
||||
+ _res = res;
|
||||
+ ped_realloc (&_res, strlen (res) + 1 +
|
||||
+ ((len>sizeof(tmpstr))?sizeof(tmpstr):len) );
|
||||
+ res = _res;
|
||||
+ strncat (res, tmpstr, 21);
|
||||
+ int len = snprintf(tmpstr, sizeof(tmpstr) - 1, "type=%02x", xtype);
|
||||
+ size_t new_len = res_buf_len + strlen(sep) + strlen(tmpstr);
|
||||
+ res = xrealloc(res, new_len);
|
||||
+ stpcpy (stpcpy (res + res_buf_len - 1, sep), tmpstr);
|
||||
+ res_buf_len = new_len;
|
||||
+ sep = ", ";
|
||||
+ }
|
||||
+ else {
|
||||
name = _(ped_partition_flag_get_name (flag));
|
||||
_res = res;
|
||||
ped_realloc (&_res, strlen (res) + 1 + strlen (name));
|
||||
@@ -1314,6 +1324,7 @@ partition_print_flags (PedPartition* par
|
||||
strcat(res, name);
|
||||
}
|
||||
}
|
||||
+ const char *name = _(ped_partition_flag_get_name (flag));
|
||||
+ size_t new_len = res_buf_len + strlen (sep) + strlen (name);
|
||||
+ res = xrealloc (res, new_len);
|
||||
+ stpcpy (stpcpy (res + res_buf_len - 1, sep), name);
|
||||
+ res_buf_len = new_len;
|
||||
+ sep = ", ";
|
||||
+ }
|
||||
+ }
|
||||
|
||||
return res;
|
||||
}
|
||||
@@ -2156,12 +2167,19 @@ do_set (PedDevice** dev)
|
||||
- }
|
||||
|
||||
- return res;
|
||||
+ return res;
|
||||
}
|
||||
|
||||
static int
|
||||
@@ -1623,12 +1635,19 @@ do_set (PedDevice** dev)
|
||||
goto error_destroy_disk;
|
||||
if (!command_line_get_part_flag (_("Flag to Invert?"), part, &flag))
|
||||
goto error_destroy_disk;
|
||||
@ -151,3 +155,17 @@ Index: parted-2.4/parted/parted.c
|
||||
|
||||
if (!ped_partition_set_flag (part, flag, state))
|
||||
goto error_destroy_disk;
|
||||
Index: parted-3.1/parted/ui.c
|
||||
===================================================================
|
||||
--- parted-3.1.orig/parted/ui.c
|
||||
+++ parted-3.1/parted/ui.c
|
||||
@@ -917,6 +917,9 @@ command_line_get_integer (const char* pr
|
||||
NULL, 1);
|
||||
if (!input)
|
||||
return 0;
|
||||
+ if (strstr(input, "0x") == input)
|
||||
+ valid = sscanf (input, "%x", value);
|
||||
+ else
|
||||
valid = sscanf (input, "%d", value);
|
||||
free (input);
|
||||
return valid;
|
||||
|
@ -1,22 +0,0 @@
|
||||
Index: parted-2.4/libparted/arch/linux.c
|
||||
===================================================================
|
||||
--- parted-2.4.orig/libparted/arch/linux.c
|
||||
+++ parted-2.4/libparted/arch/linux.c
|
||||
@@ -2413,7 +2413,7 @@ _blkpg_remove_partition (PedDisk* disk,
|
||||
|
||||
/*
|
||||
* The number of partitions that a device can have depends on the kernel.
|
||||
- * If we don't find this value in /sys/block/DEV/range, we will use our own
|
||||
+ * If we don't find this value in /sys/block/DEV/ext_range, we will use our own
|
||||
* value.
|
||||
*/
|
||||
static unsigned int
|
||||
@@ -2424,7 +2424,7 @@ _device_get_partition_range(PedDevice* d
|
||||
FILE* fp;
|
||||
bool ok;
|
||||
|
||||
- r = snprintf(path, sizeof(path), "/sys/block/%s/range",
|
||||
+ r = snprintf(path, sizeof(path), "/sys/block/%s/ext_range",
|
||||
last_component(dev->path));
|
||||
if (r < 0 || r >= sizeof(path))
|
||||
return MAX_NUM_PARTS;
|
@ -1,8 +1,12 @@
|
||||
Index: parted-2.3/libparted/labels/dos.c
|
||||
---
|
||||
libparted/labels/dos.c | 8 +++++++-
|
||||
1 file changed, 7 insertions(+), 1 deletion(-)
|
||||
|
||||
Index: parted-3.1/libparted/labels/dos.c
|
||||
===================================================================
|
||||
--- parted-2.3.orig/libparted/labels/dos.c 2010-07-08 13:28:03.000000000 +0200
|
||||
+++ parted-2.3/libparted/labels/dos.c 2010-07-08 13:28:13.000000000 +0200
|
||||
@@ -1176,7 +1176,13 @@ msdos_write (const PedDisk* disk)
|
||||
--- parted-3.1.orig/libparted/labels/dos.c
|
||||
+++ parted-3.1/libparted/labels/dos.c
|
||||
@@ -1260,7 +1260,13 @@ msdos_write (const PedDisk* disk)
|
||||
return 0;
|
||||
DosRawTable *table = (DosRawTable *) s0;
|
||||
|
||||
|
@ -1,3 +1,52 @@
|
||||
-------------------------------------------------------------------
|
||||
Wed Jan 8 15:32:34 UTC 2014 - puzel@suse.com
|
||||
|
||||
- update to parted-3.1 (fate#316110)
|
||||
- changes in parted-3.1:
|
||||
* Changes in behavior
|
||||
- Floppy drives are no longer scanned on linux: they cannot be
|
||||
partitioned anyhow, and some users have a misconfigured BIOS
|
||||
that claims to have a floppy when they don't, and scanning
|
||||
gets hung up.
|
||||
- parted: the mkpart command has changed semantics with regard
|
||||
to specifying the end of the partition. If the end is
|
||||
specified using units of MiB, GiB, etc., parted subtracts one
|
||||
sector from the specified value. With this change, it is now
|
||||
possible to create partitions like 1MiB-2MiB, 2MiB-3MiB and
|
||||
so on.
|
||||
* Many bugfixes (see changelog)
|
||||
- changes in parted-3.0:
|
||||
* Changes in behavior
|
||||
- Remove all FS-related (file system-related) sub-commands;
|
||||
these commands are no longer recognized because they were all
|
||||
dependent on parted "knowing" too much about file system:
|
||||
mkpartfs, mkfs, cp, move, check.
|
||||
- 'resize' command changed semantics:
|
||||
it no longer resizes the filesystem, but only moves end
|
||||
sector of the partition
|
||||
- libparted-devel contains libparted-fs-resize library
|
||||
- add ability to change size of the partition (ignoring contained
|
||||
filesystem) with 'resize' command; this command has different
|
||||
semantics than the former 'resize' command which upstream
|
||||
decided to drop
|
||||
- parted-resize-command.patch (fate#316110)
|
||||
- when using syncmbr on POWER, make the first partition type 0x41
|
||||
(PReP boot) (bnc#797485)
|
||||
- add libparted-ppc-prepboot-in-syncmbr.patch
|
||||
- support for PReP GUID (bnc#797485)
|
||||
- parted-GPT-add-support-for-PReP-GUID.patch
|
||||
- Build requires makeinfo
|
||||
- drop fix-function-def.patch (not needed)
|
||||
- drop parted-stdio.h.patch (not needed)
|
||||
- drop parted-use-ext-range.patch (upstream)
|
||||
- drop fix-nilfs2-probe-function.patch (upstream)
|
||||
- drop parted-improve-loop-support.patch (upstream)
|
||||
- drop always-resize-part.dif (FS support removed)
|
||||
- merged following hybrid pMBR patches:
|
||||
parted-gpt-mbr-sync.patch,
|
||||
parted-gpt-sync-mbr-label.patch,
|
||||
parted-fix-gpt-sync-on-BE-systems.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Dec 30 09:15:06 UTC 2013 - puzel@suse.com
|
||||
|
||||
|
70
parted.spec
70
parted.spec
@ -1,7 +1,7 @@
|
||||
#
|
||||
# spec file for package parted
|
||||
#
|
||||
# Copyright (c) 2013 SUSE LINUX Products GmbH, Nuernberg, Germany.
|
||||
# Copyright (c) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany.
|
||||
#
|
||||
# All modifications and additions to the file contributed by third parties
|
||||
# remain the property of their copyright owners, unless otherwise agreed
|
||||
@ -17,43 +17,44 @@
|
||||
|
||||
|
||||
Name: parted
|
||||
Version: 2.4
|
||||
Version: 3.1
|
||||
Release: 0
|
||||
Summary: GNU partitioner
|
||||
License: GPL-3.0+
|
||||
Group: System/Filesystems
|
||||
Url: http://www.gnu.org/software/parted/
|
||||
Source0: ftp://ftp.gnu.org/gnu/parted/%{name}-%{version}.tar.gz
|
||||
Source1: ftp://ftp.gnu.org/gnu/parted/%{name}-%{version}.tar.gz.sig
|
||||
Source0: ftp://ftp.gnu.org/gnu/parted/%{name}-%{version}.tar.xz
|
||||
Source1: ftp://ftp.gnu.org/gnu/parted/%{name}-%{version}.tar.xz.sig
|
||||
Source2: parted.keyring
|
||||
Source3: baselibs.conf
|
||||
Patch0: always-resize-part.dif
|
||||
Patch1: parted-type.patch
|
||||
Patch2: parted-mac.patch
|
||||
Patch3: parted-wipeaix.patch
|
||||
Patch5: hfs_fix.dif
|
||||
Patch7: fix-function-def.patch
|
||||
Patch8: parted-gpt-mbr-sync.patch
|
||||
#PATCH-FEATURE-OPENSUSE fix-dm-partition-name.patch bnc471440,447591 petr.uzel@suse.cz
|
||||
Patch10: fix-dm-partition-name.patch
|
||||
#PATCH-FEATURE-OPENSUSE do-not-create-dm-nodes.patch bnc#501773 petr.uzel@suse.cz
|
||||
Patch11: do-not-create-dm-nodes.patch
|
||||
#PATCH-FEATURE-OPENSUSE more-reliable-informing-the-kernel.patch bnc#657360 petr.uzel@suse.cz
|
||||
Patch12: more-reliable-informing-the-kernel.patch
|
||||
Patch13: parted-2.4-ncursesw6.patch
|
||||
Patch14: parted-gpt-sync-mbr-label.patch
|
||||
Patch15: parted-use-ext-range.patch
|
||||
Patch16: parted-improve-loop-support.patch
|
||||
Patch17: fix-nilfs2-probe-function.patch
|
||||
Patch18: parted-fix-cciss-partition-naming.patch
|
||||
Patch19: dummy-bootcode-only-for-x86.patch
|
||||
Patch20: parted-stdio.h.patch
|
||||
# Build patches
|
||||
Patch1: parted-2.4-ncursesw6.patch
|
||||
|
||||
# Other patches
|
||||
Patch10: hfs_fix.dif
|
||||
Patch11: parted-wipeaix.patch
|
||||
Patch12: fix-error-informing-the-kernel.patch
|
||||
#PATCH-FEATURE-SUSE fix-dm-partition-name.patch bnc471440,447591 petr.uzel@suse.cz
|
||||
Patch13: fix-dm-partition-name.patch
|
||||
Patch14: parted-fix-cciss-partition-naming.patch
|
||||
Patch15: libparted-fix-mmcblk-partition-name.patch
|
||||
#PATCH-FEATURE-SUSE do-not-create-dm-nodes.patch bnc#501773 petr.uzel@suse.cz
|
||||
Patch16: do-not-create-dm-nodes.patch
|
||||
#PATCH-FEATURE-SUSE more-reliable-informing-the-kernel.patch bnc#657360 petr.uzel@suse.cz
|
||||
Patch17: more-reliable-informing-the-kernel.patch
|
||||
#PATCH-FEATURE-SUSE revert-gpt-add-commands-to-manipulate-pMBR-boot-flag.patch
|
||||
# (clashes with our hybrid pMBR patches)
|
||||
Patch18: revert-gpt-add-commands-to-manipulate-pMBR-boot-flag.patch
|
||||
Patch19: parted-gpt-mbr-sync.patch
|
||||
Patch20: libparted-ppc-prepboot-in-syncmbr.patch
|
||||
Patch21: parted-workaround-windows7-gpt-implementation.patch
|
||||
Patch22: fix-error-informing-the-kernel.patch
|
||||
Patch23: parted-fix-gpt-sync-on-BE-systems.patch
|
||||
Patch24: parted-btrfs-support.patch
|
||||
Patch22: dummy-bootcode-only-for-x86.patch
|
||||
Patch23: parted-type.patch
|
||||
Patch24: parted-mac.patch
|
||||
Patch25: parted-Add-Intel-Rapid-Start-Technology-partition.patch
|
||||
Patch26: libparted-fix-mmcblk-partition-name.patch
|
||||
Patch26: parted-btrfs-support.patch
|
||||
Patch27: parted-GPT-add-support-for-PReP-GUID.patch
|
||||
Patch28: parted-resize-command.patch
|
||||
Requires: /sbin/udevadm
|
||||
BuildRequires: check-devel
|
||||
BuildRequires: device-mapper-devel >= 1.02.33
|
||||
@ -64,6 +65,7 @@ BuildRequires: libselinux-devel
|
||||
BuildRequires: libsepol-devel
|
||||
BuildRequires: libtool
|
||||
BuildRequires: libuuid-devel
|
||||
BuildRequires: makeinfo
|
||||
BuildRequires: pkg-config
|
||||
BuildRequires: readline-devel
|
||||
%if %suse_version >= 1230
|
||||
@ -108,17 +110,11 @@ to develop applications that require these.
|
||||
%prep
|
||||
%{?gpg_verify: %gpg_verify %{S:1}}
|
||||
%setup -q
|
||||
%patch0
|
||||
%patch1 -p1
|
||||
%patch2 -p1
|
||||
%patch3 -p1
|
||||
%patch5 -p1
|
||||
%patch7
|
||||
%patch8
|
||||
%patch10 -p1
|
||||
%patch11 -p1
|
||||
%patch12 -p1
|
||||
%patch13
|
||||
%patch13 -p1
|
||||
%patch14 -p1
|
||||
%patch15 -p1
|
||||
%patch16 -p1
|
||||
@ -132,6 +128,8 @@ to develop applications that require these.
|
||||
%patch24 -p1
|
||||
%patch25 -p1
|
||||
%patch26 -p1
|
||||
%patch27 -p1
|
||||
%patch28 -p1
|
||||
|
||||
%build
|
||||
export CFLAGS="%{optflags} `ncursesw6-config --cflags`"
|
||||
|
313
revert-gpt-add-commands-to-manipulate-pMBR-boot-flag.patch
Normal file
313
revert-gpt-add-commands-to-manipulate-pMBR-boot-flag.patch
Normal file
@ -0,0 +1,313 @@
|
||||
From ff10810537db7b9d1f287bed3c71a7570d395ba2 Mon Sep 17 00:00:00 2001
|
||||
From: Petr Uzel <petr.uzel@suse.cz>
|
||||
Date: Wed, 8 Jan 2014 18:01:15 +0100
|
||||
Subject: [PATCH] Revert "gpt: add commands to manipulate pMBR boot flag"
|
||||
|
||||
This reverts commit a73918ea6d9477ac3e8dad11ed62c87aecc49714.
|
||||
|
||||
Conflicts:
|
||||
libparted/labels/gpt.c
|
||||
---
|
||||
include/parted/disk.in.h | 4 --
|
||||
libparted/disk.c | 3 --
|
||||
libparted/labels/gpt.c | 59 +-----------------------------------------
|
||||
parted/parted.c | 66 -----------------------------------------------
|
||||
parted/ui.c | 29 --------------------
|
||||
parted/ui.h | 3 --
|
||||
6 files changed, 4 insertions(+), 160 deletions(-)
|
||||
|
||||
Index: parted-3.1/include/parted/disk.in.h
|
||||
===================================================================
|
||||
--- parted-3.1.orig/include/parted/disk.in.h
|
||||
+++ parted-3.1/include/parted/disk.in.h
|
||||
@@ -36,11 +36,9 @@ enum _PedDiskFlag {
|
||||
This flag is available for msdos and sun disklabels (for sun labels
|
||||
it only controls the aligning of the end of the partition) */
|
||||
PED_DISK_CYLINDER_ALIGNMENT=1,
|
||||
- /* This flag controls whether the boot flag of a GPT PMBR is set */
|
||||
- PED_DISK_GPT_PMBR_BOOT=2,
|
||||
};
|
||||
#define PED_DISK_FIRST_FLAG PED_DISK_CYLINDER_ALIGNMENT
|
||||
-#define PED_DISK_LAST_FLAG PED_DISK_GPT_PMBR_BOOT
|
||||
+#define PED_DISK_LAST_FLAG PED_DISK_CYLINDER_ALIGNMENT
|
||||
|
||||
/**
|
||||
* Partition types
|
||||
Index: parted-3.1/libparted/disk.c
|
||||
===================================================================
|
||||
--- parted-3.1.orig/libparted/disk.c
|
||||
+++ parted-3.1/libparted/disk.c
|
||||
@@ -836,8 +836,7 @@ ped_disk_flag_get_name(PedDiskFlag flag)
|
||||
switch (flag) {
|
||||
case PED_DISK_CYLINDER_ALIGNMENT:
|
||||
return N_("cylinder_alignment");
|
||||
- case PED_DISK_GPT_PMBR_BOOT:
|
||||
- return N_("pmbr_boot");
|
||||
+
|
||||
default:
|
||||
ped_exception_throw (
|
||||
PED_EXCEPTION_BUG,
|
||||
Index: parted-3.1/libparted/labels/gpt.c
|
||||
===================================================================
|
||||
--- parted-3.1.orig/libparted/labels/gpt.c
|
||||
+++ parted-3.1/libparted/labels/gpt.c
|
||||
@@ -264,7 +264,6 @@ struct __attribute__ ((packed)) _GPTDisk
|
||||
PedGeometry data_area;
|
||||
int entry_count;
|
||||
efi_guid_t uuid;
|
||||
- int pmbr_boot;
|
||||
};
|
||||
|
||||
/* uses libparted's disk_specific field in PedPartition, to store our info */
|
||||
@@ -536,7 +535,6 @@ gpt_alloc (const PedDevice *dev)
|
||||
gpt_disk_data->entry_count = GPT_DEFAULT_PARTITION_ENTRIES;
|
||||
uuid_generate ((unsigned char *) &gpt_disk_data->uuid);
|
||||
swap_uuid_and_efi_guid ((unsigned char *) (&gpt_disk_data->uuid));
|
||||
- gpt_disk_data->pmbr_boot = 0;
|
||||
return disk;
|
||||
|
||||
error_free_disk:
|
||||
@@ -845,14 +843,6 @@ gpt_read_headers (PedDisk const *disk,
|
||||
*backup_gpt = NULL;
|
||||
PedDevice const *dev = disk->dev;
|
||||
GPTDiskData *gpt_disk_data = disk->disk_specific;
|
||||
- LegacyMBR_t *mbr;
|
||||
-
|
||||
- if (!ptt_read_sector (dev, 0, (void *)&mbr))
|
||||
- return 1;
|
||||
-
|
||||
- if (mbr->PartitionRecord[0].BootIndicator == 0x80)
|
||||
- gpt_disk_data->pmbr_boot = 1;
|
||||
- free (mbr);
|
||||
|
||||
void *s1;
|
||||
if (!ptt_read_sector (dev, 1, &s1))
|
||||
@@ -1090,7 +1080,7 @@ error:
|
||||
#ifndef DISCOVER_ONLY
|
||||
/* Write the protective MBR (to keep DOS happy) */
|
||||
static int
|
||||
-_write_pmbr (PedDevice *dev, bool pmbr_boot)
|
||||
+_write_pmbr (PedDevice *dev)
|
||||
{
|
||||
/* The UEFI spec is not clear about what to do with the following
|
||||
elements of the Protective MBR (pmbr): BootCode (0-440B),
|
||||
@@ -1115,8 +1105,6 @@ _write_pmbr (PedDevice *dev, bool pmbr_b
|
||||
pmbr->PartitionRecord[0].SizeInLBA = PED_CPU_TO_LE32 (0xFFFFFFFF);
|
||||
else
|
||||
pmbr->PartitionRecord[0].SizeInLBA = PED_CPU_TO_LE32 (dev->length - 1UL);
|
||||
- if (pmbr_boot)
|
||||
- pmbr->PartitionRecord[0].BootIndicator = 0x80;
|
||||
|
||||
int write_ok = ped_device_write (dev, pmbr, GPT_PMBR_LBA,
|
||||
GPT_PMBR_SECTORS);
|
||||
@@ -1237,7 +1225,7 @@ gpt_write (const PedDisk *disk)
|
||||
ptes_crc = efi_crc32 (ptes, ptes_bytes);
|
||||
|
||||
/* Write protective MBR */
|
||||
- if (!_write_pmbr (disk->dev, gpt_disk_data->pmbr_boot))
|
||||
+ if (!_write_pmbr (disk->dev))
|
||||
goto error_free_ptes;
|
||||
|
||||
/* Write PTH and PTEs */
|
||||
@@ -1523,46 +1511,6 @@ gpt_partition_enumerate (PedPartition *p
|
||||
}
|
||||
|
||||
static int
|
||||
-gpt_disk_set_flag (PedDisk *disk, PedDiskFlag flag, int state)
|
||||
-{
|
||||
- GPTDiskData *gpt_disk_data = disk->disk_specific;
|
||||
- switch (flag)
|
||||
- {
|
||||
- case PED_DISK_GPT_PMBR_BOOT:
|
||||
- gpt_disk_data->pmbr_boot = state;
|
||||
- return 1;
|
||||
- default:
|
||||
- return 0;
|
||||
- }
|
||||
-}
|
||||
-
|
||||
-static int
|
||||
-gpt_disk_is_flag_available(const PedDisk *disk, PedDiskFlag flag)
|
||||
-{
|
||||
- switch (flag)
|
||||
- {
|
||||
- case PED_DISK_GPT_PMBR_BOOT:
|
||||
- return 1;
|
||||
- default:
|
||||
- return 0;
|
||||
- }
|
||||
-}
|
||||
-
|
||||
-static int
|
||||
-gpt_disk_get_flag (const PedDisk *disk, PedDiskFlag flag)
|
||||
-{
|
||||
- GPTDiskData *gpt_disk_data = disk->disk_specific;
|
||||
- switch (flag)
|
||||
- {
|
||||
- case PED_DISK_GPT_PMBR_BOOT:
|
||||
- return gpt_disk_data->pmbr_boot;
|
||||
- break;
|
||||
- default:
|
||||
- return 0;
|
||||
- }
|
||||
-}
|
||||
-
|
||||
-static int
|
||||
gpt_partition_set_flag (PedPartition *part, PedPartitionFlag flag, int state)
|
||||
{
|
||||
GPTPartitionData *gpt_part_data;
|
||||
@@ -1850,9 +1798,6 @@ static PedDiskOps gpt_disk_ops =
|
||||
|
||||
partition_set_name: gpt_partition_set_name,
|
||||
partition_get_name: gpt_partition_get_name,
|
||||
- disk_set_flag: gpt_disk_set_flag,
|
||||
- disk_get_flag: gpt_disk_get_flag,
|
||||
- disk_is_flag_available: gpt_disk_is_flag_available,
|
||||
|
||||
PT_op_function_initializers (gpt)
|
||||
};
|
||||
Index: parted-3.1/parted/parted.c
|
||||
===================================================================
|
||||
--- parted-3.1.orig/parted/parted.c
|
||||
+++ parted-3.1/parted/parted.c
|
||||
@@ -1608,43 +1608,6 @@ error:
|
||||
}
|
||||
|
||||
static int
|
||||
-do_disk_set (PedDevice** dev)
|
||||
-{
|
||||
- PedDisk* disk;
|
||||
- PedDiskFlag flag;
|
||||
- int state;
|
||||
-
|
||||
- disk = ped_disk_new (*dev);
|
||||
- if (!disk)
|
||||
- goto error;
|
||||
-
|
||||
- if (!command_line_get_disk_flag (_("Flag to Invert?"), disk, &flag))
|
||||
- goto error_destroy_disk;
|
||||
- state = (ped_disk_get_flag (disk, flag) == 0 ? 1 : 0);
|
||||
-
|
||||
- if (!is_toggle_mode) {
|
||||
- if (!command_line_get_state (_("New state?"), &state))
|
||||
- goto error_destroy_disk;
|
||||
- }
|
||||
-
|
||||
- if (!ped_disk_set_flag (disk, flag, state))
|
||||
- goto error_destroy_disk;
|
||||
- if (!ped_disk_commit (disk))
|
||||
- goto error_destroy_disk;
|
||||
- ped_disk_destroy (disk);
|
||||
-
|
||||
- if ((*dev)->type != PED_DEVICE_FILE)
|
||||
- disk_is_modified = 1;
|
||||
-
|
||||
- return 1;
|
||||
-
|
||||
-error_destroy_disk:
|
||||
- ped_disk_destroy (disk);
|
||||
-error:
|
||||
- return 0;
|
||||
-}
|
||||
-
|
||||
-static int
|
||||
do_set (PedDevice** dev)
|
||||
{
|
||||
PedDisk* disk;
|
||||
@@ -1685,18 +1648,6 @@ error:
|
||||
}
|
||||
|
||||
static int
|
||||
-do_disk_toggle (PedDevice **dev)
|
||||
-{
|
||||
- int result;
|
||||
-
|
||||
- is_toggle_mode = 1;
|
||||
- result = do_disk_set (dev);
|
||||
- is_toggle_mode = 0;
|
||||
-
|
||||
- return result;
|
||||
-}
|
||||
-
|
||||
-static int
|
||||
do_toggle (PedDevice **dev)
|
||||
{
|
||||
int result;
|
||||
@@ -1933,23 +1884,6 @@ NULL),
|
||||
str_list_create (_(device_msg), NULL), 1));
|
||||
|
||||
command_register (commands, command_create (
|
||||
- str_list_create_unique ("disk_set", _("disk_set"), NULL),
|
||||
- do_disk_set,
|
||||
- str_list_create (
|
||||
-_("disk_set FLAG STATE change the FLAG on selected device"),
|
||||
-NULL),
|
||||
- str_list_create (flag_msg, _(state_msg), NULL), 1));
|
||||
-
|
||||
-command_register (commands, command_create (
|
||||
- str_list_create_unique ("disk_toggle", _("disk_toggle"), NULL),
|
||||
- do_disk_toggle,
|
||||
- str_list_create (
|
||||
-_("disk_toggle [FLAG] toggle the state of FLAG on "
|
||||
-"selected device"),
|
||||
-NULL),
|
||||
- str_list_create (flag_msg, NULL), 1));
|
||||
-
|
||||
-command_register (commands, command_create (
|
||||
str_list_create_unique ("set", _("set"), NULL),
|
||||
do_set,
|
||||
str_list_create (
|
||||
Index: parted-3.1/parted/ui.c
|
||||
===================================================================
|
||||
--- parted-3.1.orig/parted/ui.c
|
||||
+++ parted-3.1/parted/ui.c
|
||||
@@ -1116,35 +1116,6 @@ command_line_get_disk_type (const char*
|
||||
}
|
||||
|
||||
int
|
||||
-command_line_get_disk_flag (const char* prompt, const PedDisk* disk,
|
||||
- PedDiskFlag* flag)
|
||||
-{
|
||||
- StrList* opts = NULL;
|
||||
- PedPartitionFlag walk = 0;
|
||||
- char* flag_name;
|
||||
-
|
||||
- while ( (walk = ped_disk_flag_next (walk)) ) {
|
||||
- if (ped_disk_is_flag_available (disk, walk)) {
|
||||
- const char* walk_name;
|
||||
-
|
||||
- walk_name = ped_disk_flag_get_name (walk);
|
||||
- opts = str_list_append (opts, walk_name);
|
||||
- opts = str_list_append_unique (opts, _(walk_name));
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- flag_name = command_line_get_word (prompt, NULL, opts, 1);
|
||||
- str_list_destroy (opts);
|
||||
-
|
||||
- if (flag_name) {
|
||||
- *flag = ped_disk_flag_get_by_name (flag_name);
|
||||
- free (flag_name);
|
||||
- return 1;
|
||||
- } else
|
||||
- return 0;
|
||||
-}
|
||||
-
|
||||
-int
|
||||
command_line_get_part_flag (const char* prompt, const PedPartition* part,
|
||||
PedPartitionFlag* flag)
|
||||
{
|
||||
Index: parted-3.1/parted/ui.h
|
||||
===================================================================
|
||||
--- parted-3.1.orig/parted/ui.h
|
||||
+++ parted-3.1/parted/ui.h
|
||||
@@ -63,9 +63,6 @@ extern int command_line_get_fs_type (con
|
||||
const PedFileSystemType*(* value));
|
||||
extern int command_line_get_disk_type (const char* prompt,
|
||||
const PedDiskType*(* value));
|
||||
-extern int command_line_get_disk_flag (const char* prompt,
|
||||
- const PedDisk* disk,
|
||||
- PedDiskFlag* flag);
|
||||
extern int command_line_get_part_flag (const char* prompt,
|
||||
const PedPartition* part,
|
||||
PedPartitionFlag* flag);
|
Loading…
Reference in New Issue
Block a user