aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Arun Prakash Jana <engineerarun@gmail.com>2020-04-13 20:35:14 +0530
committerGravatar Arun Prakash Jana <engineerarun@gmail.com>2020-04-13 20:35:14 +0530
commit35c3497364cbdc88ae6c33f1b80fd616b35b6000 (patch)
tree9922d7e3a7f9a17392de3c6cfc59a83dad5db217
parent315132b3633459f0bccf47dd9e671fde37463184 (diff)
downloadnnn-35c3497364cbdc88ae6c33f1b80fd616b35b6000.tar.gz
Use memccpy
-rw-r--r--Makefile2
-rw-r--r--README.md2
-rw-r--r--src/nnn.c48
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)