]> Sergey Matveev's repositories - nnn.git/commitdiff
realloc() 32 entries at a time
authorArun Prakash Jana <engineerarun@gmail.com>
Tue, 11 Apr 2017 13:46:06 +0000 (19:16 +0530)
committerArun Prakash Jana <engineerarun@gmail.com>
Tue, 11 Apr 2017 14:52:45 +0000 (20:22 +0530)
README.md
nnn.c

index 964055463fb8dda589bf7842b2093d364444f9da..8dff3d400438495f8c39b01ad2b167f931db2267 100644 (file)
--- a/README.md
+++ b/README.md
@@ -48,7 +48,7 @@ I chose to fork because:
 ### Original features
 
 - Super-easy navigation
-- Pre-defined associaitons for different file types
+- Pre-defined associations for different file types
 - Jump to home directory
 - Filter contents in current directory
 - Show/hide hidden files
@@ -108,8 +108,8 @@ The following top excerpt shows the difference in nnn and ncdu memory usage whil
 
 ```
   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
- 6054 vaio      20   0   56768  45268   2300 S   0.0  0.9   0:02.82 ncdu
-10806 vaio      20   0   21228   8572   2432 S   0.0  0.2   0:00.07 nnn -d
+10406 vaio      20   0   53808  42284   2248 S   0.0  0.8   0:00.82 ncdu
+10409 vaio      20   0   20452   9172   2356 S   0.0  0.2   0:00.83 nnn -d
 ```
 
 ### Installation
diff --git a/nnn.c b/nnn.c
index 9dc7afbc7133f50bd659e02f52b445b09ddcf0f4..318fffe756731cee7385c557d6919730ddbcc89e 100644 (file)
--- a/nnn.c
+++ b/nnn.c
@@ -149,26 +149,6 @@ static void printmsg(char *);
 static void printwarn(void);
 static void printerr(int, char *);
 
-static void *
-xmalloc(size_t size)
-{
-       void *p = malloc(size);
-       if (p == NULL)
-               printerr(1, "malloc");
-       return p;
-}
-
-#if 0
-static void *
-xrealloc(void *p, size_t size)
-{
-       p = realloc(p, size);
-       if (p == NULL)
-               printerr(1, "realloc");
-       return p;
-}
-#endif
-
 static rlim_t
 max_openfds()
 {
@@ -1022,34 +1002,21 @@ dentfill(char *path, struct entry **dents,
        if (dirp == NULL)
                return 0;
 
-       long pos = telldir(dirp);
-       while ((dp = readdir(dirp)) != NULL) {
-               if (filter(re, dp->d_name) == 0)
-                       continue;
-
-               n++;
-       }
-
-       if (filter(re, ".") != 0)
-               n--;
-       if (filter(re, "..") != 0)
-               n--;
-       if (n == 0)
-               return n;
-
-       *dents = xmalloc(n * sizeof(**dents));
-       n = 0;
-
-       seekdir(dirp, pos);
-
        while ((dp = readdir(dirp)) != NULL) {
                /* Skip self and parent */
                if ((dp->d_name[0] == '.' && (dp->d_name[1] == '\0' ||
                    (dp->d_name[1] == '.' && dp->d_name[2] == '\0'))))
                        continue;
+
                if (filter(re, dp->d_name) == 0)
                        continue;
-               //*dents = xrealloc(*dents, (n + 1) * sizeof(**dents));
+
+               if (((n >> 5) << 5) == n) {
+                       *dents = realloc(*dents, (n + 32) * sizeof(**dents));
+                       if (*dents == NULL)
+                               printerr(1, "realloc");
+               }
+
                xstrlcpy((*dents)[n].name, dp->d_name, sizeof((*dents)[n].name));
                /* Get mode flags */
                mkpath(path, dp->d_name, newpath, sizeof(newpath));