aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Arun Prakash Jana <engineerarun@gmail.com>2017-12-20 22:20:28 +0530
committerGravatar Arun Prakash Jana <engineerarun@gmail.com>2017-12-20 22:20:28 +0530
commit0945dfb91a57227f5d6c13ce67e6ad5a9257ef4f (patch)
tree511a666682439f79fdca46104b0bdad0b7e3e572
parentbc1e74bc5670a11d03d02b796abb25556c01270a (diff)
downloadnnn-0945dfb91a57227f5d6c13ce67e6ad5a9257ef4f.tar.gz
Add file name len to entry structure
-rw-r--r--nnn.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/nnn.c b/nnn.c
index f4a22c1..e585c37 100644
--- a/nnn.c
+++ b/nnn.c
@@ -196,6 +196,7 @@ typedef struct entry {
off_t size;
blkcnt_t blocks; /* number of 512B blocks allocated */
mode_t mode;
+ uchar nlen; /* Length of file name */
} *pEntry;
/* Bookmark */
@@ -1850,17 +1851,22 @@ dentfill(char *path, struct entry **dents,
}
/* realloc() may result in memory move, we must re-adjust if that happens */
- if (pnb != pnamebuf)
- for (count = 0; count < n; ++count)
- /* Add file name start offset to new buffer start */
- (*dents + count)->name = pnamebuf + ((ulong)(*dents + count)->name - (ulong)pnb);
+ if (pnb != pnamebuf) {
+ dentp = *dents;
+ dentp->name = pnamebuf;
+
+ for (count = 1; count < n; ++dentp, ++count)
+ /* Current filename starts at last filename start + length */
+ (dentp + 1)->name = (char *)((size_t)dentp->name + dentp->nlen);
+ }
}
dentp = *dents + n;
/* Copy file name */
- dentp->name = pnamebuf + off;
- off += xstrlcpy(dentp->name, namep, NAME_MAX + 1);
+ dentp->name = (char *)((size_t)pnamebuf + off);
+ dentp->nlen = xstrlcpy(dentp->name, namep, NAME_MAX + 1);
+ off += dentp->nlen;
/* Copy other fields */
dentp->mode = sb.st_mode;