New test mode that allows run_parts to fail silently if the directory

is not found. Patch from Bastian Blank
This commit is contained in:
Glenn L McGrath 2003-01-20 23:50:59 +00:00
parent aad465efb7
commit 2e51a14d57
3 changed files with 14 additions and 9 deletions

View File

@ -86,11 +86,11 @@ char *strtok_r(char *s, const char *delim, char **ptrptr);
extern void show_usage(void) __attribute__ ((noreturn)); extern void show_usage(void) __attribute__ ((noreturn));
extern void error_msg(const char *s, ...) __attribute__ ((format (printf, 1, 2))); 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 error_msg_and_die(const char *s, ...) __attribute__ ((noreturn, format (printf, 1, 2)));
extern void perror_msg(const char *s, ...); extern void perror_msg(const char *s, ...) __attribute__ ((format (printf, 1, 2)));
extern void perror_msg_and_die(const char *s, ...) __attribute__ ((noreturn)); 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 vherror_msg(const char *s, va_list p);
extern void herror_msg(const char *s, ...); extern void herror_msg(const char *s, ...) __attribute__ ((format (printf, 1, 2)));
extern void herror_msg_and_die(const char *s, ...) __attribute__ ((noreturn)); 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 */ /* These two are used internally -- you shouldn't need to use them */
extern void verror_msg(const char *s, va_list p); extern void verror_msg(const char *s, va_list p);

View File

@ -43,8 +43,10 @@ static int valid_name(const struct dirent *d)
return 1; return 1;
} }
/* run_parts */ /* test mode = 1 is the same as offical run_parts
/* Find the parts to run & call run_part() */ * test_mode = 2 means to fail siliently on missing directories
*/
extern int run_parts(char **args, const unsigned char test_mode) extern int run_parts(char **args, const unsigned char test_mode)
{ {
struct dirent **namelist = 0; 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); entries = scandir(arg0, &namelist, valid_name, alphasort);
if (entries == -1) { if (entries == -1) {
if (test_mode & 2) {
return(2);
}
perror_msg_and_die("failed to open directory %s", arg0); 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); perror_msg_and_die("failed to stat component %s", filename);
} }
if (S_ISREG(st.st_mode) && !access(filename, X_OK)) { if (S_ISREG(st.st_mode) && !access(filename, X_OK)) {
if (test_mode) { if (test_mode & 1) {
puts("%s", filename); puts(filename);
} else { } else {
/* exec_errno is common vfork variable */ /* exec_errno is common vfork variable */
volatile int exec_errno = 0; volatile int exec_errno = 0;

View File

@ -1010,7 +1010,7 @@ static int execute_all(interface_defn_t *ifd, execfn *exec, const char *opt)
buf = xmalloc(xstrlen(opt) + 19); buf = xmalloc(xstrlen(opt) + 19);
sprintf(buf, "/etc/network/if-%s.d", opt); sprintf(buf, "/etc/network/if-%s.d", opt);
run_parts(&buf, 0); run_parts(&buf, 2);
free(buf); free(buf);
return (1); return (1);
} }