Browse Source

Use memccpy

master
Arun Prakash Jana 4 years ago
parent
commit
35c3497364
No known key found for this signature in database GPG Key ID: A75979F35C080412
3 changed files with 24 additions and 28 deletions
  1. +1
    -1
      Makefile
  2. +1
    -1
      README.md
  3. +22
    -26
      src/nnn.c

+ 1
- 1
Makefile View File

@@ -66,7 +66,7 @@ else
LDLIBS_CURSES ?= -lncurses
endif

CFLAGS += -Wall -Wextra
CFLAGS += -std=c11 -Wall -Wextra
CFLAGS += $(CFLAGS_OPTIMIZATION)
CFLAGS += $(CFLAGS_CURSES)



+ 1
- 1
README.md 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
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`)


+ 22
- 26
src/nnn.c View File

@@ -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)


Loading…
Cancel
Save