[PATCH] Convert sscanf to preferred xstrtou conversion.

Paul B. Henson henson at acm.org
Sun Jun 2 19:49:49 UTC 2013


Signed-off-by: Paul B. Henson <henson at acm.org>
---
 miscutils/ubi_tools.c |   17 ++++++++++++-----
 1 files changed, 12 insertions(+), 5 deletions(-)

diff --git a/miscutils/ubi_tools.c b/miscutils/ubi_tools.c
index dd99a44..9e3db1e 100644
--- a/miscutils/ubi_tools.c
+++ b/miscutils/ubi_tools.c
@@ -234,16 +234,23 @@ int ubi_tools_main(int argc UNUSED_PARAM, char **argv)
 			ssize_t len;
 			char *input_data;
 
-			// Make assumption that device not is in normal format.
-			// Removes need for scanning sysfs tree as full libubi does
-			if (sscanf(ubi_ctrl, "/dev/ubi%u_%u", &ubinum, &volnum) != 2)
+			// Make assumption that device node is in normal format
+			// (/dev/ubi%d_%d), removes need for scanning sysfs
+			// tree as full libubi does
+			if (strncmp(ubi_ctrl, "/dev/ubi", 8) != 0 ||
+			    (input_data = strchr(ubi_ctrl+8, '_')) == NULL)
 				bb_error_msg_and_die("%s volume node not in correct format", "UBI");
+			// temporarily tokenize for parsing
+			*input_data = '\0';
+			ubinum = xstrtou(ubi_ctrl+8, 10);
+			volnum = xstrtou(input_data+1, 10);
+			// restore original string
+			*input_data = '_';
 
 			sprintf(buf, "/sys/class/ubi/ubi%u_%u/usable_eb_size", ubinum, volnum);
 			if (open_read_close(buf, buf, sizeof(buf)) <= 0)
 				bb_error_msg_and_die("%s could not get LEB size", "UBI");
-			if (sscanf(buf, "%u", &leb_size) != 1)
-				bb_error_msg_and_die("%s could not get LEB size", "UBI");
+			leb_size = xstrtou(buf, 10);
 
 			if (opts & OPTION_s) {
 				input_fd = 0;
-- 
1.7.8.6



More information about the busybox mailing list