From: Arun Prakash Jana Date: Thu, 15 Jul 2021 13:25:03 +0000 (+0530) Subject: Invert optimization: allocate in a go X-Git-Tag: v4.2~24 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=0159c086029458105ccea14b0ca104934e6e72a4;p=nnn.git Invert optimization: allocate in a go --- diff --git a/src/nnn.c b/src/nnn.c index 50200422..01f512b8 100644 --- a/src/nnn.c +++ b/src/nnn.c @@ -1562,7 +1562,8 @@ static inline void findmarkentry(char *path, struct entry *dentp) static void invertselbuf(char *path) { - size_t len, endpos, offset = 0; + size_t len, endpos, shrinklen = 0, alloclen = 0; + size_t const pathlen = xstrlen(path); char *found; int nmarked = 0, prev = 0; struct entry *dentp; @@ -1580,6 +1581,7 @@ static void invertselbuf(char *path) } else { ++nselected; dentp->flags |= FILE_SELECTED; + alloclen += pathlen + dentp->nlen; } } else { dentp->flags |= FILE_SCANNED; @@ -1603,10 +1605,11 @@ static void invertselbuf(char *path) } --nselected; - offset += len; /* buffer size adjustment */ + shrinklen += len; /* buffer size adjustment */ } else { ++nselected; dentp->flags |= FILE_SELECTED; + alloclen += pathlen + dentp->nlen; } scan = FALSE; } @@ -1658,7 +1661,13 @@ static void invertselbuf(char *path) } /* Buffer size adjustment */ - selbufpos -= offset; + selbufpos -= shrinklen; + + if (alloclen > shrinklen) { + pselbuf = xrealloc(pselbuf, selbuflen + (alloclen - shrinklen)); + if (!pselbuf) + errexit(); + } free(marked);