diff --git a/lrzip.c b/lrzip.c index e455ce0..17a3604 100644 --- a/lrzip.c +++ b/lrzip.c @@ -693,26 +693,27 @@ bool decompress_file(rzip_control *control) if (!STDIN && !IS_FROM_FILE) { struct stat fdin_stat; - - stat(control->infile, &fdin_stat); - if (!S_ISREG(fdin_stat.st_mode) && (tmp = strrchr(control->infile, '.')) && - strcmp(tmp,control->suffix)) { - /* make sure infile has an extension. If not, add it - * because manipulations may be made to input filename, set local ptr - */ + /* make sure infile has an extension. If not, add it + * because manipulations may be made to input filename, set local ptr + */ + tmp = strrchr(control->infile, '.'); + if (strcmp(tmp,control->suffix)) { infilecopy = alloca(strlen(control->infile) + strlen(control->suffix) + 1); strcpy(infilecopy, control->infile); strcat(infilecopy, control->suffix); } else infilecopy = strdupa(control->infile); + stat(infilecopy, &fdin_stat); + if (!S_ISREG(fdin_stat.st_mode)) + failure("lrzip only works on regular FILES\n"); /* regardless, infilecopy has the input filename */ } if (!STDOUT && !TEST_ONLY) { /* if output name already set, use it */ - if (control->outname) { + if (control->outname) control->outfile = strdup(control->outname); - } else { + else { /* default output name from infilecopy * test if outdir specified. If so, strip path from filename of * infilecopy, then remove suffix. diff --git a/main.c b/main.c index 859fdf2..aecdfa6 100644 --- a/main.c +++ b/main.c @@ -594,7 +594,8 @@ int main(int argc, char *argv[]) infile = argv[i]; else if (!(i == 0 && STDIN)) break; - if (infile) { + if (infile && !(DECOMPRESS || TEST_ONLY)) { + /* check that input file exists, unless Decompressing or Test */ if ((strcmp(infile, "-") == 0)) control->flags |= FLAG_STDIN; else {