Use memccpy

This commit is contained in:
Arun Prakash Jana 2020-04-13 20:35:14 +05:30
parent 315132b363
commit 35c3497364
No known key found for this signature in database
GPG key ID: A75979F35C080412
3 changed files with 24 additions and 28 deletions

View file

@ -66,7 +66,7 @@ else
LDLIBS_CURSES ?= -lncurses LDLIBS_CURSES ?= -lncurses
endif endif
CFLAGS += -Wall -Wextra CFLAGS += -std=c11 -Wall -Wextra
CFLAGS += $(CFLAGS_OPTIMIZATION) CFLAGS += $(CFLAGS_OPTIMIZATION)
CFLAGS += $(CFLAGS_CURSES) CFLAGS += $(CFLAGS_CURSES)

View file

@ -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 10. Configure the middle mouse click to do anything
11. Fuzzy search subtree and open the dir of a file 11. Fuzzy search subtree and open the dir of a file
12. Load four dirs with custom settings at once 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 14. Auto-sync selection to system clipboard
15. Open text files detached in another pane/tab/window 15. Open text files detached in another pane/tab/window
16. Create files/dirs/duplicates with parents (like `mkdir -p`) 16. Create files/dirs/duplicates with parents (like `mkdir -p`)

View file

@ -688,7 +688,7 @@ static haiku_nm_h haiku_hnd;
#endif /* __GNUC__ */ #endif /* __GNUC__ */
/* Forward declarations */ /* 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 void redraw(char *path);
static int spawn(char *file, char *arg1, char *arg2, const char *dir, uchar flag); 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); 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; struct rlimit rl;
rlim_t limit = getrlimit(RLIMIT_NOFILE, &rl); rlim_t limit = getrlimit(RLIMIT_NOFILE, &rl);
if (limit != 0) if (!limit) {
return 32; limit = rl.rlim_cur;
rl.rlim_cur = rl.rlim_max;
limit = rl.rlim_cur; /* Return ~75% of max possible */
rl.rlim_cur = rl.rlim_max; if (setrlimit(RLIMIT_NOFILE, &rl) == 0) {
limit = rl.rlim_max - (rl.rlim_max >> 2);
/* Return ~75% of max possible */ /*
if (setrlimit(RLIMIT_NOFILE, &rl) == 0) { * 20K is arbitrary. If the limit is set to max possible
limit = rl.rlim_max - (rl.rlim_max >> 2); * value, the memory usage increases to more than double.
/* */
* 20K is arbitrary. If the limit is set to max possible if (limit > 20480)
* value, the memory usage increases to more than double. limit = 20480;
*/ }
return limit > 20480 ? 20480 : limit; } else
} limit = 32;
return limit; 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. * Always null ('\0') terminates if both src and dest are valid pointers.
* Returns the number of bytes copied including terminating null byte. * 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) char *end = memccpy(dst, src, '\0', n);
return 0;
size_t len = strlen(src) + 1; if (!end) {
if (len <= n) { dst[n - 1] = '\0';
memcpy(dest, src, len); end = dst + n;
n = len;
} else {
memcpy(dest, src, n - 1);
dest[n - 1] = '\0';
} }
return n; return end - dst;
} }
static bool is_suffix(const char *str, const char *suffix) static bool is_suffix(const char *str, const char *suffix)