New test mode that allows run_parts to fail silently if the directory
authorGlenn L McGrath <bug1@ihug.co.nz>
Mon, 20 Jan 2003 23:50:59 +0000 (23:50 -0000)
committerGlenn L McGrath <bug1@ihug.co.nz>
Mon, 20 Jan 2003 23:50:59 +0000 (23:50 -0000)
is not found. Patch from Bastian Blank

include/libbb.h
libbb/run_parts.c
networking/ifupdown.c

index a827ba612ed3f193a38636afd2b4213e53d360fd..d67bf07eced7fd6b1acfab357f4526b0cdb2fa48 100644 (file)
@@ -86,11 +86,11 @@ char *strtok_r(char *s, const char *delim, char **ptrptr);
 extern void show_usage(void) __attribute__ ((noreturn));
 extern void error_msg(const char *s, ...) __attribute__ ((format (printf, 1, 2)));
 extern void error_msg_and_die(const char *s, ...) __attribute__ ((noreturn, format (printf, 1, 2)));
-extern void perror_msg(const char *s, ...);
-extern void perror_msg_and_die(const char *s, ...) __attribute__ ((noreturn));
+extern void perror_msg(const char *s, ...) __attribute__ ((format (printf, 1, 2)));
+extern void perror_msg_and_die(const char *s, ...) __attribute__ ((noreturn, format (printf, 1, 2)));
 extern void vherror_msg(const char *s, va_list p);
-extern void herror_msg(const char *s, ...);
-extern void herror_msg_and_die(const char *s, ...) __attribute__ ((noreturn));
+extern void herror_msg(const char *s, ...) __attribute__ ((format (printf, 1, 2)));
+extern void herror_msg_and_die(const char *s, ...) __attribute__ ((noreturn, format (printf, 1, 2)));
 
 /* These two are used internally -- you shouldn't need to use them */
 extern void verror_msg(const char *s, va_list p);
index 5fae80592e311f1ae3352d4d00ed454e6a45b2e7..7829a84baafd25646b25c7970f2af5374db631d0 100644 (file)
@@ -43,8 +43,10 @@ static int valid_name(const struct dirent *d)
        return 1;
 }
 
-/* run_parts */
-/* Find the parts to run & call run_part() */
+/* test mode = 1 is the same as offical run_parts
+ * test_mode = 2 means to fail siliently on missing directories
+ */
+
 extern int run_parts(char **args, const unsigned char test_mode)
 {
        struct dirent **namelist = 0;
@@ -64,6 +66,9 @@ extern int run_parts(char **args, const unsigned char test_mode)
        entries = scandir(arg0, &namelist, valid_name, alphasort);
 
        if (entries == -1) {
+               if (test_mode & 2) {
+                       return(2);
+               }
                perror_msg_and_die("failed to open directory %s", arg0);
        }
 
@@ -75,8 +80,8 @@ extern int run_parts(char **args, const unsigned char test_mode)
                        perror_msg_and_die("failed to stat component %s", filename);
                }
                if (S_ISREG(st.st_mode) && !access(filename, X_OK)) {
-                       if (test_mode) {
-                               puts("%s", filename);
+                       if (test_mode & 1) {
+                               puts(filename);
                        } else {
                                /* exec_errno is common vfork variable */
                                volatile int exec_errno = 0;
index be09ea6e79cf4fa546017bfe31c895981a202681..f33dbc43c2914b2e7dea5140f0453f166c42875b 100644 (file)
@@ -1010,7 +1010,7 @@ static int execute_all(interface_defn_t *ifd, execfn *exec, const char *opt)
 
        buf = xmalloc(xstrlen(opt) + 19);
        sprintf(buf, "/etc/network/if-%s.d", opt);
-       run_parts(&buf, 0);
+       run_parts(&buf, 2);
        free(buf);
        return (1);
 }