changeset 31096:b6aeea949531

dir.m: Skip unnecessary parts if no output argument is requested. * scripts/miscellaneous/dir.m: Skip part of code (including possibly slow canonicalize_file_name) that is not necessary if no output argument is requested.
author Markus Mützel <markus.muetzel@gmx.de>
date Wed, 15 Jun 2022 20:00:35 +0200
parents cb03340f298f
children 97918dca79ed
files scripts/miscellaneous/dir.m
diffstat 1 files changed, 30 insertions(+), 26 deletions(-) [+]
line wrap: on
line diff
--- a/scripts/miscellaneous/dir.m	Mon Jun 13 14:10:22 2022 -0400
+++ b/scripts/miscellaneous/dir.m	Wed Jun 15 20:00:35 2022 +0200
@@ -150,36 +150,40 @@
         endif
         fn = regexprep (fn, re, '$2$3');
         info(++cnt).name = fn;
-        if (no_dir && ! strcmp (fn, "."))
-          tmpdir = ".";
+        if (nargout > 0)
+          if (no_dir && ! strcmp (fn, "."))
+            tmpdir = ".";
+          endif
+          if (! is_same_file (last_dir, tmpdir))
+            ## Caching mechanism to speed up function
+            last_dir = tmpdir;
+            if (ispc () && strncmp (last_dir, '\\', 2))
+              ## Windows UNC network file name is used as is
+              last_absdir = last_dir;
+            else
+              last_absdir = canonicalize_file_name (last_dir);
+            endif
+          endif
+          info(cnt).folder = last_absdir;
+          lt = localtime (st.mtime);
+          info(cnt).date = strftime ("%d-%b-%Y %T", lt);
+          info(cnt).bytes = st.size;
+          info(cnt).isdir = S_ISDIR (st.mode);
+          info(cnt).datenum = [lt.year + 1900, lt.mon + 1, lt.mday, ...
+                               lt.hour, lt.min, lt.sec];
+          info(cnt).statinfo = st;
         endif
-        if (! is_same_file (last_dir, tmpdir))
-          ## Caching mechanism to speed up function
-          last_dir = tmpdir;
-          if (ispc () && strncmp (last_dir, '\\', 2))
-            ## Windows UNC network file name is used as is
-            last_absdir = last_dir;
-          else
-            last_absdir = canonicalize_file_name (last_dir);
-          endif
-        endif
-        info(cnt).folder = last_absdir;
-        lt = localtime (st.mtime);
-        info(cnt).date = strftime ("%d-%b-%Y %T", lt);
-        info(cnt).bytes = st.size;
-        info(cnt).isdir = S_ISDIR (st.mode);
-        info(cnt).datenum = [lt.year + 1900, lt.mon + 1, lt.mday, ...
-                             lt.hour, lt.min, lt.sec];
-        info(cnt).statinfo = st;
       endif
     endfor
     info((cnt+1):end) = [];  # remove any unused entries
-    ## A lot of gymnastics in order to call datenum just once.  2x speed up.
-    dvec = [info.datenum]([[1:6:end]', [2:6:end]', [3:6:end]', ...
-                           [4:6:end]', [5:6:end]', [6:6:end]']);
-    dnum = datenum (dvec);
-    ctmp = mat2cell (dnum, ones (cnt,1), 1);
-    [info.datenum] = ctmp{:};
+    if (nargout > 0)
+      ## A lot of gymnastics in order to call datenum just once.  2x speed up.
+      dvec = [info.datenum]([[1:6:end]', [2:6:end]', [3:6:end]', ...
+                             [4:6:end]', [5:6:end]', [6:6:end]']);
+      dnum = datenum (dvec);
+      ctmp = mat2cell (dnum, ones (cnt,1), 1);
+      [info.datenum] = ctmp{:};
+    endif
   endif
 
   ## Return the output arguments.