]> Sergey Matveev's repositories - nnn.git/commitdiff
Use a global buffer for isolated functions
authorArun Prakash Jana <engineerarun@gmail.com>
Sun, 14 May 2017 21:37:22 +0000 (03:07 +0530)
committerArun Prakash Jana <engineerarun@gmail.com>
Sun, 14 May 2017 21:37:22 +0000 (03:07 +0530)
nnn.c

diff --git a/nnn.c b/nnn.c
index 01c7b3bb86a84b8528503d40faae57f30c282738..38a89e8b06c2f720484850ba21adb35f0a8d884e 100644 (file)
--- a/nnn.c
+++ b/nnn.c
@@ -151,7 +151,9 @@ static off_t blk_size;
 static size_t fs_free;
 static int open_max;
 static const double div_2_pow_10 = 1.0 / 1024.0;
-static const char *size_units[] = {"B", "K", "M", "G", "T", "P", "E", "Z", "Y"};
+
+/* For use in functions which are isolated and don't return the buffer */
+static char g_buf[MAX_CMD_LEN];
 
 /*
  * Layout:
@@ -445,7 +447,6 @@ getmime(char *file)
 static int
 setfilter(regex_t *regex, char *filter)
 {
-       static char errbuf[LINE_MAX];
        static size_t len;
        static int r;
 
@@ -454,8 +455,8 @@ setfilter(regex_t *regex, char *filter)
                len = COLS;
                if (len > LINE_MAX)
                        len = LINE_MAX;
-               regerror(r, regex, errbuf, len);
-               printmsg(errbuf);
+               regerror(r, regex, g_buf, len);
+               printmsg(g_buf);
        }
        return r;
 }
@@ -813,7 +814,6 @@ static void
 printent(struct entry *ent, int active)
 {
        static int ncols;
-       static char str[PATH_MAX + 16];
 
        if (COLS > PATH_MAX + 16)
                ncols = PATH_MAX + 16;
@@ -821,25 +821,25 @@ printent(struct entry *ent, int active)
                ncols = COLS;
 
        if (S_ISDIR(ent->mode))
-               snprintf(str, ncols, "%s%s/", CURSYM(active),
+               snprintf(g_buf, ncols, "%s%s/", CURSYM(active),
                         replace_escape(ent->name));
        else if (S_ISLNK(ent->mode))
-               snprintf(str, ncols, "%s%s@", CURSYM(active),
+               snprintf(g_buf, ncols, "%s%s@", CURSYM(active),
                         replace_escape(ent->name));
        else if (S_ISSOCK(ent->mode))
-               snprintf(str, ncols, "%s%s=", CURSYM(active),
+               snprintf(g_buf, ncols, "%s%s=", CURSYM(active),
                         replace_escape(ent->name));
        else if (S_ISFIFO(ent->mode))
-               snprintf(str, ncols, "%s%s|", CURSYM(active),
+               snprintf(g_buf, ncols, "%s%s|", CURSYM(active),
                         replace_escape(ent->name));
        else if (ent->mode & S_IXUSR)
-               snprintf(str, ncols, "%s%s*", CURSYM(active),
+               snprintf(g_buf, ncols, "%s%s*", CURSYM(active),
                         replace_escape(ent->name));
        else
-               snprintf(str, ncols, "%s%s", CURSYM(active),
+               snprintf(g_buf, ncols, "%s%s", CURSYM(active),
                         replace_escape(ent->name));
 
-       printw("%s\n", str);
+       printw("%s\n", g_buf);
 }
 
 static void (*printptr)(struct entry *ent, int active) = &printent;
@@ -847,6 +847,7 @@ static void (*printptr)(struct entry *ent, int active) = &printent;
 static char*
 coolsize(off_t size)
 {
+       static const char *size_units[] = {"B", "K", "M", "G", "T", "P", "E", "Z", "Y"};
        static char size_buf[12]; /* Buffer to hold human readable size */
        static int i;
        static off_t fsize, tmp;
