src/scanner.c

changeset 79
e4592d0292e7
parent 76
d11c154e33e1
--- a/src/scanner.c	Sun Nov 10 14:06:03 2024 +0100
+++ b/src/scanner.c	Mon Apr 07 20:43:52 2025 +0200
@@ -199,27 +199,29 @@
 
     /* Scan subdirectories */
     if (!S_ISREG(filelist->st_mode)) {
-      if (settings->recursive && S_ISDIR(filelist->st_mode)) {
-        string_list_t *recoutput = new_string_list_t();
-        scanresult_t recresult;
-        recresult.ext = result->ext;
-        scanDirectory(
-            (scanner_t) {filelist->filename, scanner.spaces+1},
-            settings, recoutput, &recresult);
-        result->result += recresult.result;
-        if (!settings->matchesOnly || recoutput->count > 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 (S_ISDIR(filelist->st_mode)) {
+        if (settings->recursive) {
+          string_list_t *recoutput = new_string_list_t();
+          scanresult_t recresult;
+          recresult.ext = result->ext;
+          scanDirectory(
+              (scanner_t) {filelist->filename, scanner.spaces+1},
+              settings, recoutput, &recresult);
+          result->result += recresult.result;
+          if (!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 {
+      } else if (!settings->matchesOnly) {
         outbuf = (char*) malloc(81);
         snprintf(outbuf, 81, "%*s\n",
                  filelist->displayname_len+scanner.spaces,
@@ -288,7 +290,7 @@
 
           /* Print and sum line count */
           if (bfile) {
-            if (!settings->matchesOnly) {
+            if (!settings->matchesOnly && !settings->dirsOnly) {
               outbuf = (char*) malloc(81);
               snprintf(outbuf, 81,
                   "%*s%*s%19s\n", filelist->displayname_len+scanner.spaces,
@@ -299,20 +301,22 @@
           } else {
             addResultPerExtension(result->ext, filelist->ext, res_value);
             result->result += res_value;
-            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,
-                     "",
-                     res_value,
-                     result_type
-            );
-            add_string(output, outbuf);
+            if (!settings->dirsOnly) {
+              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,
+                       "",
+                       res_value,
+                       result_type
+              );
+              add_string(output, outbuf);
+            }
           }
         }
       } else {
-        if (!settings->matchesOnly) {
+        if (!settings->matchesOnly && !settings->dirsOnly) {
           /* Print hint */
           outbuf = (char*) malloc(81);
           snprintf(outbuf, 81, "%*s%*s%19s\n",

mercurial