--- a/src/scanner.c Sun Jun 28 14:29:39 2026 +0200 +++ b/src/scanner.c Sun Jun 28 15:57:44 2026 +0200 @@ -185,6 +185,13 @@ return list; } +static bool is_dir_excluded(string_list_t* list, char* dir) { + // TODO: implement + // assume normalized dir names in list (cline.c will make sure of it) + // remember to do case-insensitive comparison for WIN32 + return false; +} + void scanDirectory(scanner_t scanner, settings_t* settings, string_list_t* output, scanresult_t* result) { @@ -201,25 +208,31 @@ if (!S_ISREG(filelist->st_mode)) { if (S_ISDIR(filelist->st_mode)) { if (settings->recursive) { - string_list_t *recoutput = settings->verbose ? new_string_list_t() : NULL; - scanresult_t recresult; - recresult.ext = result->ext; - scanDirectory( - (scanner_t) {filelist->filename, scanner.spaces+1}, - settings, recoutput, &recresult); - result->result += recresult.result; - if (settings->verbose && (!settings->matchesOnly || recresult.result > 0)) { - outbuf = (char*) malloc(81); - snprintf(outbuf, 81, "%*s/%*s%13u %s\n", - filelist->displayname_len+scanner.spaces, filelist->displayname, - 60-filelist->displayname_len-scanner.spaces-1, "", - recresult.result, result_type); - add_string(output, outbuf); - for (unsigned i = 0 ; i < recoutput->count ; i++) { - add_string(output, recoutput->items[i]); + if (is_dir_excluded(settings->excludeDirs, filelist->filename)) { + if (!settings->matchesOnly && settings->verbose) { + // TODO: print "no match" } + } else { + string_list_t *recoutput = settings->verbose ? new_string_list_t() : NULL; + scanresult_t recresult; + recresult.ext = result->ext; + scanDirectory( + (scanner_t) {filelist->filename, scanner.spaces+1}, + settings, recoutput, &recresult); + result->result += recresult.result; + if (settings->verbose && (!settings->matchesOnly || recresult.result > 0)) { + outbuf = (char*) malloc(81); + snprintf(outbuf, 81, "%*s/%*s%13u %s\n", + filelist->displayname_len+scanner.spaces, filelist->displayname, + 60-filelist->displayname_len-scanner.spaces-1, "", + recresult.result, result_type); + add_string(output, outbuf); + for (unsigned i = 0 ; i < recoutput->count ; i++) { + add_string(output, recoutput->items[i]); + } + } + destroy_string_list_t(recoutput); } - destroy_string_list_t(recoutput); } } else if (!settings->matchesOnly && settings->verbose) { outbuf = (char*) malloc(81);