diff options
author | Richard W.M. Jones <rjones@redhat.com> | 2012-06-22 10:54:57 +0100 |
---|---|---|
committer | Richard W.M. Jones <rjones@redhat.com> | 2012-06-28 09:09:25 +0100 |
commit | 660933ce579916e4a8a8e2c6a1edaa3760f8bb0e (patch) | |
tree | 08e63ae17c0c9eeefcd806a4cd65db1157e464cc | |
parent | b37629fc93fb1e306d2311dd841ed1b0cdd6bba2 (diff) | |
download | libguestfs-660933ce579916e4a8a8e2c6a1edaa3760f8bb0e.tar.gz libguestfs-660933ce579916e4a8a8e2c6a1edaa3760f8bb0e.tar.xz libguestfs-660933ce579916e4a8a8e2c6a1edaa3760f8bb0e.zip |
part-get-bootable: Fix when partitions are missing or unordered (RHBZ#602997).
The original fix for this in
commit 511c82df46f5c6f4a7f984fdb81d4691038ed6da was not complete, in
that it did not fix the case of the old (pre '-m' option) parted.
This doesn't matter for Fedora, but it matters for RHEL 5 which has
this ancient parted.
(cherry picked from commit 4d3ec25b47361601604e2f585178393e60f4cd4d)
-rw-r--r-- | daemon/parted.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/daemon/parted.c b/daemon/parted.c index 1a020f9b..ceefc4af 100644 --- a/daemon/parted.c +++ b/daemon/parted.c @@ -696,10 +696,22 @@ do_part_get_bootable (const char *device, int partnum) } size_t col = p - lines[header]; - /* Look for the line corresponding to this partition number. */ - row = start + partnum - 1; - if (row >= count_strings (lines) || !STRPREFIX (lines[row], " ")) { - reply_with_error ("partition number out of range: %d", partnum); + /* Partitions may not be in any order, so we have to look for + * the matching partition number (RHBZ#602997). + */ + int pnum; + for (row = start; lines[row] != NULL; ++row) { + if (sscanf (lines[row], " %d", &pnum) != 1) { + reply_with_error ("could not parse row from output of parted print command: %s", lines[row]); + free_strings (lines); + return -1; + } + if (pnum == partnum) + break; + } + + if (lines[row] == NULL) { + reply_with_error ("partition number %d not found", partnum); free_strings (lines); return -1; } |