]> Sergey Matveev's repositories - nnn.git/commitdiff
Remove redundant use of regex
authorArun Prakash Jana <engineerarun@gmail.com>
Tue, 4 Dec 2018 23:31:29 +0000 (05:01 +0530)
committerArun Prakash Jana <engineerarun@gmail.com>
Tue, 4 Dec 2018 23:31:29 +0000 (05:01 +0530)
src/nnn.c

index 4986d06ba1417114dc4b1a88d558f4f1c7e471b8..7cb1045d97b37d4231d001719de317dce78bd97e 100644 (file)
--- a/src/nnn.c
+++ b/src/nnn.c
@@ -275,8 +275,7 @@ typedef struct {
        char c_last[PATH_MAX]; /* Last visited dir */
        char c_name[NAME_MAX + 1]; /* Current file name */
        settings c_cfg; /* Current configuration */
-       char c_fltr[DOT_FILTER_LEN]; /* Hidden filter */
-       char color; /* Color code for directories */
+       uint color; /* Color code for directories */
 } context;
 
 /* GLOBALS */
@@ -1004,11 +1003,6 @@ static int setfilter(regex_t *regex, char *filter)
        return r;
 }
 
-static void initfilter(int dot, char *hfltr)
-{
-       dot ? (hfltr[0] = '.', hfltr[1] = '\0') : xstrlcpy(hfltr, "^[^.]", DOT_FILTER_LEN);
-}
-
 static int visible(regex_t *regex, char *file)
 {
        return regexec(regex, file, 0, NULL, 0) == 0;
@@ -2155,8 +2149,7 @@ static void dentfree(struct entry *dents)
        free(dents);
 }
 
-static int dentfill(char *path, struct entry **dents,
-        int (*filter)(regex_t *, char *), regex_t *re)
+static int dentfill(char *path, struct entry **dents)
 {
        static DIR *dirp;
        static struct dirent *dp;
@@ -2190,12 +2183,13 @@ static int dentfill(char *path, struct entry **dents,
        while ((dp = readdir(dirp)) != NULL) {
                namep = dp->d_name;
 
-               if (filter(re, namep) == 0) {
-                       if (!cfg.blkorder)
-                               continue;
+               /* Skip self and parent */
+               if ((namep[0] == '.' && (namep[1] == '\0' ||
+                   (namep[1] == '.' && namep[2] == '\0'))))
+                       continue;
 
-                       /* Skip self and parent */
-                       if ((namep[0] == '.' && (namep[1] == '\0' || (namep[1] == '.' && namep[2] == '\0'))))
+               if (!cfg.showhidden && namep[0] == '.') {
+                       if (!cfg.blkorder)
                                continue;
 
                        if (fstatat(fd, namep, &sb, AT_SYMLINK_NOFOLLOW) == -1)
@@ -2220,11 +2214,6 @@ static int dentfill(char *path, struct entry **dents,
                        continue;
                }
 
-               /* Skip self and parent */
-               if ((namep[0] == '.' && (namep[1] == '\0' ||
-                   (namep[1] == '.' && namep[2] == '\0'))))
-                       continue;
-
                if (fstatat(fd, namep, &sb, AT_SYMLINK_NOFOLLOW) == -1) {
                        DPRINTF_S(namep);
                        continue;
@@ -2336,20 +2325,14 @@ static int dentfind(struct entry *dents, const char *fname, int n)
        return 0;
 }
 
-static int populate(char *path, char *lastname, char *fltr)
+static int populate(char *path, char *lastname)
 {
-       static regex_t re;
-
        /* Can fail when permissions change while browsing.
         * It's assumed that path IS a directory when we are here.
         */
        if (access(path, R_OK) == -1)
                return -1;
 
-       /* Search filter */
-       if (setfilter(&re, fltr) != 0)
-               return -1;
-
        if (cfg.blkorder) {
                printmsg("calculating...");
                refresh();
@@ -2361,8 +2344,7 @@ static int populate(char *path, char *lastname, char *fltr)
        clock_gettime(CLOCK_REALTIME, &ts1); /* Use CLOCK_MONOTONIC on FreeBSD */
 #endif
 
-       ndents = dentfill(path, &dents, visible, &re);
-       regfree(&re);
+       ndents = dentfill(path, &dents);
        if (!ndents)
                return 0;
 
@@ -2539,7 +2521,7 @@ static void browse(char *ipath)
 {
        static char newpath[PATH_MAX] __attribute__ ((aligned));
        static char mark[PATH_MAX] __attribute__ ((aligned));
-       char *path, *lastdir, *lastname, *hfltr;
+       char *path, *lastdir, *lastname;
        char *dir, *tmp, *run = NULL, *env = NULL;
        struct stat sb;
        int r, fd, presel, ncp = 0, copystartid = 0, copyendid = 0;
@@ -2554,8 +2536,6 @@ static void browse(char *ipath)
        lastdir = g_ctx[0].c_last; /* last visited directory */
        lastname = g_ctx[0].c_name; /* last visited filename */
        g_ctx[0].c_cfg = cfg; /* current configuration */
-       initfilter(cfg.showhidden, g_ctx[0].c_fltr); /* Show hidden filter */
-       hfltr = g_ctx[0].c_fltr;
 
        if (cfg.filtermode)
                presel = FILTER;
@@ -2590,7 +2570,7 @@ begin:
        }
 #endif
 
-       if (populate(path, lastname, hfltr) == -1) {
+       if (populate(path, lastname) == -1) {
                printwarn();
                goto nochange;
        }
@@ -2851,7 +2831,6 @@ nochange:
                                        g_ctx[r].c_last[0] = '\0';
                                        xstrlcpy(g_ctx[r].c_name, dents[cur].name, NAME_MAX + 1);
                                        g_ctx[r].c_cfg = cfg;
-                                       xstrlcpy(g_ctx[r].c_fltr, hfltr, DOT_FILTER_LEN);
                                }
 
                                /* Reset the pointers */
@@ -2859,7 +2838,6 @@ nochange:
                                ipath = g_ctx[r].c_init;
                                lastdir = g_ctx[r].c_last;
                                lastname = g_ctx[r].c_name;
-                               hfltr = g_ctx[r].c_fltr;
 
                                cfg.curctx = r;
                                setdirwatch();
@@ -2914,7 +2892,6 @@ nochange:
                        goto begin;
                case SEL_TOGGLEDOT:
                        cfg.showhidden ^= 1;
-                       initfilter(cfg.showhidden, hfltr);
                        /* Save current */
                        if (ndents)
                                copycurname();
@@ -3480,7 +3457,6 @@ nochange:
                                                lastdir = g_ctx[r].c_last;
                                                lastname = g_ctx[r].c_name;
                                                cfg = g_ctx[r].c_cfg;
-                                               hfltr = g_ctx[r].c_fltr;
 
                                                cfg.curctx = r;
                                                setdirwatch();