From 35c3497364cbdc88ae6c33f1b80fd616b35b6000 Mon Sep 17 00:00:00 2001 From: Arun Prakash Jana Date: Mon, 13 Apr 2020 20:35:14 +0530 Subject: Use memccpy --- Makefile | 2 +- README.md | 2 +- src/nnn.c | 48 ++++++++++++++++++++++-------------------------- 3 files changed, 24 insertions(+), 28 deletions(-) diff --git a/Makefile b/Makefile index 03ec104..6a4aaa8 100644 --- a/Makefile +++ b/Makefile @@ -66,7 +66,7 @@ else LDLIBS_CURSES ?= -lncurses endif -CFLAGS += -Wall -Wextra +CFLAGS += -std=c11 -Wall -Wextra CFLAGS += $(CFLAGS_OPTIMIZATION) CFLAGS += $(CFLAGS_CURSES) diff --git a/README.md b/README.md index 0f17a7e..df2d181 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ It runs smoothly on the Pi, [Termux](https://www.youtube.com/watch?v=AbaauM7gUJw 10. Configure the middle mouse click to do anything 11. Fuzzy search subtree and open the dir of a file 12. Load four dirs with custom settings at once -13. Show notifications on cp, mv completion +13. Notifications on cp, mv, rm completion 14. Auto-sync selection to system clipboard 15. Open text files detached in another pane/tab/window 16. Create files/dirs/duplicates with parents (like `mkdir -p`) diff --git a/src/nnn.c b/src/nnn.c index 8f21134..36e8b7b 100644 --- a/src/nnn.c +++ b/src/nnn.c @@ -688,7 +688,7 @@ static haiku_nm_h haiku_hnd; #endif /* __GNUC__ */ /* Forward declarations */ -static size_t xstrsncpy(char *dest, const char *src, size_t n); +static size_t xstrsncpy(char *restrict dst, const char *restrict src, size_t n); static void redraw(char *path); static int spawn(char *file, char *arg1, char *arg2, const char *dir, uchar flag); static int (*nftw_fn)(const char *fpath, const struct stat *sb, int typeflag, struct FTW *ftwbuf); @@ -888,21 +888,22 @@ static rlim_t max_openfds(void) struct rlimit rl; rlim_t limit = getrlimit(RLIMIT_NOFILE, &rl); - if (limit != 0) - return 32; + if (!limit) { + limit = rl.rlim_cur; + rl.rlim_cur = rl.rlim_max; - limit = rl.rlim_cur; - rl.rlim_cur = rl.rlim_max; - - /* Return ~75% of max possible */ - if (setrlimit(RLIMIT_NOFILE, &rl) == 0) { - limit = rl.rlim_max - (rl.rlim_max >> 2); - /* - * 20K is arbitrary. If the limit is set to max possible - * value, the memory usage increases to more than double. - */ - return limit > 20480 ? 20480 : limit; - } + /* Return ~75% of max possible */ + if (setrlimit(RLIMIT_NOFILE, &rl) == 0) { + limit = rl.rlim_max - (rl.rlim_max >> 2); + /* + * 20K is arbitrary. If the limit is set to max possible + * value, the memory usage increases to more than double. + */ + if (limit > 20480) + limit = 20480; + } + } else + limit = 32; return limit; } @@ -930,21 +931,16 @@ static void *xrealloc(void *pcur, size_t len) * Always null ('\0') terminates if both src and dest are valid pointers. * Returns the number of bytes copied including terminating null byte. */ -static size_t xstrsncpy(char *dest, const char *src, size_t n) +static size_t xstrsncpy(char *restrict dst, const char *restrict src, size_t n) { - if (!src || !dest || !n) - return 0; + char *end = memccpy(dst, src, '\0', n); - size_t len = strlen(src) + 1; - if (len <= n) { - memcpy(dest, src, len); - n = len; - } else { - memcpy(dest, src, n - 1); - dest[n - 1] = '\0'; + if (!end) { + dst[n - 1] = '\0'; + end = dst + n; } - return n; + return end - dst; } static bool is_suffix(const char *str, const char *suffix) -- cgit v1.2.3-70-g09d2