Przeglądaj źródła

Maximize rlimit, switch to detail view in du mode

master
Arun Prakash Jana 7 lat temu
rodzic
commit
74a13c645d
Nie znaleziono w bazie danych klucza dla tego podpisu ID klucza GPG: A75979F35C080412
2 zmienionych plików z 37 dodań i 10 usunięć
  1. +1
    -1
      Makefile
  2. +36
    -9
      nnn.c

+ 1
- 1
Makefile Wyświetl plik

@@ -3,7 +3,7 @@ VERSION = 0.6
PREFIX = /usr/local
MANPREFIX = $(PREFIX)/man

CFLAGS += -O3 -march=native -Wall -Wextra
CFLAGS += -O3 -march=native -Wall -Wextra -Wno-unused-parameter
LDLIBS = -lcurses

DISTFILES = nnn.c config.def.h nnn.1 Makefile README.md LICENSE


+ 36
- 9
nnn.c Wyświetl plik

@@ -3,6 +3,7 @@
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/statvfs.h>
#include <sys/resource.h>

#include <curses.h>
#include <dirent.h>
@@ -123,6 +124,7 @@ static char *fallback_opener;
static char *copier;
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"};

@@ -167,6 +169,28 @@ xrealloc(void *p, size_t size)
}
#endif

static rlim_t
max_openfds()
{
struct rlimit rl;
rlim_t limit;

limit = getrlimit(RLIMIT_NOFILE, &rl);
if (limit != 0)
return 32;

limit = rl.rlim_cur;
rl.rlim_cur = rl.rlim_max;

if (setrlimit(RLIMIT_NOFILE, &rl) == 0)
return rl.rlim_max - 64;

if (limit > 128)
return limit - 64;

return 32;
}

static size_t
xstrlcpy(char *dest, const char *src, size_t n)
{
@@ -936,14 +960,11 @@ show_help(void)
}

static int
sum_sizes(const char *fpath, const struct stat *sb, int typeflag, struct FTW *ftwbuf)
sum_bsizes(const char *fpath, const struct stat *sb, int typeflag, struct FTW *ftwbuf)
{
if (!fpath || !ftwbuf)
printmsg("fpath or ftwbuf NULL"); /* TODO: on %s", fpath); */

/* Handle permission problems */
if(typeflag == FTW_NS) {
printmsg("No stats (permissions ?)"); /* TODO: on %s", fpath); */
printmsg("No stats (permissions ?)");
return 0;
}

@@ -1023,8 +1044,8 @@ dentfill(char *path, struct entry **dents,

while ((dp = readdir(dirp)) != NULL) {
/* Skip self and parent */
if ((dp->d_name[0] == '.' && dp->d_name[1] == '\0') ||
(dp->d_name[0] == '.' && dp->d_name[1] == '.' && dp->d_name[2] == '\0'))
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;
@@ -1042,8 +1063,8 @@ dentfill(char *path, struct entry **dents,
if (bsizeorder) {
if (S_ISDIR(sb.st_mode)) {
blk_size = 0;
if (nftw(newpath, sum_sizes, 128, FTW_MOUNT | FTW_PHYS) == -1) {
printmsg("nftw(3) failed"); /* TODO: , newpath); */
if (nftw(newpath, sum_bsizes, open_max, FTW_MOUNT | FTW_PHYS) == -1) {
printmsg("nftw(3) failed");
(*dents)[n].bsize = sb.st_blocks;
} else
(*dents)[n].bsize = blk_size;
@@ -1507,6 +1528,10 @@ nochange:
goto begin;
case SEL_BSIZE:
bsizeorder = !bsizeorder;
if (bsizeorder) {
showdetail = 1;
printptr = &printent_long;
}
mtimeorder = 0;
sizeorder = 0;
/* Save current */
@@ -1619,6 +1644,8 @@ main(int argc, char *argv[])
}
}

open_max = max_openfds();

if (getuid() == 0)
showhidden = 1;
initfilter(showhidden, &ifilter);


Ładowanie…
Anuluj
Zapisz