xz: Refactor suffix test with raw format.
The previous version set opt_stdout, but this caused an issue with copying an input file to standard out when decompressing an unknown file type. The following needs to result in an error: echo foo | xz -df since -c, --stdout is not used. This fixes the previous error by not setting opt_stdout.
This commit is contained in:
parent
837ea40b1c
commit
f481523baa
|
@ -834,34 +834,22 @@ args_parse(args_info *args, int argc, char **argv)
|
||||||
args->arg_count = (unsigned int)(argc - optind);
|
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If raw format is used and a custom suffix is not provided,
|
// If raw format is used and a custom suffix is not provided,
|
||||||
// then only stdout mode can be used when compressing or decompressing.
|
// then only stdout mode can be used when compressing or
|
||||||
|
// decompressing.
|
||||||
if (opt_format == FORMAT_RAW && !suffix_is_set() && !opt_stdout
|
if (opt_format == FORMAT_RAW && !suffix_is_set() && !opt_stdout
|
||||||
&& (opt_mode == MODE_COMPRESS
|
&& (opt_mode == MODE_COMPRESS
|
||||||
|| opt_mode == MODE_DECOMPRESS))
|
|| opt_mode == MODE_DECOMPRESS)) {
|
||||||
message_fatal(_("With --format=raw, --suffix=.SUF is "
|
// If all of the filenames provided are "-" (more than one
|
||||||
"required unless writing to stdout"));
|
// "-" could be specified) or no filenames are provided,
|
||||||
|
// then we are only going to be writing to standard out.
|
||||||
|
for (unsigned int i = 0; i < args->arg_count; i++) {
|
||||||
|
if (strcmp(args->arg_names[i], "-") != 0)
|
||||||
|
message_fatal(_("With --format=raw, "
|
||||||
|
"--suffix=.SUF is required "
|
||||||
|
"unless writing to stdout"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue