diff options
author | Jim Meyering <jim@meyering.net> | 2002-01-14 08:36:48 +0000 |
---|---|---|
committer | Jim Meyering <jim@meyering.net> | 2002-01-14 08:36:48 +0000 |
commit | 98ad58770935ae5bc084e196871a3c7d0741c623 (patch) | |
tree | f59c1c16ef3bc62eee3715d00320970b5e405c50 /src | |
parent | 5d1f26b8e5bd296fcfd350ed2132e9edecaf79d8 (diff) | |
download | coreutils-98ad58770935ae5bc084e196871a3c7d0741c623.tar.xz |
(mergefps): Fix bug when eliminating empty files.
Diffstat (limited to 'src')
-rw-r--r-- | src/sort.c | 22 |
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) |