]> git.wh0rd.org Git - nano.git/commitdiff
Speeding up the finding of the longest filename in the current folder.
authorBenno Schulenberg <bensberg@justemail.net>
Thu, 13 Aug 2015 18:22:29 +0000 (18:22 +0000)
committerBenno Schulenberg <bensberg@justemail.net>
Thu, 13 Aug 2015 18:22:29 +0000 (18:22 +0000)
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@5356 35c25a1d-7b9e-4130-9fde-d3aeb78583b8

ChangeLog
src/browser.c

index 66b55d0448a0a5ba87bc96c68dbeef07bd9ec061..f07db6b28ffdc2c4f4d598be526eb7ccccfaf95a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,9 @@
 2015-08-13  Benno Schulenberg  <bensberg@justemail.net>
        * src/search.c (do_find_bracket): Remove mistaken comparison between
        pointer and literal character.  Found with cppcheck.
+       * src/browser.c (browser_init): Speed up the finding of the longest
+       filename: don't limit the value to that of COLS all the time, as this
+       is done later anyway, and don't bother skipping the dot entry.
 
 2015-08-12  Benno Schulenberg  <bensberg@justemail.net>
        * src/chars.c: UTF-8 is a stateless encoding, so there is no need to
index be8a404d4b583f064004f24b3feb2b60fe7bf8c0..d5325f84a6ca11ff08c5124ba652a444dea983f0 100644 (file)
@@ -436,29 +436,30 @@ void browser_init(const char *path, DIR *dir)
 
     assert(path != NULL && path[strlen(path) - 1] == '/' && dir != NULL);
 
-    /* Set longest to zero, just before we initialize it. */
     longest = 0;
 
+    /* Find the length of the longest filename in the current folder. */
     while ((nextdir = readdir(dir)) != NULL) {
-       size_t d_len;
+       size_t name_len = strlenpt(nextdir->d_name);
 
-       /* Don't show the "." entry. */
-       if (strcmp(nextdir->d_name, ".") == 0)
-           continue;
-
-       d_len = strlenpt(nextdir->d_name);
-       if (d_len > longest)
-           longest = (d_len > COLS) ? COLS : d_len;
+       if (name_len > longest)
+           longest = name_len;
 
        i++;
     }
 
-    rewinddir(dir);
-
-    /* Put 10 columns' worth of blank space between columns of filenames
+    /* Put 10 characters' worth of blank space between columns of filenames
      * in the list whenever possible, as Pico does. */
     longest += 10;
 
+    /* Make sure longest is between 15 and COLS. */
+    if (longest < 15)
+       longest = 15;
+    if (longest > COLS)
+       longest = COLS;
+
+    rewinddir(dir);
+
     if (filelist != NULL)
        free_chararray(filelist, filelist_len);
 
@@ -486,12 +487,6 @@ void browser_init(const char *path, DIR *dir)
 
     closedir(dir);
 
-    /* Make sure longest is between 15 and COLS. */
-    if (longest < 15)
-       longest = 15;
-    if (longest > COLS)
-       longest = COLS;
-
     /* Set width to zero, just before we initialize it. */
     width = 0;