Problem : Commands in parted tool when passed with arguments throw a warning ======== and asks for the same arguments again.
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 <[email protected]> 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; _______________________________________________ parted-devel mailing list [email protected] http://lists.alioth.debian.org/mailman/listinfo/parted-devel

