### 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
 
 ```
   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
 
 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()
 {
        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));