From ea824fb9370c41756a75b70698b6222b3386f6c5 Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Fri, 21 Jul 2000 22:17:39 +0000 Subject: [PATCH] Fixed stdin/stdout paths so things like tar cvf - /etc/* | gzip -c9 >test.tgz will now work. Fix thanks to Dave Cinege with some adjustments by me to be mroe GNU-like. -Erik --- archival/gunzip.c | 28 +++++++++++++++++++--------- archival/gzip.c | 18 ++++++++++++++++-- gunzip.c | 28 +++++++++++++++++++--------- gzip.c | 18 ++++++++++++++++-- 4 files changed, 70 insertions(+), 22 deletions(-) diff --git a/archival/gunzip.c b/archival/gunzip.c index b29bdf7c1..330dee335 100644 --- a/archival/gunzip.c +++ b/archival/gunzip.c @@ -569,19 +569,20 @@ local int get_method (int in); int gunzip_main(int argc, char **argv) { int file_count; /* number of files to precess */ - int to_stdout = 0; + int tostdout = 0; int fromstdin = 0; int result; int inFileNum; int outFileNum; int delInputFile = 0; + int force = 0; struct stat statBuf; char *delFileName; char ifname[MAX_PATH_LEN + 1]; /* input file name */ char ofname[MAX_PATH_LEN + 1]; /* output file name */ if (strcmp(applet_name, "zcat") == 0) { - to_stdout = 1; + tostdout = 1; if (argc == 1) { fromstdin = 1; } @@ -590,23 +591,32 @@ int gunzip_main(int argc, char **argv) /* Parse any options */ while (--argc > 0 && **(++argv) == '-') { if (*((*argv) + 1) == '\0') { - fromstdin = 1; - to_stdout = 1; + tostdout = 1; } while (*(++(*argv))) { switch (**argv) { case 'c': - to_stdout = 1; + tostdout = 1; break; case 't': test_mode = 1; break; - + case 'f': + force = 1; + break; default: usage(gunzip_usage); } } } + if (argc <= 0) + fromstdin = 1; + + if (isatty(fileno(stdin)) && fromstdin==1 && force==0) + fatalError( "data not read from terminal. Use -f to force it.\n"); + if (isatty(fileno(stdout)) && tostdout==1 && force==0) + fatalError( "data not written to terminal. Use -f to force it.\n"); + foreground = signal(SIGINT, SIG_IGN) != SIG_IGN; if (foreground) { @@ -644,7 +654,7 @@ int gunzip_main(int argc, char **argv) ifile_size = -1L; /* convention for unknown size */ } else { /* Open up the input file */ - if (*argv == '\0') + if (argc <= 0) usage(gunzip_usage); if (strlen(*argv) > MAX_PATH_LEN) { errorMsg(name_too_long); @@ -667,7 +677,7 @@ int gunzip_main(int argc, char **argv) ifile_size = statBuf.st_size; } - if (to_stdout == 1) { + if (tostdout == 1) { /* And get to work */ strcpy(ofname, "stdout"); outFileNum = fileno(stdout); @@ -741,7 +751,7 @@ int gunzip_main(int argc, char **argv) /* ======================================================================== * Check the magic number of the input file and update ofname if an - * original name was given and to_stdout is not set. + * original name was given and tostdout is not set. * Return the compression method, -1 for error, -2 for warning. * Set inptr to the offset of the next byte to be processed. * Updates time_stamp if there is one and --no-time is not used. diff --git a/archival/gzip.c b/archival/gzip.c index 98ce259ca..19ad1a729 100644 --- a/archival/gzip.c +++ b/archival/gzip.c @@ -1801,6 +1801,7 @@ int gzip_main(int argc, char **argv) char *delFileName; int tostdout = 0; int fromstdin = 0; + int force = 0; if (argc == 1) usage(gzip_usage); @@ -1808,7 +1809,6 @@ int gzip_main(int argc, char **argv) /* Parse any options */ while (--argc > 0 && **(++argv) == '-') { if (*((*argv) + 1) == '\0') { - fromstdin = 1; tostdout = 1; } while (*(++(*argv))) { @@ -1816,11 +1816,25 @@ int gzip_main(int argc, char **argv) case 'c': tostdout = 1; break; + case 'f': + force = 1; + break; + /* Ignore 1-9 (compression level) options */ + case '1': case '2': case '3': case '4': case '5': + case '6': case '7': case '8': case '9': + break; default: usage(gzip_usage); } } } + if (argc <= 0) + fromstdin = 1; + + if (isatty(fileno(stdin)) && fromstdin==1 && force==0) + fatalError( "data not read from terminal. Use -f to force it.\n"); + if (isatty(fileno(stdout)) && tostdout==1 && force==0) + fatalError( "data not written to terminal. Use -f to force it.\n"); foreground = signal(SIGINT, SIG_IGN) != SIG_IGN; if (foreground) { @@ -1860,7 +1874,7 @@ int gzip_main(int argc, char **argv) ifile_size = -1L; /* convention for unknown size */ } else { /* Open up the input file */ - if (*argv == '\0') + if (argc <= 0) usage(gzip_usage); strncpy(ifname, *argv, MAX_PATH_LEN); diff --git a/gunzip.c b/gunzip.c index b29bdf7c1..330dee335 100644 --- a/gunzip.c +++ b/gunzip.c @@ -569,19 +569,20 @@ local int get_method (int in); int gunzip_main(int argc, char **argv) { int file_count; /* number of files to precess */ - int to_stdout = 0; + int tostdout = 0; int fromstdin = 0; int result; int inFileNum; int outFileNum; int delInputFile = 0; + int force = 0; struct stat statBuf; char *delFileName; char ifname[MAX_PATH_LEN + 1]; /* input file name */ char ofname[MAX_PATH_LEN + 1]; /* output file name */ if (strcmp(applet_name, "zcat") == 0) { - to_stdout = 1; + tostdout = 1; if (argc == 1) { fromstdin = 1; } @@ -590,23 +591,32 @@ int gunzip_main(int argc, char **argv) /* Parse any options */ while (--argc > 0 && **(++argv) == '-') { if (*((*argv) + 1) == '\0') { - fromstdin = 1; - to_stdout = 1; + tostdout = 1; } while (*(++(*argv))) { switch (**argv) { case 'c': - to_stdout = 1; + tostdout = 1; break; case 't': test_mode = 1; break; - + case 'f': + force = 1; + break; default: usage(gunzip_usage); } } } + if (argc <= 0) + fromstdin = 1; + + if (isatty(fileno(stdin)) && fromstdin==1 && force==0) + fatalError( "data not read from terminal. Use -f to force it.\n"); + if (isatty(fileno(stdout)) && tostdout==1 && force==0) + fatalError( "data not written to terminal. Use -f to force it.\n"); + foreground = signal(SIGINT, SIG_IGN) != SIG_IGN; if (foreground) { @@ -644,7 +654,7 @@ int gunzip_main(int argc, char **argv) ifile_size = -1L; /* convention for unknown size */ } else { /* Open up the input file */ - if (*argv == '\0') + if (argc <= 0) usage(gunzip_usage); if (strlen(*argv) > MAX_PATH_LEN) { errorMsg(name_too_long); @@ -667,7 +677,7 @@ int gunzip_main(int argc, char **argv) ifile_size = statBuf.st_size; } - if (to_stdout == 1) { + if (tostdout == 1) { /* And get to work */ strcpy(ofname, "stdout"); outFileNum = fileno(stdout); @@ -741,7 +751,7 @@ int gunzip_main(int argc, char **argv) /* ======================================================================== * Check the magic number of the input file and update ofname if an - * original name was given and to_stdout is not set. + * original name was given and tostdout is not set. * Return the compression method, -1 for error, -2 for warning. * Set inptr to the offset of the next byte to be processed. * Updates time_stamp if there is one and --no-time is not used. diff --git a/gzip.c b/gzip.c index 98ce259ca..19ad1a729 100644 --- a/gzip.c +++ b/gzip.c @@ -1801,6 +1801,7 @@ int gzip_main(int argc, char **argv) char *delFileName; int tostdout = 0; int fromstdin = 0; + int force = 0; if (argc == 1) usage(gzip_usage); @@ -1808,7 +1809,6 @@ int gzip_main(int argc, char **argv) /* Parse any options */ while (--argc > 0 && **(++argv) == '-') { if (*((*argv) + 1) == '\0') { - fromstdin = 1; tostdout = 1; } while (*(++(*argv))) { @@ -1816,11 +1816,25 @@ int gzip_main(int argc, char **argv) case 'c': tostdout = 1; break; + case 'f': + force = 1; + break; + /* Ignore 1-9 (compression level) options */ + case '1': case '2': case '3': case '4': case '5': + case '6': case '7': case '8': case '9': + break; default: usage(gzip_usage); } } } + if (argc <= 0) + fromstdin = 1; + + if (isatty(fileno(stdin)) && fromstdin==1 && force==0) + fatalError( "data not read from terminal. Use -f to force it.\n"); + if (isatty(fileno(stdout)) && tostdout==1 && force==0) + fatalError( "data not written to terminal. Use -f to force it.\n"); foreground = signal(SIGINT, SIG_IGN) != SIG_IGN; if (foreground) { @@ -1860,7 +1874,7 @@ int gzip_main(int argc, char **argv) ifile_size = -1L; /* convention for unknown size */ } else { /* Open up the input file */ - if (*argv == '\0') + if (argc <= 0) usage(gzip_usage); strncpy(ifname, *argv, MAX_PATH_LEN); -- 2.25.1