- fp = *pfp0 = basefp;
- *pfplast = *pfp0 + nent;
- while (dp = rst_readdir(dirp)) {
- if (dp == NULL || dp->d_ino == 0)
- break;
- if (!dflag && BIT(dp->d_ino, dumpmap) == 0)
- continue;
- if (vflag == 0 &&
- (strcmp(dp->d_name, ".") == 0 ||
- strcmp(dp->d_name, "..") == 0))
- continue;
- fp->fnum = dp->d_ino;
- fp->fname = savename(dp->d_name);
- fp++;
- if (fp == *pfplast) {
- basefp = (struct afile *)realloc((char *)basefp,
- (unsigned)(2 * nent * sizeof (struct afile)));
- if (basefp == 0) {
- fprintf(stderr, "ls: out of memory\n");
- return (FAIL);
- }
- *pfp0 = basefp;
- fp = *pfp0 + nent;
- *pfplast = fp + nent;
- nent *= 2;
+ if (ap->head == 0)
+ ap->head = ap->last = ap->base;
+ fp = ap->last;
+ fp->fnum = ino;
+ fp->fname = savename(name);
+ fp++;
+ if (fp == ap->head + ap->nent) {
+ ap->base = (struct afile *)realloc((char *)ap->base,
+ (unsigned)(2 * ap->nent * sizeof (struct afile)));
+ if (ap->base == 0) {
+ fprintf(stderr, "%s: out of memory\n", ap->cmd);
+ return (FAIL);