diff --git a/main.c b/main.c index 33662d8..c2a6a7b 100644 --- a/main.c +++ b/main.c @@ -35,6 +35,12 @@ #ifdef HAVE_SYS_RESOURCE_H # include #endif +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif #include #include #ifdef HAVE_ENDIAN_H @@ -718,8 +724,19 @@ int main(int argc, char *argv[]) control.infile = argv[i]; else if (!(i == 0 && STDIN)) break; - if (control.infile && (strcmp(control.infile, "-") == 0)) - control.flags |= FLAG_STDIN; + if (control.infile) { + if ((strcmp(control.infile, "-") == 0)) + control.flags |= FLAG_STDIN; + else { + struct stat infile_stat; + + stat(control.infile, &infile_stat); + if (unlikely(!S_ISREG(infile_stat.st_mode) && + !S_ISLNK(infile_stat.st_mode))) + failure("lrzip only works directly on FILES.\n" + "Use lrztar or pipe through tar for compressing directories.\n"); + } + } if (INFO && STDIN) failure("Will not get file info from STDIN\n");