changeset 23248:529c6d0c6684

dir.m: Improve performance by 2.3X (bug #50416). * dir.m: Replace for loop using fullfile with strcat. Replace call to fileparts in for loop with regexprep.
author Rik <rik@octave.org>
date Mon, 06 Mar 2017 09:31:32 -0800
parents d4834e9ac2e7
children 21fc54e4bb7b
files scripts/miscellaneous/dir.m
diffstat 1 files changed, 5 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/scripts/miscellaneous/dir.m	Mon Mar 06 10:58:55 2017 -0500
+++ b/scripts/miscellaneous/dir.m	Mon Mar 06 09:31:32 2017 -0800
@@ -105,13 +105,14 @@
     elseif (S_ISDIR (st.mode))
       flst = readdir (flst{1});
       nf = numel (flst);
-      for i = 1:nf
-        flst{i} = fullfile (fn, flst{i});
-      endfor
+      flst = strcat ([fn filesep], flst);
     endif
   endif
 
   if (numel (flst) > 0)
+
+    fs = regexptranslate ("escape", filesep);
+    re = sprintf ('(?:^|^.+[%s])([^%s.]*.[^%s]*)?$', fs, fs, fs);
     ## Collect results.
     for i = nf:-1:1
       fn = flst{i};
@@ -128,8 +129,7 @@
             st = xst;
           endif
         endif
-        [dummy, fn, ext] = fileparts (fn);
-        fn = [fn ext];
+        fn = regexprep (fn, re, '$1');
         info(i,1).name = fn;
         lt = localtime (st.mtime);
         info(i,1).date = strftime ("%d-%b-%Y %T", lt);