@@ -872,7 +873,6 @@ static void
 printent_long(struct entry *ent, int active)
 {
        static int ncols;
-       static char str[PATH_MAX + 32];
        static char buf[18];
 
        if (COLS > PATH_MAX + 32)
@@ -887,67 +887,67 @@ printent_long(struct entry *ent, int active)
 
        if (!bsizeorder) {
                if (S_ISDIR(ent->mode))
-                       snprintf(str, ncols, "%s%-16.16s        /  %s/",
+                       snprintf(g_buf, ncols, "%s%-16.16s        /  %s/",
                                 CURSYM(active), buf, replace_escape(ent->name));
                else if (S_ISLNK(ent->mode))
-                       snprintf(str, ncols, "%s%-16.16s        @  %s@",
+                       snprintf(g_buf, ncols, "%s%-16.16s        @  %s@",
                                 CURSYM(active), buf, replace_escape(ent->name));
                else if (S_ISSOCK(ent->mode))
-                       snprintf(str, ncols, "%s%-16.16s        =  %s=",
+                       snprintf(g_buf, ncols, "%s%-16.16s        =  %s=",
                                 CURSYM(active), buf, replace_escape(ent->name));
                else if (S_ISFIFO(ent->mode))
-                       snprintf(str, ncols, "%s%-16.16s        |  %s|",
+                       snprintf(g_buf, ncols, "%s%-16.16s        |  %s|",
                                 CURSYM(active), buf, replace_escape(ent->name));
                else if (S_ISBLK(ent->mode))
-                       snprintf(str, ncols, "%s%-16.16s        b  %s",
+                       snprintf(g_buf, ncols, "%s%-16.16s        b  %s",
                                 CURSYM(active), buf, replace_escape(ent->name));
                else if (S_ISCHR(ent->mode))
-                       snprintf(str, ncols, "%s%-16.16s        c  %s",
+                       snprintf(g_buf, ncols, "%s%-16.16s        c  %s",
                                 CURSYM(active), buf, replace_escape(ent->name));
                else if (ent->mode & S_IXUSR)
-                       snprintf(str, ncols, "%s%-16.16s %8.8s* %s*",
+                       snprintf(g_buf, ncols, "%s%-16.16s %8.8s* %s*",
                                 CURSYM(active), buf, coolsize(ent->size),
                                 replace_escape(ent->name));
                else
-                       snprintf(str, ncols, "%s%-16.16s %8.8s  %s",
+                       snprintf(g_buf, ncols, "%s%-16.16s %8.8s  %s",
                                 CURSYM(active), buf, coolsize(ent->size),
                                 replace_escape(ent->name));
        } else {
                if (S_ISDIR(ent->mode))
-                       snprintf(str, ncols, "%s%-16.16s %8.8s/ %s/",
+                       snprintf(g_buf, ncols, "%s%-16.16s %8.8s/ %s/",
                                 CURSYM(active), buf, coolsize(ent->bsize << 9),
                                 replace_escape(ent->name));
                else if (S_ISLNK(ent->mode))
-                       snprintf(str, ncols, "%s%-16.16s        @  %s@",
+                       snprintf(g_buf, ncols, "%s%-16.16s        @  %s@",
                                 CURSYM(active), buf,
                                 replace_escape(ent->name));
                else if (S_ISSOCK(ent->mode))
-                       snprintf(str, ncols, "%s%-16.16s        =  %s=",
+                       snprintf(g_buf, ncols, "%s%-16.16s        =  %s=",
                                 CURSYM(active), buf,
                                 replace_escape(ent->name));
                else if (S_ISFIFO(ent->mode))
-                       snprintf(str, ncols, "%s%-16.16s        |  %s|",
+                       snprintf(g_buf, ncols, "%s%-16.16s        |  %s|",
                                 CURSYM(active), buf,
                                 replace_escape(ent->name));
                else if (S_ISBLK(ent->mode))
-                       snprintf(str, ncols, "%s%-16.16s        b  %s",
+                       snprintf(g_buf, ncols, "%s%-16.16s        b  %s",
                                 CURSYM(active), buf,
                                 replace_escape(ent->name));
                else if (S_ISCHR(ent->mode))
-                       snprintf(str, ncols, "%s%-16.16s        c  %s",
+                       snprintf(g_buf, ncols, "%s%-16.16s        c  %s",
                                 CURSYM(active), buf,
                                 replace_escape(ent->name));
                else if (ent->mode & S_IXUSR)
-                       snprintf(str, ncols, "%s%-16.16s %8.8s* %s*",
+                       snprintf(g_buf, ncols, "%s%-16.16s %8.8s* %s*",
                                 CURSYM(active), buf, coolsize(ent->bsize << 9),
                                 replace_escape(ent->name));
                else
-                       snprintf(str, ncols, "%s%-16.16s %8.8s  %s",
+                       snprintf(g_buf, ncols, "%s%-16.16s %8.8s  %s",
                                 CURSYM(active), buf, coolsize(ent->bsize << 9),
                                 replace_escape(ent->name));
        }
 
-       printw("%s\n", str);
+       printw("%s\n", g_buf);
 
        if (active)
                attroff(A_REVERSE);
@@ -1048,9 +1048,8 @@ get_output(char *buf, size_t bytes)
 static int
 show_stats(char* fpath, char* fname, struct stat *sb)
 {
-       char buf[PATH_MAX + 16];
-       char *perms = get_lsperms(sb->st_mode, buf);
-       char *p, *begin = buf;
+       char *perms = get_lsperms(sb->st_mode, g_buf);
+       char *p, *begin = g_buf;
 
        char tmp[] = "/tmp/nnnXXXXXX";
        int fd = mkstemp(tmp);
@@ -1076,17 +1075,17 @@ show_stats(char* fpath, char* fname, struct stat *sb)
 #else
        dprintf(fd, "\n    Size: %-15ld Blocks: %-10ld IO Block: %-6ld %s",
 #endif
-              sb->st_size, sb->st_blocks, sb->st_blksize, buf);
+              sb->st_size, sb->st_blocks, sb->st_blksize, g_buf);
 
        /* Show containing device, inode, hardlink count */
 #ifdef __APPLE__
-       sprintf(buf, "%xh/%ud", sb->st_dev, sb->st_dev);
+       sprintf(g_buf, "%xh/%ud", sb->st_dev, sb->st_dev);
        dprintf(fd, "\n  Device: %-15s Inode: %-11llu Links: %-9hu",
 #else
-       sprintf(buf, "%lxh/%lud", sb->st_dev, sb->st_dev);
+       sprintf(g_buf, "%lxh/%lud", sb->st_dev, sb->st_dev);
        dprintf(fd, "\n  Device: %-15s Inode: %-11lu Links: %-9lu",
 #endif
-              buf, sb->st_ino, sb->st_nlink);
+              g_buf, sb->st_ino, sb->st_nlink);
 
        /* Show major, minor number for block or char device */
        if (perms[0] == 'b' || perms[0] == 'c')
@@ -1101,21 +1100,21 @@ show_stats(char* fpath, char* fname, struct stat *sb)
               sb->st_gid, (getgrgid(sb->st_gid))->gr_name);
 
        /* Show last access time */
-       strftime(buf, 40, "%a %d-%b-%Y %T %z,%Z", localtime(&sb->st_atime));
-       dprintf(fd, "\n\n  Access: %s", buf);
+       strftime(g_buf, 40, "%a %d-%b-%Y %T %z,%Z", localtime(&sb->st_atime));
+       dprintf(fd, "\n\n  Access: %s", g_buf);
 
        /* Show last modification time */
-       strftime(buf, 40, "%a %d-%b-%Y %T %z,%Z", localtime(&sb->st_mtime));
-       dprintf(fd, "\n  Modify: %s", buf);
+       strftime(g_buf, 40, "%a %d-%b-%Y %T %z,%Z", localtime(&sb->st_mtime));
+       dprintf(fd, "\n  Modify: %s", g_buf);
 
        /* Show last status change time */
-       strftime(buf, 40, "%a %d-%b-%Y %T %z,%Z", localtime(&sb->st_ctime));
-       dprintf(fd, "\n  Change: %s", buf);
+       strftime(g_buf, 40, "%a %d-%b-%Y %T %z,%Z", localtime(&sb->st_ctime));
+       dprintf(fd, "\n  Change: %s", g_buf);
 
        if (S_ISREG(sb->st_mode)) {
                /* Show file(1) output */
-               sprintf(buf, "file -b \'%s\' 2>&1", fpath);
-               p = get_output(buf, sizeof(buf));
+               sprintf(g_buf, "file -b \'%s\' 2>&1", fpath);
+               p = get_output(g_buf, sizeof(g_buf));
                if (p) {
                        dprintf(fd, "\n\n ");
                        while (*p) {
@@ -1134,8 +1133,8 @@ show_stats(char* fpath, char* fname, struct stat *sb)
        dprintf(fd, "\n\n");
        close(fd);
 
-       sprintf(buf, "cat %s | less", tmp);
-       fd = system(buf);
+       sprintf(g_buf, "cat %s | less", tmp);
+       fd = system(g_buf);
 
        unlink(tmp);
        return fd;
@@ -1144,25 +1143,23 @@ show_stats(char* fpath, char* fname, struct stat *sb)
 static int
 show_mediainfo(const char* fpath, int full)
 {
-       static char buf[MAX_CMD_LEN];
-
-       strcpy(buf, "which mediainfo");
-       if (get_output(buf, MAX_CMD_LEN) == NULL)
+       strcpy(g_buf, "which mediainfo");
+       if (get_output(g_buf, MAX_CMD_LEN) == NULL)
                return -1;
 
-       sprintf(buf, "mediainfo \'%s\' ", fpath);
+       sprintf(g_buf, "mediainfo \'%s\' ", fpath);
        if (full)
-               strcat(buf, "-f 2>&1 | less");
+               strcat(g_buf, "-f 2>&1 | less");
        else
-               strcat(buf, "2>&1 | less");
+               strcat(g_buf, "2>&1 | less");
 
-       return system(buf);
+       return system(g_buf);
 }
 
 static int
 show_help(void)
 {
-       char helpstr[] = ("echo \"\
+       static char helpstr[] = ("echo \"\
                   Key | Function\n\
                      -+-\n\
             Up, k, ^P | Previous entry\n\
@@ -1574,8 +1571,6 @@ nochange:
                                goto begin;
                        case S_IFREG:
                        {
-                               static char cmd[MAX_CMD_LEN];
-
                                /* If NNN_OPENER is set, use it */
                                if (opener) {
                                        spawn(opener, newpath, NULL, NULL, 4);
@@ -1596,11 +1591,11 @@ nochange:
 
                                /* If nlay doesn't handle it, open plain text
                                   files with vi, then try NNN_FALLBACK_OPENER */
-                               sprintf(cmd, "file -bi \'%s\'", newpath);
-                               if (get_output(cmd, MAX_CMD_LEN) == NULL)
+                               sprintf(g_buf, "file -bi \'%s\'", newpath);
+                               if (get_output(g_buf, MAX_CMD_LEN) == NULL)
                                        continue;
 
-                               if (strstr(cmd, "text/") == cmd) {
+                               if (strstr(g_buf, "text/") == g_buf) {
                                        exitcurses();
                                        run = xgetenv("EDITOR", "vi");
                                        spawn(run, newpath, NULL, NULL, 0);