diff options
| author | 2017-12-20 22:20:28 +0530 | |
|---|---|---|
| committer | 2017-12-20 22:20:28 +0530 | |
| commit | 0945dfb91a57227f5d6c13ce67e6ad5a9257ef4f (patch) | |
| tree | 511a666682439f79fdca46104b0bdad0b7e3e572 | |
| parent | bc1e74bc5670a11d03d02b796abb25556c01270a (diff) | |
| download | nnn-0945dfb91a57227f5d6c13ce67e6ad5a9257ef4f.tar.gz | |
Add file name len to entry structure
| -rw-r--r-- | nnn.c | 18 |
1 files changed, 12 insertions, 6 deletions
@@ -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; |