nano

nano with my custom patches
git clone git://bsandro.tech/nano
Log | Files | Refs | README | LICENSE

commit 8a058d1f9a335a8422653b81b8dced77f5e90154
parent 677e9474f74bc7aea3d1c32408698433aac16908
Author: Benno Schulenberg <bensberg@justemail.net>
Date:   Thu, 13 Aug 2015 18:22:29 +0000

Speeding up the finding of the longest filename in the current folder.


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@5356 35c25a1d-7b9e-4130-9fde-d3aeb78583b8

Diffstat:
MChangeLog | 3+++
Msrc/browser.c | 31+++++++++++++------------------
2 files changed, 16 insertions(+), 18 deletions(-)

diff --git 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 diff --git a/src/browser.c b/src/browser.c @@ -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;