src/scanner.c

changeset 90
9b541d22d649
parent 82
44b3332dfe03
--- 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);

mercurial