sort(1): Fix -m when only implicit stdin is used for input

Observe:

printf "a\nb\nc\n" > /tmp/foo
# Next command results in no output
cat /tmp/foo | sort -m
# Next command results in proper output
cat /tmp/foo | sort -m -
# Also works:
sort -m /tmp/foo

Some const'ification was done to simplify the actual solution of adding "-"
explicitly to the file list if we didn't have any file arguments left over.

PR:		190099
MFC after:	1 week
This commit is contained in:
Kyle Evans 2018-06-20 03:31:19 +00:00
parent 36180cd53d
commit 7137597e15
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=335404
3 changed files with 9 additions and 5 deletions

View File

@ -227,7 +227,7 @@ file_list_init(struct file_list *fl, bool tmp)
* Add a file name to the list
*/
void
file_list_add(struct file_list *fl, char *fn, bool allocate)
file_list_add(struct file_list *fl, const char *fn, bool allocate)
{
if (fl && fn) {
@ -1115,7 +1115,7 @@ file_headers_merge(size_t fnum, struct file_header **fh, FILE *f_out)
* stdout.
*/
static void
merge_files_array(size_t argc, char **argv, const char *fn_out)
merge_files_array(size_t argc, const char **argv, const char *fn_out)
{
if (argv && fn_out) {

View File

@ -66,7 +66,7 @@ struct file_reader;
*/
struct file_list
{
char **fns;
const char * *fns;
size_t count;
size_t sz;
bool tmp;
@ -108,7 +108,7 @@ char *new_tmp_file_name(void);
void tmp_file_atexit(const char *tmp_file);
void file_list_init(struct file_list *fl, bool tmp);
void file_list_add(struct file_list *fl, char *fn, bool allocate);
void file_list_add(struct file_list *fl, const char *fn, bool allocate);
void file_list_populate(struct file_list *fl, int argc, char **argv, bool allocate);
void file_list_clean(struct file_list *fl);

View File

@ -1299,7 +1299,11 @@ main(int argc, char **argv)
struct file_list fl;
file_list_init(&fl, false);
file_list_populate(&fl, argc, argv, true);
/* No file arguments remaining means "read from stdin." */
if (argc == 0)
file_list_add(&fl, "-", true);
else
file_list_populate(&fl, argc, argv, true);
merge_files(&fl, outfile);
file_list_clean(&fl);
}