]> Sergey Matveev's repositories - nnn.git/commitdiff
Use memccpy
authorArun Prakash Jana <engineerarun@gmail.com>
Mon, 13 Apr 2020 15:05:14 +0000 (20:35 +0530)
committerArun Prakash Jana <engineerarun@gmail.com>
Mon, 13 Apr 2020 15:05:14 +0000 (20:35 +0530)
Makefile
README.md
src/nnn.c

index 03ec10458a080cd1fb9d4c303451c03dbfe73713..6a4aaa87a96a5647d47c1465a901b43ae82a4e2e 100644 (file)
--- 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)
 
index 0f17a7eb84962cb20527af34f0c78e5c28227bfa..df2d181e8673d9c0934bfeeec227d8dae31b74b1 100644 (file)
--- 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`)
index 8f21134dbab7f3b2e8112127ba78ac186ca20cff..36e8b7b025b8ca671fcb752bb37455cd7403e12d 100644 (file)
--- 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)