summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--ChangeLog7
-rw-r--r--Makefile.in17
-rw-r--r--NEWS4
-rwxr-xr-xconfigure4
-rw-r--r--doc/zcat.121
-rw-r--r--doc/zdiff.14
-rw-r--r--doc/zgrep.121
-rw-r--r--doc/zutils.146
-rw-r--r--doc/zutils.infobin6266 -> 6062 bytes
-rw-r--r--doc/zutils.texinfo38
-rw-r--r--main.cc146
-rwxr-xr-xtestsuite/check.sh13
-rw-r--r--zcat.in29
-rw-r--r--zgrep.in29
14 files changed, 207 insertions, 172 deletions
diff --git a/ChangeLog b/ChangeLog
index 18e4f63..4a0b508 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2009-10-05 Antonio Diaz Diaz <ant_diaz@teleline.es>
+
+ * Version 0.6 released.
+ * zcat.in, zgrep.in: Removed again default compressor. Format of
+ data read from stdin is now automatically detected.
+ * Makefile.in: Added "--name" option to help2man invocation.
+
2009-10-01 Antonio Diaz Diaz <ant_diaz@teleline.es>
* Version 0.5 released.
diff --git a/Makefile.in b/Makefile.in
index 23330c1..a3c14ba 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -65,20 +65,19 @@ info : $(VPATH)/doc/$(progname).info
$(VPATH)/doc/$(progname).info : $(VPATH)/doc/$(progname).texinfo
cd $(VPATH)/doc && makeinfo $(progname).texinfo
-man : $(VPATH)/doc/$(progname).1 $(VPATH)/doc/zcat.1 $(VPATH)/doc/zdiff.1 \
- $(VPATH)/doc/zgrep.1
-
-$(VPATH)/doc/$(progname).1 : $(progname)
- help2man -o $(VPATH)/doc/$(progname).1 ./$(progname)
+man : $(VPATH)/doc/zcat.1 $(VPATH)/doc/zdiff.1 $(VPATH)/doc/zgrep.1
$(VPATH)/doc/zcat.1 : zcat
- help2man -o $(VPATH)/doc/zcat.1 --no-info ./zcat
+ help2man -n 'concatenate compressed files to stdout' \
+ -o $(VPATH)/doc/zcat.1 --no-info ./zcat
$(VPATH)/doc/zdiff.1 : zdiff
- help2man -o $(VPATH)/doc/zdiff.1 --no-info ./zdiff
+ help2man -n 'compare compressed files' \
+ -o $(VPATH)/doc/zdiff.1 --no-info ./zdiff
$(VPATH)/doc/zgrep.1 : zgrep
- help2man -o $(VPATH)/doc/zgrep.1 --no-info ./zgrep
+ help2man -n 'search compressed files for a regular expression' \
+ -o $(VPATH)/doc/zgrep.1 --no-info ./zgrep
Makefile : $(VPATH)/configure $(VPATH)/Makefile.in
./config.status
@@ -103,7 +102,6 @@ install-info :
install-man :
if test ! -d $(DESTDIR)$(mandir)/man1 ; then $(INSTALL_DIR) $(DESTDIR)$(mandir)/man1 ; fi
- $(INSTALL_DATA) $(VPATH)/doc/$(progname).1 $(DESTDIR)$(mandir)/man1/$(progname).1
$(INSTALL_DATA) $(VPATH)/doc/zcat.1 $(DESTDIR)$(mandir)/man1/zcat.1
-rm -f $(DESTDIR)$(mandir)/man1/zcmp.1
cd $(DESTDIR)$(mandir)/man1 && ln -s zdiff.1 zcmp.1
@@ -131,7 +129,6 @@ uninstall-info :
-rm -f $(DESTDIR)$(infodir)/$(progname).info
uninstall-man :
- -rm -f $(DESTDIR)$(mandir)/man1/$(progname).1
-rm -f $(DESTDIR)$(mandir)/man1/zcat.1
-rm -f $(DESTDIR)$(mandir)/man1/zcmp.1
-rm -f $(DESTDIR)$(mandir)/man1/zdiff.1
diff --git a/NEWS b/NEWS
index 1a2e3e2..4cd06b6 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,3 @@
-Changes in version 0.5:
+Changes in version 0.6:
-Zcat, zegrep, zfgrep and zgrep can read again compressed data from stdin.
+Format of data read from stdin is now automatically detected.
diff --git a/configure b/configure
index a6d757c..100a1e2 100755
--- a/configure
+++ b/configure
@@ -5,12 +5,12 @@
# This configure script is free software: you have unlimited permission
# to copy, distribute and modify it.
#
-# Date of this version: 2009-10-01
+# Date of this version: 2009-10-05
args=
no_create=
progname=zutils
-progversion=0.5
+progversion=0.6
srctrigger=zdiff.in
# clear some things potentially inherited from environment.
diff --git a/doc/zcat.1 b/doc/zcat.1
index 10737a2..6789957 100644
--- a/doc/zcat.1
+++ b/doc/zcat.1
@@ -1,7 +1,7 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.36.
-.TH ZCAT "1" "October 2009" "Zcat 0.5" "User Commands"
+.TH ZCAT "1" "October 2009" "Zcat 0.6" "User Commands"
.SH NAME
-Zcat \- manual page for Zcat 0.5
+Zcat \- concatenate compressed files to stdout
.SH SYNOPSIS
.B zcat
[\fIOPTIONS\fR] [\fICAT_OPTIONS\fR] [\fIFILES\fR]
@@ -13,8 +13,9 @@ concatenation of any combination of compressed and non\-compressed files.
If any given file is compressed, its uncompressed content is used. If a
given file does not exist, zcat tries the compressed file names
corresponding to the supported compressors. If no files are specified,
-the standard input is decompressed using the selected compressor and
-sent to stdout.
+data is read from standard input, decompressed if needed, and sent to
+stdout. Data read from standard input must be of the same type; all
+uncompressed or all compressed with the same compressor.
The supported compressors are gzip, bzip2, lzip and xz.
.PP
CAT_OPTIONS are passed directly to cat.
@@ -26,18 +27,6 @@ display this help and exit
.TP
\fB\-V\fR, \fB\-\-version\fR
output version information and exit
-.TP
-\fB\-\-gzip\fR
-use gzip as decompressor for stdin (default)
-.TP
-\fB\-\-bzip2\fR
-use bzip2 as decompressor for stdin
-.TP
-\fB\-\-lzip\fR
-use lzip as decompressor for stdin
-.TP
-\fB\-\-xz\fR
-use xz as decompressor for stdin
.SH "REPORTING BUGS"
Report bugs to zutils\-bug@nongnu.org
Zutils home page: http://www.nongnu.org/zutils/zutils.html
diff --git a/doc/zdiff.1 b/doc/zdiff.1
index 3509c21..cf19d27 100644
--- a/doc/zdiff.1
+++ b/doc/zdiff.1
@@ -1,7 +1,7 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.36.
-.TH ZDIFF "1" "October 2009" "Zdiff 0.5" "User Commands"
+.TH ZDIFF "1" "October 2009" "Zdiff 0.6" "User Commands"
.SH NAME
-Zdiff \- manual page for Zdiff 0.5
+Zdiff \- compare compressed files
.SH SYNOPSIS
.B zdiff
[\fIOPTIONS\fR] [\fIDIFF_OPTIONS\fR] \fIFILE1 \fR[\fIFILE2\fR]
diff --git a/doc/zgrep.1 b/doc/zgrep.1
index 3db747b..fc22717 100644
--- a/doc/zgrep.1
+++ b/doc/zgrep.1
@@ -1,7 +1,7 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.36.
-.TH ZGREP "1" "October 2009" "Zgrep 0.5" "User Commands"
+.TH ZGREP "1" "October 2009" "Zgrep 0.6" "User Commands"
.SH NAME
-Zgrep \- manual page for Zgrep 0.5
+Zgrep \- search compressed files for a regular expression
.SH SYNOPSIS
.B zgrep
[\fIOPTIONS\fR] [\fIGREP_OPTIONS\fR] \fIPATTERN \fR[\fIFILES\fR]
@@ -13,8 +13,9 @@ transparent search on any combination of compressed and non\-compressed
files. If any given file is compressed, its uncompressed content is
used. If a given file does not exist, zgrep tries the compressed file
names corresponding to the supported compressors. If no files are
-specified, the standard input is decompressed using the selected
-compressor and fed to grep.
+specified, data is read from standard input, decompressed if needed, and
+fed to grep. Data read from standard input must be of the same type; all
+uncompressed or all compressed with the same compressor.
The supported compressors are gzip, bzip2, lzip and xz.
.PP
Zegrep is a shortcut for "zgrep \fB\-E\fR"
@@ -29,18 +30,6 @@ display this help and exit
.TP
\fB\-V\fR, \fB\-\-version\fR
output version information and exit
-.TP
-\fB\-\-gzip\fR
-use gzip as decompressor for stdin (default)
-.TP
-\fB\-\-bzip2\fR
-use bzip2 as decompressor for stdin
-.TP
-\fB\-\-lzip\fR
-use lzip as decompressor for stdin
-.TP
-\fB\-\-xz\fR
-use xz as decompressor for stdin
.SH "REPORTING BUGS"
Report bugs to zutils\-bug@nongnu.org
Zutils home page: http://www.nongnu.org/zutils/zutils.html
diff --git a/doc/zutils.1 b/doc/zutils.1
deleted file mode 100644
index 4836ace..0000000
--- a/doc/zutils.1
+++ /dev/null
@@ -1,46 +0,0 @@
-.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.36.
-.TH ZUTILS "1" "October 2009" "Zutils 0.5" "User Commands"
-.SH NAME
-Zutils \- manual page for Zutils 0.5
-.SH SYNOPSIS
-.B zutils
-[\fIoptions\fR] [\fIfiles\fR]
-.SH DESCRIPTION
-Zutils \- A file format detector for compressed files.
-.SH OPTIONS
-.TP
-\fB\-h\fR, \fB\-\-help\fR
-display this help and exit
-.TP
-\fB\-V\fR, \fB\-\-version\fR
-output version information and exit
-.TP
-\fB\-q\fR, \fB\-\-quiet\fR
-suppress all messages
-.TP
-\fB\-t\fR, \fB\-\-test\fR
-test compressed file type
-.TP
-\fB\-v\fR, \fB\-\-verbose\fR
-be verbose (a 2nd \fB\-v\fR gives more)
-.SH "REPORTING BUGS"
-Report bugs to zutils\-bug@nongnu.org
-Zutils home page: http://www.nongnu.org/zutils/zutils.html
-.SH COPYRIGHT
-Copyright \(co 2009 Antonio Diaz Diaz.
-License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
-.br
-This is free software: you are free to change and redistribute it.
-There is NO WARRANTY, to the extent permitted by law.
-.SH "SEE ALSO"
-The full documentation for
-.B Zutils
-is maintained as a Texinfo manual. If the
-.B info
-and
-.B Zutils
-programs are properly installed at your site, the command
-.IP
-.B info Zutils
-.PP
-should give you access to the complete manual.
diff --git a/doc/zutils.info b/doc/zutils.info
index e2d3258..34f390b 100644
--- a/doc/zutils.info
+++ b/doc/zutils.info
Binary files differ
diff --git a/doc/zutils.texinfo b/doc/zutils.texinfo
index 76f771b..3902270 100644
--- a/doc/zutils.texinfo
+++ b/doc/zutils.texinfo
@@ -5,8 +5,8 @@
@finalout
@c %**end of header
-@set UPDATED 1 October 2009
-@set VERSION 0.5
+@set UPDATED 5 October 2009
+@set VERSION 0.6
@dircategory Data Compression
@direntry
@@ -68,8 +68,9 @@ concatenation of any combination of compressed and non-compressed files.
If any given file is compressed, its uncompressed content is used. If a
given file does not exist, zcat tries the compressed file names
corresponding to the supported compressors. If no files are specified,
-the standard input is decompressed using the selected compressor and
-sent to stdout.
+data is read from standard input, decompressed if needed, and sent to
+stdout. Data read from standard input must be of the same type; all
+uncompressed or all compressed with the same compressor.
The format for running zcat is:
@@ -92,18 +93,6 @@ Print an informative help message describing the options and exit.
@itemx -V
Print the version number of zcat on the standard output and exit.
-@item --gzip
-Use gzip as decompressor for stdin (default).
-
-@item --bzip2
-Use bzip2 as decompressor for stdin.
-
-@item --lzip
-Use lzip as decompressor for stdin.
-
-@item --xz
-Use xz as decompressor for stdin.
-
@end table
@@ -170,8 +159,9 @@ transparent search on any combination of compressed and non-compressed
files. If any given file is compressed, its uncompressed content is
used. If a given file does not exist, zgrep tries the compressed file
names corresponding to the supported compressors. If no files are
-specified, the standard input is decompressed using the selected
-compressor and fed to grep.
+specified, data is read from standard input, decompressed if needed, and
+fed to grep. Data read from standard input must be of the same type; all
+uncompressed or all compressed with the same compressor.
@noindent
Zegrep is a shortcut for @samp{zgrep -E}@*
@@ -199,18 +189,6 @@ Print an informative help message describing the options and exit.
@itemx -V
Print the version number of zgrep on the standard output and exit.
-@item --gzip
-Use gzip as decompressor for stdin (default).
-
-@item --bzip2
-Use bzip2 as decompressor for stdin.
-
-@item --lzip
-Use lzip as decompressor for stdin.
-
-@item --xz
-Use xz as decompressor for stdin.
-
@end table
diff --git a/main.cc b/main.cc
index 961c1e1..828ac06 100644
--- a/main.cc
+++ b/main.cc
@@ -134,6 +134,7 @@ void show_help() throw()
// std::printf( " -d, --decompress decompress\n" );
// std::printf( " -f, --force overwrite existing output files\n" );
// std::printf( " -k, --keep keep (don't delete) input files\n" );
+ std::printf( " -m, --magic=<type> output magic bytes for given file type\n" );
// std::printf( " -o, --output=<file> if reading stdin, place the output into <file>\n" );
std::printf( " -q, --quiet suppress all messages\n" );
std::printf( " -t, --test test compressed file type\n" );
@@ -492,6 +493,129 @@ int decompress( const int inhandle, const Pretty_print & pp )
}
*/
+unsigned char xdigit( const int value ) throw()
+ {
+ if( value >= 0 && value <= 9 ) return '0' + value;
+ if( value >= 10 && value <= 15 ) return 'A' + value - 10;
+ return 0;
+ }
+
+
+int xtoi( const unsigned char ch ) throw()
+ {
+ switch( ch )
+ {
+ case '0': return 0;
+ case '1': return 1;
+ case '2': return 2;
+ case '3': return 3;
+ case '4': return 4;
+ case '5': return 5;
+ case '6': return 6;
+ case '7': return 7;
+ case '8': return 8;
+ case '9': return 9;
+ case 'a':
+ case 'A': return 0x0A;
+ case 'b':
+ case 'B': return 0x0B;
+ case 'c':
+ case 'C': return 0x0C;
+ case 'd':
+ case 'D': return 0x0D;
+ case 'e':
+ case 'E': return 0x0E;
+ case 'f':
+ case 'F': return 0x0F;
+ default: return -1;
+ }
+ }
+
+
+bool hex_to_data( const std::string & hex, std::string & data )
+ {
+ data.clear();
+ if( hex.size() == 0 || hex.size() % 2 != 0 ) return false;
+ for( unsigned int i = 0; 2 * i + 1 < hex.size(); ++i )
+ {
+ int uch = xtoi( hex[2*i] );
+ int lch = xtoi( hex[2*i+1] );
+ if( uch < 0 || lch < 0 ) return false;
+ data.push_back( ( uch << 4 ) | lch );
+ }
+ return true;
+ }
+
+
+int print_magic_type( const std::string & magic_type )
+ {
+ std::string data;
+
+ if( magic_type == "gzip" ) std::printf( "\x1F\x8B" );
+ else if( magic_type == "bzip2" ) std::printf( "BZh" );
+ else if( magic_type == "lzip" ) std::printf( "LZIP" );
+ else if( magic_type == "xz" ) std::printf( "%c7zXZ", '\xFD' );
+ else if( hex_to_data( magic_type, data ) ) std::printf( data.c_str() );
+ else return 1;
+ return 0;
+ }
+
+
+int test_stdin_type( const int inhandle, const Pretty_print & pp )
+ {
+ unsigned char buf[5];
+ const char * msg = 0;
+ int i = 0;
+ if( readblock( inhandle, (char *)buf, 1 ) == 1 )
+ {
+ if( buf[0] == 0x1F )
+ {
+ if( readblock( inhandle, (char *)&buf[++i], 1 ) == 1 && buf[i] == 0x8B )
+ msg = "gzip";
+ }
+ else if( buf[0] == 'B' )
+ {
+ if( readblock( inhandle, (char *)&buf[++i], 1 ) == 1 && buf[i] == 'Z' &&
+ readblock( inhandle, (char *)&buf[++i], 1 ) == 1 && buf[i] == 'h' )
+ msg = "bzip2";
+ }
+ else if( buf[0] == 'L' )
+ {
+ if( readblock( inhandle, (char *)&buf[++i], 1 ) == 1 && buf[i] == 'Z' &&
+ readblock( inhandle, (char *)&buf[++i], 1 ) == 1 && buf[i] == 'I' &&
+ readblock( inhandle, (char *)&buf[++i], 1 ) == 1 && buf[i] == 'P' )
+ msg = "lzip";
+ }
+ else if( buf[0] == 0xFD )
+ {
+ if( readblock( inhandle, (char *)&buf[++i], 1 ) == 1 && buf[i] == '7' &&
+ readblock( inhandle, (char *)&buf[++i], 1 ) == 1 && buf[i] == 'z' &&
+ readblock( inhandle, (char *)&buf[++i], 1 ) == 1 && buf[i] == 'X' &&
+ readblock( inhandle, (char *)&buf[++i], 1 ) == 1 && buf[i] == 'Z' )
+ msg = "xz";
+ }
+ }
+ const int retval = ( msg ? 0 : 1 );
+ if( verbosity >= 0 )
+ {
+ if( verbosity >= 1 ) pp();
+ if( !msg )
+ {
+ char hexmsg[(2*sizeof buf)+1];
+ for( int j = 0; j <= i; ++j )
+ {
+ hexmsg[2*j] = xdigit( buf[j] >> 4 );
+ hexmsg[2*j+1] = xdigit( buf[j] & 0x0F );
+ }
+ hexmsg[2*i+2] = 0;
+ msg = hexmsg;
+ }
+ std::printf( "%s\n", msg );
+ }
+ return retval;
+ }
+
+
int test_type( const int inhandle, const Pretty_print & pp )
{
unsigned char buf[5];
@@ -505,7 +629,7 @@ int test_type( const int inhandle, const Pretty_print & pp )
msg = "bzip2";
else if( buf[0] == 'L' && buf[1] == 'Z' && buf[2] == 'I' && buf[3] == 'P' )
msg = "lzip";
- else if( buf[1] == '7' && buf[2] == 'z' && buf[3] == 'X' && buf[4] == 'Z' )
+ else if( buf[0] == 0xFD && buf[1] == '7' && buf[2] == 'z' && buf[3] == 'X' && buf[4] == 'Z' )
msg = "xz";
}
const int retval = ( msg ? 0 : 1 );
@@ -546,6 +670,7 @@ int main( const int argc, const char * argv[] )
std::string input_filename;
std::string default_output_filename;
std::vector< std::string > filenames;
+ std::string magic_type;
invocation_name = argv[0];
const Arg_parser::Option options[] =
@@ -555,6 +680,7 @@ int main( const int argc, const char * argv[] )
{ 'f', "force", Arg_parser::no },
{ 'h', "help", Arg_parser::no },
{ 'k', "keep", Arg_parser::no },
+ { 'm', "magic", Arg_parser::yes },
{ 'o', "output", Arg_parser::yes },
{ 'q', "quiet", Arg_parser::no },
{ 't', "test", Arg_parser::no },
@@ -571,7 +697,7 @@ int main( const int argc, const char * argv[] )
{
const int code = parser.code( argind );
if( !code ) break; // no more options
- const char * arg = parser.argument( argind ).c_str();
+ const std::string & arg = parser.argument( argind );
switch( code )
{
case 'c': to_stdout = true; break;
@@ -579,6 +705,7 @@ int main( const int argc, const char * argv[] )
case 'f': force = true; break;
case 'h': show_help(); return 0;
case 'k': keep_input_files = true; break;
+ case 'm': magic_type = arg; break;
case 'o': default_output_filename = arg; break;
case 'q': verbosity = -1; break;
case 't': program_mode = m_test; break;
@@ -588,6 +715,8 @@ int main( const int argc, const char * argv[] )
}
}
+ if( magic_type.size() ) return print_magic_type( magic_type );
+
bool filenames_given = false;
for( ; argind < parser.arguments(); ++argind )
{
@@ -669,19 +798,22 @@ int main( const int argc, const char * argv[] )
case m_decompress:
/*tmp = decompress( inhandle, pp );*/ break;
case m_test:
- tmp = test_type( inhandle, pp ); break;
+ if( inhandle == STDIN_FILENO )
+ tmp = test_stdin_type( inhandle, pp );
+ else tmp = test_type( inhandle, pp );
+ break;
}
if( tmp > retval ) retval = tmp;
if( tmp && program_mode != m_test ) cleanup_and_fail( retval );
-/*
- if( delete_output_on_interrupt )
- close_and_set_permissions( in_statsp, &retval );
+
+// if( delete_output_on_interrupt )
+// close_and_set_permissions( in_statsp, &retval );
if( input_filename.size() )
{
close( inhandle ); inhandle = -1;
if( !keep_input_files && !to_stdout && program_mode != m_test )
std::remove( input_filename.c_str() );
- }*/
+ }
}
if( outhandle >= 0 ) close( outhandle );
return retval;
diff --git a/testsuite/check.sh b/testsuite/check.sh
index a8843f3..41e44b7 100755
--- a/testsuite/check.sh
+++ b/testsuite/check.sh
@@ -55,13 +55,10 @@ echo -n .
"${ZCAT}" < in.gz > copy || fail=1
cmp in copy || fail=1
echo -n .
-"${ZCAT}" --gzip < in.gz > copy || fail=1
+"${ZCAT}" < in.bz2 > copy || fail=1
cmp in copy || fail=1
echo -n .
-"${ZCAT}" --bzip2 < in.bz2 > copy || fail=1
-cmp in copy || fail=1
-echo -n .
-"${ZCAT}" --lzip < in.lz > copy || fail=1
+"${ZCAT}" < in.lz > copy || fail=1
cmp in copy || fail=1
echo -n .
"${ZCAT}" in > copy || fail=1
@@ -122,11 +119,9 @@ done
echo -n .
"${ZGREP}" License < in.gz 2>&1 > /dev/null || fail=1
echo -n .
-"${ZGREP}" --gzip License < in.gz 2>&1 > /dev/null || fail=1
-echo -n .
-"${ZGREP}" --bzip2 License < in.bz2 2>&1 > /dev/null || fail=1
+"${ZGREP}" License < in.bz2 2>&1 > /dev/null || fail=1
echo -n .
-"${ZGREP}" --lzip License < in.lz 2>&1 > /dev/null || fail=1
+"${ZGREP}" License < in.lz 2>&1 > /dev/null || fail=1
echo -n .
"${ZGREP}" License in 2>&1 > /dev/null || fail=1
echo -n .
diff --git a/zcat.in b/zcat.in
index 0721e60..fb7ab73 100644
--- a/zcat.in
+++ b/zcat.in
@@ -8,7 +8,6 @@
LC_ALL=C
export LC_ALL
args=
-default_prog=gzip
two_hyphens=0
# Loop over args until a filename is found
@@ -23,8 +22,9 @@ while [ x"$1" != x ] ; do
echo "If any given file is compressed, its uncompressed content is used. If a"
echo "given file does not exist, zcat tries the compressed file names"
echo "corresponding to the supported compressors. If no files are specified,"
- echo "the standard input is decompressed using the selected compressor and"
- echo "sent to stdout."
+ echo "data is read from standard input, decompressed if needed, and sent to"
+ echo "stdout. Data read from standard input must be of the same type; all"
+ echo "uncompressed or all compressed with the same compressor."
echo "The supported compressors are gzip, bzip2, lzip and xz."
echo
echo "Usage: $0 [OPTIONS] [CAT_OPTIONS] [FILES]"
@@ -35,10 +35,6 @@ while [ x"$1" != x ] ; do
echo "Options:"
echo " -h, --help display this help and exit"
echo " -V, --version output version information and exit"
- echo " --gzip use gzip as decompressor for stdin (default)"
- echo " --bzip2 use bzip2 as decompressor for stdin"
- echo " --lzip use lzip as decompressor for stdin"
- echo " --xz use xz as decompressor for stdin"
echo
echo "Report bugs to zutils-bug@nongnu.org"
echo "Zutils home page: http://www.nongnu.org/zutils/zutils.html"
@@ -49,14 +45,6 @@ while [ x"$1" != x ] ; do
echo "This script is free software: you have unlimited permission"
echo "to copy, distribute and modify it."
exit 0 ;;
- --gz*)
- default_prog=gzip ;;
- --bz*)
- default_prog=bzip2 ;;
- --lz*)
- default_prog=lzip ;;
- --xz*)
- default_prog=xz ;;
- | -f)
;;
--)
@@ -70,7 +58,16 @@ while [ x"$1" != x ] ; do
done
if [ $# = 0 ]; then
- ${default_prog} -cdfq | cat ${args}
+ bindir=`echo "$0" | sed -e 's,[^/]*$,,'`
+ prog_name=`"${bindir}"zutils -t`
+ case "${prog_name}" in
+ gzip) prog="gzip -cdfq" ;;
+ bzip2) prog="bzip2 -cdfq" ;;
+ lzip) prog="lzip -cdfq" ;;
+ xz) prog="xz -cdfq" ;;
+ *) prog=cat ;;
+ esac
+ { "${bindir}"zutils -m ${prog_name} ; cat ; } | ${prog} | cat ${args}
exit $?
fi
diff --git a/zgrep.in b/zgrep.in
index ab004b7..df400c3 100644
--- a/zgrep.in
+++ b/zgrep.in
@@ -8,7 +8,6 @@
LC_ALL=C
export LC_ALL
args=
-default_prog=gzip
have_pat=0
list=0
no_name=0
@@ -26,8 +25,9 @@ while [ x"$1" != x ] ; do
echo "files. If any given file is compressed, its uncompressed content is"
echo "used. If a given file does not exist, zgrep tries the compressed file"
echo "names corresponding to the supported compressors. If no files are"
- echo "specified, the standard input is decompressed using the selected"
- echo "compressor and fed to grep."
+ echo "specified, data is read from standard input, decompressed if needed, and"
+ echo "fed to grep. Data read from standard input must be of the same type; all"
+ echo "uncompressed or all compressed with the same compressor."
echo "The supported compressors are gzip, bzip2, lzip and xz."
echo
echo "Zegrep is a shortcut for \"zgrep -E\""
@@ -41,10 +41,6 @@ while [ x"$1" != x ] ; do
echo "Options:"
echo " -h, --help display this help and exit"
echo " -V, --version output version information and exit"
- echo " --gzip use gzip as decompressor for stdin (default)"
- echo " --bzip2 use bzip2 as decompressor for stdin"
- echo " --lzip use lzip as decompressor for stdin"
- echo " --xz use xz as decompressor for stdin"
echo
echo "Report bugs to zutils-bug@nongnu.org"
echo "Zutils home page: http://www.nongnu.org/zutils/zutils.html"
@@ -55,14 +51,6 @@ while [ x"$1" != x ] ; do
echo "This script is free software: you have unlimited permission"
echo "to copy, distribute and modify it."
exit 0 ;;
- --gz*)
- default_prog=gzip ;;
- --bz*)
- default_prog=bzip2 ;;
- --lz*)
- default_prog=lzip ;;
- --xz*)
- default_prog=xz ;;
-[drRzZ] | --di* | --exc* | --inc* | --nu* | --rec*)
echo "$0: option $1 not supported"
exit 1 ;;
@@ -96,7 +84,16 @@ if [ ${have_pat} = 0 ]; then
fi
if [ $# = 0 ]; then
- ${default_prog} -cdfq | grep ${args}
+ bindir=`echo "$0" | sed -e 's,[^/]*$,,'`
+ prog_name=`"${bindir}"zutils -t`
+ case "${prog_name}" in
+ gzip) prog="gzip -cdfq" ;;
+ bzip2) prog="bzip2 -cdfq" ;;
+ lzip) prog="lzip -cdfq" ;;
+ xz) prog="xz -cdfq" ;;
+ *) prog=cat ;;
+ esac
+ { "${bindir}"zutils -m ${prog_name} ; cat ; } | ${prog} | grep ${args}
exit $?
fi