[parted-devel] [PATCH] fix for parted command arguments
Amit K. Arora
aarora at linux.vnet.ibm.com
Fri Jan 30 09:07:48 UTC 2009
On Mon, Jan 19, 2009 at 07:09:49PM +0530, Amit K. Arora wrote:
> Problem : Commands in parted tool when passed with arguments throw a warning
> ======== and asks for the same arguments again.
I haven't seen any response yet. Can someone please give their thoughts here ?
This is a minor fix for the unnecessary warning being seen when some
argument is passed to the command on the parted command prompt. Thanks.
Regards,
Amit Arora
>
> For example, if "mklabel" command is passed an argument in interactive
> format, it throws "parted: invalid token: <label arg>" warning message
> and asks for the disk type again. If no argument is passed, it works as
> expected.
>
> Sample output:
> # parted /dev/sdc
> GNU Parted 1.8.8
> Using /dev/sdc
> Welcome to GNU Parted! Type 'help' to view a list of commands.
> (parted) mklabel msdos
> Warning: The existing disk label on /dev/sdc will be destroyed and all
> data on this disk will be lost. Do you want to continue?
> parted: invalid token: msdos <<=== THIS
> Yes/No? Yes
> New disk label type? [gpt]? msdos
> (parted)
>
> According to the parted help and also the man page, "mklabel <label name>"
> syntax is correct and should work.
>
> Solution:
> ========
>
> This behavior is a side effect of the commit
> 0c2d6ba0757324c3975cbf10868f266fe6dbbbfe in git.
>
> Whats happening today is that when a user passes an argument to a
> command (eg. "mklabel msdos"), parted throws up a warning to user
> asking whether to continue or not and expects "Yes" or "No" as the
> answer. At this time the argument "msdos" has not been processed yet,
> and when the warning exception handling code tries to get the user input
> (yes/no), it finds "msdos" instead ! And hence throws error message of
> "parted: invalid token: msdos"
>
> This can be solved by changing the order of when the warning is thrown
> and when the argument list of parted commands is tried to be read. The
> attached patch reads the arguments first and then throws the warning.
> Please accept this patch. Thanks!
>
> --
> Regards,
> Amit Arora
>
> Signed-off-by: Amit K Arora <aarora at linux.vnet.ibm.com>
>
> diff -Nuarp parted-1.8.8.org/parted/parted.c parted-1.8.8/parted/parted.c
> --- parted-1.8.8.org/parted/parted.c 2009-01-19 03:20:37.000000000 -0600
> +++ parted-1.8.8/parted/parted.c 2009-01-19 03:20:37.000000000 -0600
> @@ -511,12 +511,11 @@ do_cp (PedDevice** dev)
> _("Can't copy an extended partition."));
> goto error_destroy_disk;
> }
> - if (!_partition_warn_busy (src))
> - goto error_destroy_disk;
> -
> if (!command_line_get_partition (_("Destination partition number?"),
> dst_disk, &dst))
> goto error_destroy_disk;
> + if (!_partition_warn_busy (src))
> + goto error_destroy_disk;
> if (!_partition_warn_busy (dst))
> goto error_destroy_disk;
>
> @@ -603,6 +602,9 @@ do_mklabel (PedDevice** dev)
> if (!disk) ped_exception_catch ();
> ped_exception_leave_all ();
>
> + if (!command_line_get_disk_type (_("New disk label type?"), &type))
> + goto error;
> +
> if (disk) {
> if (!_disk_warn_busy (disk))
> goto error_destroy_disk;
> @@ -612,9 +614,6 @@ do_mklabel (PedDevice** dev)
> ped_disk_destroy (disk);
> }
>
> - if (!command_line_get_disk_type (_("New disk label type?"), &type))
> - goto error;
> -
> disk = ped_disk_new_fresh (*dev, type);
> if (!disk)
> goto error;
> @@ -646,15 +645,15 @@ do_mkfs (PedDevice** dev)
> if (!disk)
> goto error;
>
> + if (!command_line_get_partition (_("Partition number?"), disk, &part))
> + goto error_destroy_disk;
> + if (!command_line_get_fs_type (_("File system type?"), &type))
> + goto error_destroy_disk;
> if (!opt_script_mode && !_partition_warn_loss())
> goto error_destroy_disk;
>
> - if (!command_line_get_partition (_("Partition number?"), disk, &part))
> - goto error_destroy_disk;
> if (!_partition_warn_busy (part))
> goto error_destroy_disk;
> - if (!command_line_get_fs_type (_("File system type?"), &type))
> - goto error_destroy_disk;
>
> fs = ped_file_system_create (&part->geom, type, g_timer);
> if (!fs)
> @@ -1046,8 +1045,6 @@ do_move (PedDevice** dev)
>
> if (!command_line_get_partition (_("Partition number?"), disk, &part))
> goto error_destroy_disk;
> - if (!_partition_warn_busy (part))
> - goto error_destroy_disk;
> if (part->type == PED_PARTITION_EXTENDED) {
> ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
> _("Can't move an extended partition."));
> @@ -1064,6 +1061,8 @@ do_move (PedDevice** dev)
> end = start + old_geom.length - 1;
> if (!command_line_get_sector (_("End?"), *dev, &end, &range_end))
> goto error_close_fs;
> + if (!_partition_warn_busy (part))
> + goto error_close_fs;
>
> /* set / test on "disk" */
> if (!ped_geometry_init (&new_geom, *dev, start, end - start + 1))
> @@ -1817,10 +1816,6 @@ do_resize (PedDevice** dev)
>
> if (!command_line_get_partition (_("Partition number?"), disk, &part))
> goto error_destroy_disk;
> - if (part->type != PED_PARTITION_EXTENDED) {
> - if (!_partition_warn_busy (part))
> - goto error_destroy_disk;
> - }
>
> start = part->geom.start;
> end = part->geom.end;
> @@ -1828,6 +1823,10 @@ do_resize (PedDevice** dev)
> goto error_destroy_disk;
> if (!command_line_get_sector (_("End?"), *dev, &end, &range_end))
> goto error_destroy_disk;
> + if (part->type != PED_PARTITION_EXTENDED) {
> + if (!_partition_warn_busy (part))
> + goto error_destroy_disk;
> + }
>
> if (!ped_geometry_init (&new_geom, *dev, start, end - start + 1))
> goto error_destroy_disk;
More information about the parted-devel
mailing list