[PATCH] add ubiupdatevol applet
Baruch Siach
baruch at tkos.co.il
Fri Apr 1 13:35:03 UTC 2011
Hi Reuben,
On Fri, Apr 01, 2011 at 02:37:20PM +1300, Reuben Dowle wrote:
> This patch adds the ubiupdatevol applet (from mtd-utils) to busybox.
>
> This version of ubiupdatevol makes some assumptions about the naming of ubi device nodes, to avoid the complexity of scanning and probing devices nodes as libubi does in the full version of ubiupdatevol.
>
> Signed-off-by: Reuben Dowle <reuben.dowle at navico.com>
> ---
[snip]
> @@ -102,12 +112,20 @@
> //usage: "\n -n VOLID Volume ID"
> //usage:
> //usage:#define ubirsvol_trivial_usage
> -//usage: "UBI_DEVICE -N NAME -s SIZE"
> +//usage: "UBI_DEVICE -n VOLID -s SIZE"
This is an unrelated bug fix. It should go in a separate patch.
> //usage:#define ubirsvol_full_usage "\n\n"
> //usage: "Resize UBI Volume\n"
> //usage: "\nOptions:"
> -//usage: "\n -N NAME Volume name"
> +//usage: "\n -n VOLID Volume ID to resize"
Ditto.
> //usage: "\n -s SIZE Size in bytes"
> +//usage:
> +//usage:#define ubiupdatevol_trivial_usage
> +//usage: "<UBI device node> UBI_VOL_DEV IMG_FILE"
> +//usage:#define ubiupdatevol_full_usage "\n\n"
> +//usage: "Update UBI Volume\n"
> +//usage: "\nOptions:"
> +//usage: "\n -t truncate UBI volume"
> +//usage: "\n -s SIZE bytes in input (if not reading from file)"
>
> int ubi_tools_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
> int ubi_tools_main(int argc UNUSED_PARAM, char **argv)
[snip]
> + else
> + {
> + // Make assumption that device name is in normal format. Removes need for scanning sysfs tree as full libubi does
> + if (sscanf(ubi_ctrl, "/dev/ubi%d_%d", &ubinum, &volnum) != 2)
> + bb_error_msg_and_die("%s volume node not in correct format", "UBI");
> +
> + snprintf(buf, sizeof(buf), "/sys/class/ubi/ubi%d_%d/usable_eb_size", ubinum, volnum);
> + sysfs_fd = xopen(buf, O_RDONLY);
> + if (!sysfs_fd)
> + bb_error_msg_and_die("%s sysfs not accessible", "UBI");
Redundant. xopen() never returns on error. And besides, 0 is a valid file
descriptor.
> + if (full_read(sysfs_fd, buf, sizeof(buf)) <= 0)
> + bb_error_msg_and_die("%s sysfs not accessible", "UBI");
A "not accessible" error message seems misleading when full_read() returns 0.
> + if (ENABLE_FEATURE_CLEAN_UP)
> + close(sysfs_fd);
> + if (sscanf(buf, "%d", &leb_size) != 1)
> + bb_error_msg_and_die("%s sysfs not accessible", "UBI");
The "not accessible" error message looks inappropriate here.
> + input_data = (char *)xmalloc(leb_size);
> + if (opts & OPTION_s)
> + input_fd = 0;
> + else
> + {
> + if (stat(argv[optind+1], &st))
> + bb_error_msg_and_die("%s volume input file missing", "UBI");
> + size_bytes = st.st_size;
> + input_fd = xopen(argv[optind+1], O_RDONLY);
> + if (!input_fd)
> + bb_error_msg_and_die("%s volume input file missing", "UBI");
Redundant. See above.
> + }
> +
> + bytes = size_bytes;
> + xioctl(fd, UBI_IOCVOLUP, &bytes);
> +
> + while ((len = full_read(input_fd, input_data, leb_size)) > 0)
> + {
> + if (full_write(fd, input_data, leb_size) != leb_size)
> + bb_error_msg_and_die("%s volume update failed", "UBI");
> + }
> + if (ENABLE_FEATURE_CLEAN_UP)
> + close(input_fd);
> + if (len < 0)
> + bb_error_msg_and_die("%s volume update failed", "UBI");
I'd put this before the close() above. This should make it more apparent that
this error handling relates to the full_read() above.
> + }
> }
>
> if (ENABLE_FEATURE_CLEAN_UP)
>
>
> _______________________________________________
> busybox mailing list
> busybox at busybox.net
> http://lists.busybox.net/mailman/listinfo/busybox
--
~. .~ Tk Open Systems
=}------------------------------------------------ooO--U--Ooo------------{=
- baruch at tkos.co.il - tel: +972.2.679.5364, http://www.tkos.co.il -
More information about the busybox
mailing list