diff -ruN udev-018.orig/namedev_parse.c udev-018/namedev_parse.c --- udev-018.orig/namedev_parse.c 2004-02-19 19:38:35.000000000 +0100 +++ udev-018/namedev_parse.c 2004-02-21 15:30:29.000000000 +0100 @@ -114,7 +114,32 @@ return NULL; } -int namedev_init_rules(void) +static int call_foreach_file(int parser (const char *f) , char *filenames) +{ + char *start = filenames; + int retval = 0; + + while (1) { + char *end, *file; + + for (end = start; !isspace(*end) && *end != '\0'; end++) + ; + + file = malloc(end - start + 1); + strncpy(file, start, end - start); + file[end - start] = '\0'; + retval += parser(file); + free(file); + + if (*end == '\0') + break; + start = end + 1; + } + + return retval; +} + +static int namedev_parse_rules(const char *filename) { char line[255]; int lineno; @@ -127,11 +152,11 @@ int retval = 0; struct config_device dev; - fd = fopen(udev_rules_filename, "r"); + fd = fopen(filename, "r"); if (fd != NULL) { - dbg("reading '%s' as rules file", udev_rules_filename); + dbg("reading '%s' as rules file", filename); } else { - dbg("can't open '%s' as a rules file", udev_rules_filename); + dbg("can't open '%s' as a rules file", filename); return -ENODEV; } @@ -262,7 +287,7 @@ continue; error: dbg("%s:%d:%d: parse error, rule skipped", - udev_rules_filename, lineno, temp - line); + filename, lineno, temp - line); } } exit: @@ -270,6 +295,11 @@ return retval; } +int namedev_init_rules(void) +{ + return call_foreach_file(namedev_parse_rules, udev_rules_filename); +} + int namedev_init_permissions(void) { char line[255];