diff --git a/src/xpdev/ini_file.c b/src/xpdev/ini_file.c index 7c5601a72bf982652ee4519418b97c6f4646c472..af44d4160fffdb0b1fc7ceea2c06c21d63b8a6cf 100644 --- a/src/xpdev/ini_file.c +++ b/src/xpdev/ini_file.c @@ -2307,6 +2307,7 @@ BOOL iniCloseFile(FILE* fp) str_list_t iniReadFile(FILE* fp) { char str[INI_MAX_LINE_LEN]; + char err[512]; char* p; size_t i; size_t inc_len; @@ -2328,19 +2329,29 @@ str_list_t iniReadFile(FILE* fp) p=list[i]+inc_len; SKIP_WHITESPACE(p); truncsp(p); - if(inc_counter >= INI_INCLUDE_MAX) - SAFEPRINTF2(str, ";%s - MAXIMUM INCLUDES REACHED: %u", list[i], INI_INCLUDE_MAX); - else if((insert_fp=fopen(p,"r"))==NULL) - SAFEPRINTF2(str, ";%s - FAILURE: %s", list[i], STRERROR(errno)); - else - SAFEPRINTF(str, ";%s", list[i]); + glob_t gl; + glob(p, GLOB_MARK, NULL, &gl); + safe_snprintf(str, sizeof(str), "; %s - %lu matches found", list[i], (ulong)gl.gl_pathc); strListReplace(list, i, str); - if(insert_fp!=NULL) { - strListInsertFile(insert_fp, &list, i+1, INI_MAX_LINE_LEN); - fclose(insert_fp); - insert_fp=NULL; - inc_counter++; + for(size_t j = 0; j < gl.gl_pathc; j++) { + char* fname = gl.gl_pathv[j]; + if(*lastchar(fname) == '/') + continue; + if(inc_counter >= INI_INCLUDE_MAX) + SAFEPRINTF2(str, "; %s - MAXIMUM INCLUDES REACHED: %u", fname, INI_INCLUDE_MAX); + else if((insert_fp=fopen(fname,"r"))==NULL) + SAFEPRINTF2(str, "; %s - FAILURE: %s", fname, safe_strerror(errno, err, sizeof(err))); + else + SAFEPRINTF(str, "; %s", fname); + strListInsert(&list, str, i + 1); + if(insert_fp!=NULL) { + strListInsertFile(insert_fp, &list, i + 2, INI_MAX_LINE_LEN); + fclose(insert_fp); + insert_fp=NULL; + inc_counter++; + } } + globfree(&gl); } }