summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJim Meyering <jim@meyering.net>2002-01-14 08:36:48 +0000
committerJim Meyering <jim@meyering.net>2002-01-14 08:36:48 +0000
commit98ad58770935ae5bc084e196871a3c7d0741c623 (patch)
treef59c1c16ef3bc62eee3715d00320970b5e405c50 /src
parent5d1f26b8e5bd296fcfd350ed2132e9edecaf79d8 (diff)
downloadcoreutils-98ad58770935ae5bc084e196871a3c7d0741c623.tar.xz
(mergefps): Fix bug when eliminating empty files.
Diffstat (limited to 'src')
-rw-r--r--src/sort.c22
1 files changed, 11 insertions, 11 deletions
diff --git a/src/sort.c b/src/sort.c
index 3b3bbccb7..52942279d 100644
--- a/src/sort.c
+++ b/src/sort.c
@@ -1648,28 +1648,28 @@ mergefps (char **files, register int nfiles,
saved.text = NULL;
/* Read initial lines from each input file. */
- for (i = 0; i < nfiles; ++i)
+ for (i = 0; i < nfiles; )
{
fps[i] = xfopen (files[i], "r");
initbuf (&buffer[i], sizeof (struct line),
MAX (merge_buffer_size, sort_size / nfiles));
- /* If a file is empty, eliminate it from future consideration. */
- while (i < nfiles && !fillbuf (&buffer[i], fps[i], files[i]))
+ if (fillbuf (&buffer[i], fps[i], files[i]))
+ {
+ struct line const *linelim = buffer_linelim (&buffer[i]);
+ cur[i] = linelim - 1;
+ base[i] = linelim - buffer[i].nlines;
+ i++;
+ }
+ else
{
+ /* fps[i] is empty; eliminate it from future consideration. */
xfclose (fps[i], files[i]);
zaptemp (files[i]);
+ free (buffer[i].buf);
--nfiles;
for (j = i; j < nfiles; ++j)
files[j] = files[j + 1];
}
- if (i == nfiles)
- free (buffer[i].buf);
- else
- {
- struct line const *linelim = buffer_linelim (&buffer[i]);
- cur[i] = linelim - 1;
- base[i] = linelim - buffer[i].nlines;
- }
}
if (! ofp)