ubiupdatevol: fix bug with -sSIZE: was ignoring IMAGE_FILE
authorDenys Vlasenko <vda.linux@googlemail.com>
Mon, 7 Aug 2017 01:24:29 +0000 (03:24 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Mon, 7 Aug 2017 01:24:29 +0000 (03:24 +0200)
While at it, fix help text

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
miscutils/ubi_tools.c

index d9b76b69c7b178b88f73b06a50b2db0119048de3..494718ccfc7654775dad2105cb51e053c8627634 100644 (file)
@@ -298,7 +298,7 @@ int ubi_tools_main(int argc UNUSED_PARAM, char **argv)
        } else
 
 //usage:#define ubiupdatevol_trivial_usage
-//usage:       "[-t | [-s SIZE] IMG_FILE] UBI_DEVICE"
+//usage:       "-t UBI_DEVICE | [-s SIZE] UBI_DEVICE IMG_FILE"
 //usage:#define ubiupdatevol_full_usage "\n\n"
 //usage:       "Update UBI volume\n"
 //usage:     "\n       -t      Truncate to zero size"
@@ -313,7 +313,6 @@ int ubi_tools_main(int argc UNUSED_PARAM, char **argv)
                        xioctl(fd, UBI_IOCVOLUP, &bytes64);
                }
                else {
-                       struct stat st;
                        unsigned ubinum, volnum;
                        unsigned leb_size;
                        ssize_t len;
@@ -327,12 +326,15 @@ int ubi_tools_main(int argc UNUSED_PARAM, char **argv)
                        sprintf(path_sys_class_ubi_ubi, "%u_%u/usable_eb_size", ubinum, volnum);
                        leb_size = get_num_from_file(path, MAX_SANE_ERASEBLOCK, "Can't get usable eraseblock size from '%s'");
 
-                       if (!(opts & OPTION_s)) {
+                       if (!(opts & OPTION_t)) {
                                if (!*argv)
                                        bb_show_usage();
                                xmove_fd(xopen(*argv, O_RDONLY), STDIN_FILENO);
-                               xfstat(STDIN_FILENO, &st, *argv);
-                               size_bytes = st.st_size;
+                               if (!(opts & OPTION_s)) {
+                                       struct stat st;
+                                       xfstat(STDIN_FILENO, &st, *argv);
+                                       size_bytes = st.st_size;
+                               }
                        }
 
                        bytes64 = size_bytes;