Index: libmap.c =================================================================== --- libmap.c (revision 232256) +++ libmap.c (working copy) @@ -8,6 +8,8 @@ #include #include #include +#include +#include #include "debug.h" #include "rtld.h" @@ -41,6 +43,7 @@ static int lm_count; static void lmc_parse (FILE *); +static void lmc_parse_dir (const char *); static void lm_add (const char *, const char *, const char *); static void lm_free (struct lm_list *); static char * lml_find (struct lm_list *, const char *); @@ -93,6 +96,34 @@ } static void +lmc_parse_dir (const char *include_directory) +{ + DIR *d; + struct dirent *dp; + char conffile[MAXPATHLEN]; + FILE *fp; + + d = opendir(include_directory); + if (d == NULL) + return; + + while ((dp = readdir(d)) != NULL) { + if (dp->d_ino == 0) + continue; + if (!strcmp(dp->d_name, ".") || !strcmp(dp->d_name, "..")) + continue; + if (dp->d_type != DT_REG && dp->d_type != DT_LNK) + continue; + fp = fopen(conffile, "r"); + if (fp) { + lmc_parse(fp); + fclose(fp); + } + } + closedir(d); +} + +static void lmc_parse (FILE *fp) { char *cp; @@ -170,7 +201,10 @@ if (!iseol(*cp)) continue; *cp = '\0'; - lm_add(p, f, t); + if (!strcmp(f, "includedir")) + lmc_parse_dir(t); + else + lm_add(p, f, t); } }