[prev in list] [next in list] [prev in thread] [next in thread]
List: busybox
Subject: Patch -- enhance -s option in ubi_tools to allow multiplier
From: "Paul B. Henson" <henson () acm ! org>
Date: 2013-05-29 1:24:02
Message-ID: 20130529012402.GQ30773 () bender ! unx ! csupomona ! edu
[Download RAW message or body]
This patch enhances the -s option in the ubi_tools applets to allow a
size multiplier of KiB, MiB, or GiB to match the functionality in the
ubi tools in the mtd-utils package.
It's based on top of the -m patch I submitted earlier today.
Please consider this for inclusion, and let me know if there are any
fixes or changes required.
Thanks...
["0001-ubi_tools-enhance-s-option-to-allow-size-multiplier-.patch" (text/x-diff)]
From 23e92bdffda2dacf774b061593aa300501b5f8b3 Mon Sep 17 00:00:00 2001
From: "Paul B. Henson" <henson@acm.org>
Date: Tue, 28 May 2013 18:17:42 -0700
Subject: [PATCH] ubi_tools: enhance -s option to allow size multiplier to
match mtd-utils
Signed-off-by: Paul B. Henson <henson@acm.org>
---
miscutils/ubi_tools.c | 57 +++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 48 insertions(+), 9 deletions(-)
diff --git a/miscutils/ubi_tools.c b/miscutils/ubi_tools.c
index 6cb7cd5..87dfab0 100644
--- a/miscutils/ubi_tools.c
+++ b/miscutils/ubi_tools.c
@@ -103,7 +103,8 @@
//usage: "\n -n VOLID Volume ID, if not specified, it"
//usage: "\n will be assigned automatically"
//usage: "\n -N NAME Volume name"
-//usage: "\n -s SIZE Size in bytes"
+//usage: "\n -s SIZE Size in bytes, kilobytes (KiB),"
+//usage: "\n megabytes (MiB), or gigabytes (GiB)"
//usage: "\n -t TYPE Volume type (static|dynamic)"
//usage:
//usage:#define ubirmvol_trivial_usage
@@ -117,15 +118,45 @@
//usage:#define ubirsvol_full_usage "\n\n"
//usage: "Resize UBI volume\n"
//usage: "\n -n VOLID Volume ID to resize"
-//usage: "\n -s SIZE Size in bytes"
+//usage: "\n -s SIZE Size in bytes, kilobytes (KiB),"
+//usage: "\n megabytes (MiB), or gigabytes (GiB)"
//usage:
//usage:#define ubiupdatevol_trivial_usage
//usage: "UBI_DEVICE [IMG_FILE]"
//usage:#define ubiupdatevol_full_usage "\n\n"
//usage: "Update UBI volume\n"
//usage: "\n -t Truncate UBI volume"
-//usage: "\n -s SIZE Bytes in input (if reading stdin)"
+//usage: "\n -s SIZE Bytes, kilobytes (KiB), megabytes (MiB),"
+//usage: "\n or gigabytes (GiB) in input (if reading stdin)"
+static int get_bytes(const char *str)
+{
+ int found;
+ int size = 0;
+ char multiplier[4];
+
+ found = sscanf(str, "%d%3s", &size, multiplier);
+
+ if (found == 2) {
+ if (!strcmp(multiplier, "KiB")) {
+ size *= 1024;
+ } else
+ if (!strcmp(multiplier, "MiB")) {
+ size *= 1024*1024;
+ } else
+ if (!strcmp(multiplier, "GiB")) {
+ size *= 1024*1024*1024;
+ } else {
+ bb_error_msg_and_die("%s invalid size specifier - should be KiB, MiB or GiB", "UBI");
+ }
+ }
+
+ if (found == 0 || size <= 0) {
+ bb_error_msg_and_die("%s invalid size", "UBI");
+ }
+
+ return size;
+}
int ubi_tools_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int ubi_tools_main(int argc UNUSED_PARAM, char **argv)
@@ -138,21 +169,22 @@ int ubi_tools_main(int argc UNUSED_PARAM, char **argv)
int dev_num = UBI_DEV_NUM_AUTO;
int vol_id = UBI_VOL_NUM_AUTO;
char *vol_name = NULL;
+ char *size_str = NULL;
int size_bytes;
int alignment = 1;
char *type = NULL;
if (do_mkvol) {
- opt_complementary = "-1:d+:n+:s+:a+";
+ opt_complementary = "-1:d+:n+:a+";
opts = getopt32(argv, "md:n:N:s:a:t::",
&dev_num, &vol_id,
- &vol_name, &size_bytes, &alignment, &type
+ &vol_name, &size_str, &alignment, &type
);
} else {
- opt_complementary = "-1:m+:d+:n+:s+:a+";
+ opt_complementary = "-1:m+:d+:n+:a+";
opts = getopt32(argv, "m:d:n:N:s:a:t::",
&mtd_num, &dev_num, &vol_id,
- &vol_name, &size_bytes, &alignment, &type
+ &vol_name, &size_str, &alignment, &type
);
}
ubi_ctrl = argv[optind];
@@ -206,8 +238,11 @@ int ubi_tools_main(int argc UNUSED_PARAM, char **argv)
if (size_bytes <= 0)
bb_error_msg_and_die("%s invalid maximum size calculated", "UBI");
} else
- if (!(opts & OPTION_s))
+ if (opts & OPTION_s) {
+ size_bytes = get_bytes(size_str);
+ } else {
bb_error_msg_and_die("%s size not specified", "UBI");
+ }
if (!(opts & OPTION_N))
bb_error_msg_and_die("%s name not specified", "UBI");
vol_name_len = strlen(vol_name);
@@ -239,8 +274,11 @@ int ubi_tools_main(int argc UNUSED_PARAM, char **argv)
} else
if (do_rsvol) {
struct ubi_rsvol_req req;
- if (!(opts & OPTION_s))
+ if (opts & OPTION_s) {
+ size_bytes = get_bytes(size_str);
+ } else {
bb_error_msg_and_die("%s size not specified", "UBI");
+ }
if (!(opts & OPTION_n))
bb_error_msg_and_die("%s volume id not specified", "UBI");
@@ -279,6 +317,7 @@ int ubi_tools_main(int argc UNUSED_PARAM, char **argv)
bb_error_msg_and_die("%s could not get LEB size", "UBI");
if (opts & OPTION_s) {
+ size_bytes = get_bytes(size_str);
input_fd = 0;
} else {
if (!argv[optind+1])
--
1.7.8.6
_______________________________________________
busybox mailing list
busybox@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic