xz: Detect when all data will be written to standard out earlier.

If the -c, --stdout argument is not used, then we can still detect when
the data will be written to standard out if all of the provided
filenames are "-" (denoting standard in) or if no filenames are
provided.
This commit is contained in:
Jia Tan 2023-11-14 20:27:04 +08:00
parent 2ade7246e7
commit d4f4a4d040
1 changed files with 21 additions and 0 deletions

View File

@ -842,6 +842,27 @@ args_parse(args_info *args, int argc, char **argv)
args->arg_count = (unsigned int)(argc - optind);
}
// If all of the filenames provided are "-" (more than one "-"
// could be specified) or no filenames are provided, then we are
// only going to be writing to standard out. However if --files or
// --files0 is used, then we will not be writing to standard out.
if (!opt_stdout && args->files_name == NULL) {
uint32_t i;
for (i = 0; i < args->arg_count; i++) {
const char *name = args->arg_names[i];
// getopt_long() will not give us an empty string
// as an argument name here so we don't need to
// check if name[0] is a NULL terminator.
if (name[0] != '-' && name[1] != '\0')
break;
}
// Set opt_stdout if the loop did not exit early.
opt_stdout = i == args->arg_count;
}
return;
}