Fixup standalong makedevs to handle regular files, and also fix
authorEric Andersen <andersen@codepoet.org>
Mon, 18 Jul 2005 20:06:49 +0000 (20:06 -0000)
committerEric Andersen <andersen@codepoet.org>
Mon, 18 Jul 2005 20:06:49 +0000 (20:06 -0000)
it to properly update file permissions as specified.

target/makedevs/makedevs.c

index 0f166dfd237b3fb5bd26be3eb4eb88c95d4aa9c3..08378e288699ce86197f066fbd11af0e5bdf3a5a 100644 (file)
@@ -443,7 +443,30 @@ int main(int argc, char **argv)
                                ret = EXIT_FAILURE;
                                goto loop;
                        }
-               } else {
+                       if ((mode != -1) && (chmod(full_name, mode) < 0)){
+                               bb_perror_msg("line %d: chmod failed for %s", linenum, full_name);
+                               ret = EXIT_FAILURE;
+                               goto loop;
+                       }
+               } else if (type == 'f') {
+                       struct stat st;
+                       if ((stat(full_name, &st) < 0 || !S_ISREG(st.st_mode))) {
+                               bb_perror_msg("line %d: regular file '%s' does not exist", linenum, full_name);
+                               ret = EXIT_FAILURE;
+                               goto loop;
+                       }
+                       if (chown(full_name, uid, gid) == -1) {
+                               bb_perror_msg("line %d: chown failed for %s", linenum, full_name);
+                               ret = EXIT_FAILURE;
+                               goto loop;
+                       }
+                       if ((mode != -1) && (chmod(full_name, mode) < 0)){
+                               bb_perror_msg("line %d: chmod failed for %s", linenum, full_name);
+                               ret = EXIT_FAILURE;
+                               goto loop;
+                       }
+               } else
+               {
                        dev_t rdev;
 
                        if (type == 'p') {
@@ -476,6 +499,10 @@ int main(int argc, char **argv)
                                                bb_perror_msg("line %d: chown failed for %s", linenum, full_name_inc);
                                                ret = EXIT_FAILURE;
                                        }
+                                       if ((mode != -1) && (chmod(full_name_inc, mode) < 0)){
+                                               bb_perror_msg("line %d: chmod failed for %s", linenum, full_name_inc);
+                                               ret = EXIT_FAILURE;
+                                       }
                                }
                                free(full_name_inc);
                        } else {
@@ -488,6 +515,10 @@ int main(int argc, char **argv)
                                        bb_perror_msg("line %d: chown failed for %s", linenum, full_name);
                                        ret = EXIT_FAILURE;
                                }
+                               if ((mode != -1) && (chmod(full_name, mode) < 0)){
+                                       bb_perror_msg("line %d: chmod failed for %s", linenum, full_name);
+                                       ret = EXIT_FAILURE;
+                               }
                        }
                }
 loop: