aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--nnn.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/nnn.c b/nnn.c
index 99b5414..cccecc2 100644
--- a/nnn.c
+++ b/nnn.c
@@ -188,11 +188,11 @@ typedef unsigned char uchar;
/* Directory entry */
typedef struct entry {
- char name[NAME_MAX];
- mode_t mode;
+ char name[NAME_MAX + 1];
time_t t;
off_t size;
blkcnt_t blocks; /* number of 512B blocks allocated */
+ mode_t mode;
} *pEntry;
/* Bookmark */
@@ -348,7 +348,7 @@ xstrlen(const char *s)
static size_t
xstrlcpy(char *dest, const char *src, size_t n)
{
- static size_t len, blocks;
+ static size_t len, blocks, lsize = sizeof(ulong);
static const uint _WSHIFT = (sizeof(ulong) == 8) ? 3 : 2;
if (!src || !dest)
@@ -361,8 +361,11 @@ xstrlcpy(char *dest, const char *src, size_t n)
/* Save total number of bytes to copy in len */
len = n;
- blocks = n >> _WSHIFT;
- n -= (blocks << _WSHIFT);
+ if (n >= lsize) {
+ blocks = n >> _WSHIFT;
+ n -= (blocks << _WSHIFT);
+ } else
+ blocks = 0;
if (blocks) {
static ulong *s, *d;
@@ -872,12 +875,11 @@ static void
fill(struct entry **dents, int (*filter)(regex_t *, char *), regex_t *re)
{
static int count;
+ static struct entry _dent, *dentp1, *dentp2;
for (count = 0; count < ndents; ++count) {
if (filter(re, (*dents)[count].name) == 0) {
if (count != --ndents) {
- static struct entry _dent, *dentp1, *dentp2;
-
dentp1 = &(*dents)[count];
dentp2 = &(*dents)[ndents];