makedevs: code shrink
authorDenys Vlasenko <vda.linux@googlemail.com>
Thu, 6 Jul 2017 00:17:24 +0000 (02:17 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Thu, 6 Jul 2017 00:17:24 +0000 (02:17 +0200)
function                                             old     new   delta
makedevs_main                                       1071    1052     -19

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

index fec1045e4a10ff4101aed9f0728a7edba0e662ca..f436b08f839404afdee03aaedbe7f2514d5f3c2b 100644 (file)
@@ -262,9 +262,7 @@ int makedevs_main(int argc UNUSED_PARAM, char **argv)
                        if (chmod(full_name, mode) < 0)
                                goto chmod_fail;
                } else {
-                       dev_t rdev;
                        unsigned i;
-                       char *full_name_inc;
 
                        if (type == 'p') {
                                mode |= S_IFIFO;
@@ -278,26 +276,29 @@ int makedevs_main(int argc UNUSED_PARAM, char **argv)
                                continue;
                        }
 
-                       full_name_inc = xmalloc(strlen(full_name) + sizeof(int)*3 + 2);
-                       if (count)
+                       if (count != 0)
                                count--;
-                       for (i = start; i <= start + count; i++) {
-                               sprintf(full_name_inc, count ? "%s%u" : "%s", full_name, i);
-                               rdev = makedev(major, minor + (i - start) * increment);
-                               if (mknod(full_name_inc, mode, rdev) != 0
+                       for (i = 0; i <= count; i++) {
+                               dev_t rdev;
+                               char *nameN = full_name;
+                               if (count != 0)
+                                       nameN = xasprintf("%s%u", full_name, start + i);
+                               rdev = makedev(major, minor + i * increment);
+                               if (mknod(nameN, mode, rdev) != 0
                                 && errno != EEXIST
                                ) {
-                                       bb_perror_msg("line %d: can't create node %s", linenum, full_name_inc);
+                                       bb_perror_msg("line %d: can't create node %s", linenum, nameN);
                                        ret = EXIT_FAILURE;
-                               } else if (chown(full_name_inc, uid, gid) < 0) {
-                                       bb_perror_msg("line %d: can't chown %s", linenum, full_name_inc);
+                               } else if (chown(nameN, uid, gid) < 0) {
+                                       bb_perror_msg("line %d: can't chown %s", linenum, nameN);
                                        ret = EXIT_FAILURE;
-                               } else if (chmod(full_name_inc, mode) < 0) {
-                                       bb_perror_msg("line %d: can't chmod %s", linenum, full_name_inc);
+                               } else if (chmod(nameN, mode) < 0) {
+                                       bb_perror_msg("line %d: can't chmod %s", linenum, nameN);
                                        ret = EXIT_FAILURE;
                                }
+                               if (count != 0)
+                                       free(nameN);
                        }
-                       free(full_name_inc);
                }
        }
        if (ENABLE_FEATURE_CLEAN_UP)