# HG changeset patch # User Markus Mützel # Date 1655316035 -7200 # Node ID b6aeea9495317f413061bbc31d24f140fb38c6ab # Parent cb03340f298f755b32b88761643e18dbba95a46c 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. diff -r cb03340f298f -r b6aeea949531 scripts/miscellaneous/dir.m --- 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.