Merging upstream version 0.6.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
621b34d9c0
commit
fe44868192
14 changed files with 207 additions and 172 deletions
|
@ -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>
|
2009-10-01 Antonio Diaz Diaz <ant_diaz@teleline.es>
|
||||||
|
|
||||||
* Version 0.5 released.
|
* Version 0.5 released.
|
||||||
|
|
17
Makefile.in
17
Makefile.in
|
@ -65,20 +65,19 @@ info : $(VPATH)/doc/$(progname).info
|
||||||
$(VPATH)/doc/$(progname).info : $(VPATH)/doc/$(progname).texinfo
|
$(VPATH)/doc/$(progname).info : $(VPATH)/doc/$(progname).texinfo
|
||||||
cd $(VPATH)/doc && makeinfo $(progname).texinfo
|
cd $(VPATH)/doc && makeinfo $(progname).texinfo
|
||||||
|
|
||||||
man : $(VPATH)/doc/$(progname).1 $(VPATH)/doc/zcat.1 $(VPATH)/doc/zdiff.1 \
|
man : $(VPATH)/doc/zcat.1 $(VPATH)/doc/zdiff.1 $(VPATH)/doc/zgrep.1
|
||||||
$(VPATH)/doc/zgrep.1
|
|
||||||
|
|
||||||
$(VPATH)/doc/$(progname).1 : $(progname)
|
|
||||||
help2man -o $(VPATH)/doc/$(progname).1 ./$(progname)
|
|
||||||
|
|
||||||
$(VPATH)/doc/zcat.1 : zcat
|
$(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
|
$(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
|
$(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
|
Makefile : $(VPATH)/configure $(VPATH)/Makefile.in
|
||||||
./config.status
|
./config.status
|
||||||
|
@ -103,7 +102,6 @@ install-info :
|
||||||
|
|
||||||
install-man :
|
install-man :
|
||||||
if test ! -d $(DESTDIR)$(mandir)/man1 ; then $(INSTALL_DIR) $(DESTDIR)$(mandir)/man1 ; fi
|
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
|
$(INSTALL_DATA) $(VPATH)/doc/zcat.1 $(DESTDIR)$(mandir)/man1/zcat.1
|
||||||
-rm -f $(DESTDIR)$(mandir)/man1/zcmp.1
|
-rm -f $(DESTDIR)$(mandir)/man1/zcmp.1
|
||||||
cd $(DESTDIR)$(mandir)/man1 && ln -s zdiff.1 zcmp.1
|
cd $(DESTDIR)$(mandir)/man1 && ln -s zdiff.1 zcmp.1
|
||||||
|
@ -131,7 +129,6 @@ uninstall-info :
|
||||||
-rm -f $(DESTDIR)$(infodir)/$(progname).info
|
-rm -f $(DESTDIR)$(infodir)/$(progname).info
|
||||||
|
|
||||||
uninstall-man :
|
uninstall-man :
|
||||||
-rm -f $(DESTDIR)$(mandir)/man1/$(progname).1
|
|
||||||
-rm -f $(DESTDIR)$(mandir)/man1/zcat.1
|
-rm -f $(DESTDIR)$(mandir)/man1/zcat.1
|
||||||
-rm -f $(DESTDIR)$(mandir)/man1/zcmp.1
|
-rm -f $(DESTDIR)$(mandir)/man1/zcmp.1
|
||||||
-rm -f $(DESTDIR)$(mandir)/man1/zdiff.1
|
-rm -f $(DESTDIR)$(mandir)/man1/zdiff.1
|
||||||
|
|
4
NEWS
4
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.
|
||||||
|
|
4
configure
vendored
4
configure
vendored
|
@ -5,12 +5,12 @@
|
||||||
# This configure script is free software: you have unlimited permission
|
# This configure script is free software: you have unlimited permission
|
||||||
# to copy, distribute and modify it.
|
# to copy, distribute and modify it.
|
||||||
#
|
#
|
||||||
# Date of this version: 2009-10-01
|
# Date of this version: 2009-10-05
|
||||||
|
|
||||||
args=
|
args=
|
||||||
no_create=
|
no_create=
|
||||||
progname=zutils
|
progname=zutils
|
||||||
progversion=0.5
|
progversion=0.6
|
||||||
srctrigger=zdiff.in
|
srctrigger=zdiff.in
|
||||||
|
|
||||||
# clear some things potentially inherited from environment.
|
# clear some things potentially inherited from environment.
|
||||||
|
|
21
doc/zcat.1
21
doc/zcat.1
|
@ -1,7 +1,7 @@
|
||||||
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.36.
|
.\" 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
|
.SH NAME
|
||||||
Zcat \- manual page for Zcat 0.5
|
Zcat \- concatenate compressed files to stdout
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
.B zcat
|
.B zcat
|
||||||
[\fIOPTIONS\fR] [\fICAT_OPTIONS\fR] [\fIFILES\fR]
|
[\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
|
If any given file is compressed, its uncompressed content is used. If a
|
||||||
given file does not exist, zcat tries the compressed file names
|
given file does not exist, zcat tries the compressed file names
|
||||||
corresponding to the supported compressors. If no files are specified,
|
corresponding to the supported compressors. If no files are specified,
|
||||||
the standard input is decompressed using the selected compressor and
|
data is read from standard input, decompressed if needed, and sent to
|
||||||
sent to stdout.
|
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.
|
The supported compressors are gzip, bzip2, lzip and xz.
|
||||||
.PP
|
.PP
|
||||||
CAT_OPTIONS are passed directly to cat.
|
CAT_OPTIONS are passed directly to cat.
|
||||||
|
@ -26,18 +27,6 @@ display this help and exit
|
||||||
.TP
|
.TP
|
||||||
\fB\-V\fR, \fB\-\-version\fR
|
\fB\-V\fR, \fB\-\-version\fR
|
||||||
output version information and exit
|
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"
|
.SH "REPORTING BUGS"
|
||||||
Report bugs to zutils\-bug@nongnu.org
|
Report bugs to zutils\-bug@nongnu.org
|
||||||
Zutils home page: http://www.nongnu.org/zutils/zutils.html
|
Zutils home page: http://www.nongnu.org/zutils/zutils.html
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.36.
|
.\" 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
|
.SH NAME
|
||||||
Zdiff \- manual page for Zdiff 0.5
|
Zdiff \- compare compressed files
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
.B zdiff
|
.B zdiff
|
||||||
[\fIOPTIONS\fR] [\fIDIFF_OPTIONS\fR] \fIFILE1 \fR[\fIFILE2\fR]
|
[\fIOPTIONS\fR] [\fIDIFF_OPTIONS\fR] \fIFILE1 \fR[\fIFILE2\fR]
|
||||||
|
|
21
doc/zgrep.1
21
doc/zgrep.1
|
@ -1,7 +1,7 @@
|
||||||
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.36.
|
.\" 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
|
.SH NAME
|
||||||
Zgrep \- manual page for Zgrep 0.5
|
Zgrep \- search compressed files for a regular expression
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
.B zgrep
|
.B zgrep
|
||||||
[\fIOPTIONS\fR] [\fIGREP_OPTIONS\fR] \fIPATTERN \fR[\fIFILES\fR]
|
[\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
|
files. If any given file is compressed, its uncompressed content is
|
||||||
used. If a given file does not exist, zgrep tries the compressed file
|
used. If a given file does not exist, zgrep tries the compressed file
|
||||||
names corresponding to the supported compressors. If no files are
|
names corresponding to the supported compressors. If no files are
|
||||||
specified, the standard input is decompressed using the selected
|
specified, data is read from standard input, decompressed if needed, and
|
||||||
compressor and fed to grep.
|
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.
|
The supported compressors are gzip, bzip2, lzip and xz.
|
||||||
.PP
|
.PP
|
||||||
Zegrep is a shortcut for "zgrep \fB\-E\fR"
|
Zegrep is a shortcut for "zgrep \fB\-E\fR"
|
||||||
|
@ -29,18 +30,6 @@ display this help and exit
|
||||||
.TP
|
.TP
|
||||||
\fB\-V\fR, \fB\-\-version\fR
|
\fB\-V\fR, \fB\-\-version\fR
|
||||||
output version information and exit
|
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"
|
.SH "REPORTING BUGS"
|
||||||
Report bugs to zutils\-bug@nongnu.org
|
Report bugs to zutils\-bug@nongnu.org
|
||||||
Zutils home page: http://www.nongnu.org/zutils/zutils.html
|
Zutils home page: http://www.nongnu.org/zutils/zutils.html
|
||||||
|
|
46
doc/zutils.1
46
doc/zutils.1
|
@ -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.
|
|
BIN
doc/zutils.info
BIN
doc/zutils.info
Binary file not shown.
|
@ -5,8 +5,8 @@
|
||||||
@finalout
|
@finalout
|
||||||
@c %**end of header
|
@c %**end of header
|
||||||
|
|
||||||
@set UPDATED 1 October 2009
|
@set UPDATED 5 October 2009
|
||||||
@set VERSION 0.5
|
@set VERSION 0.6
|
||||||
|
|
||||||
@dircategory Data Compression
|
@dircategory Data Compression
|
||||||
@direntry
|
@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
|
If any given file is compressed, its uncompressed content is used. If a
|
||||||
given file does not exist, zcat tries the compressed file names
|
given file does not exist, zcat tries the compressed file names
|
||||||
corresponding to the supported compressors. If no files are specified,
|
corresponding to the supported compressors. If no files are specified,
|
||||||
the standard input is decompressed using the selected compressor and
|
data is read from standard input, decompressed if needed, and sent to
|
||||||
sent to stdout.
|
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:
|
The format for running zcat is:
|
||||||
|
|
||||||
|
@ -92,18 +93,6 @@ Print an informative help message describing the options and exit.
|
||||||
@itemx -V
|
@itemx -V
|
||||||
Print the version number of zcat on the standard output and exit.
|
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
|
@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
|
files. If any given file is compressed, its uncompressed content is
|
||||||
used. If a given file does not exist, zgrep tries the compressed file
|
used. If a given file does not exist, zgrep tries the compressed file
|
||||||
names corresponding to the supported compressors. If no files are
|
names corresponding to the supported compressors. If no files are
|
||||||
specified, the standard input is decompressed using the selected
|
specified, data is read from standard input, decompressed if needed, and
|
||||||
compressor and fed to grep.
|
fed to grep. Data read from standard input must be of the same type; all
|
||||||
|
uncompressed or all compressed with the same compressor.
|
||||||
|
|
||||||
@noindent
|
@noindent
|
||||||
Zegrep is a shortcut for @samp{zgrep -E}@*
|
Zegrep is a shortcut for @samp{zgrep -E}@*
|
||||||
|
@ -199,18 +189,6 @@ Print an informative help message describing the options and exit.
|
||||||
@itemx -V
|
@itemx -V
|
||||||
Print the version number of zgrep on the standard output and exit.
|
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
|
@end table
|
||||||
|
|
||||||
|
|
||||||
|
|
146
main.cc
146
main.cc
|
@ -134,6 +134,7 @@ void show_help() throw()
|
||||||
// std::printf( " -d, --decompress decompress\n" );
|
// std::printf( " -d, --decompress decompress\n" );
|
||||||
// std::printf( " -f, --force overwrite existing output files\n" );
|
// std::printf( " -f, --force overwrite existing output files\n" );
|
||||||
// std::printf( " -k, --keep keep (don't delete) input 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( " -o, --output=<file> if reading stdin, place the output into <file>\n" );
|
||||||
std::printf( " -q, --quiet suppress all messages\n" );
|
std::printf( " -q, --quiet suppress all messages\n" );
|
||||||
std::printf( " -t, --test test compressed file type\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 )
|
int test_type( const int inhandle, const Pretty_print & pp )
|
||||||
{
|
{
|
||||||
unsigned char buf[5];
|
unsigned char buf[5];
|
||||||
|
@ -505,7 +629,7 @@ int test_type( const int inhandle, const Pretty_print & pp )
|
||||||
msg = "bzip2";
|
msg = "bzip2";
|
||||||
else if( buf[0] == 'L' && buf[1] == 'Z' && buf[2] == 'I' && buf[3] == 'P' )
|
else if( buf[0] == 'L' && buf[1] == 'Z' && buf[2] == 'I' && buf[3] == 'P' )
|
||||||
msg = "lzip";
|
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";
|
msg = "xz";
|
||||||
}
|
}
|
||||||
const int retval = ( msg ? 0 : 1 );
|
const int retval = ( msg ? 0 : 1 );
|
||||||
|
@ -546,6 +670,7 @@ int main( const int argc, const char * argv[] )
|
||||||
std::string input_filename;
|
std::string input_filename;
|
||||||
std::string default_output_filename;
|
std::string default_output_filename;
|
||||||
std::vector< std::string > filenames;
|
std::vector< std::string > filenames;
|
||||||
|
std::string magic_type;
|
||||||
invocation_name = argv[0];
|
invocation_name = argv[0];
|
||||||
|
|
||||||
const Arg_parser::Option options[] =
|
const Arg_parser::Option options[] =
|
||||||
|
@ -555,6 +680,7 @@ int main( const int argc, const char * argv[] )
|
||||||
{ 'f', "force", Arg_parser::no },
|
{ 'f', "force", Arg_parser::no },
|
||||||
{ 'h', "help", Arg_parser::no },
|
{ 'h', "help", Arg_parser::no },
|
||||||
{ 'k', "keep", Arg_parser::no },
|
{ 'k', "keep", Arg_parser::no },
|
||||||
|
{ 'm', "magic", Arg_parser::yes },
|
||||||
{ 'o', "output", Arg_parser::yes },
|
{ 'o', "output", Arg_parser::yes },
|
||||||
{ 'q', "quiet", Arg_parser::no },
|
{ 'q', "quiet", Arg_parser::no },
|
||||||
{ 't', "test", 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 );
|
const int code = parser.code( argind );
|
||||||
if( !code ) break; // no more options
|
if( !code ) break; // no more options
|
||||||
const char * arg = parser.argument( argind ).c_str();
|
const std::string & arg = parser.argument( argind );
|
||||||
switch( code )
|
switch( code )
|
||||||
{
|
{
|
||||||
case 'c': to_stdout = true; break;
|
case 'c': to_stdout = true; break;
|
||||||
|
@ -579,6 +705,7 @@ int main( const int argc, const char * argv[] )
|
||||||
case 'f': force = true; break;
|
case 'f': force = true; break;
|
||||||
case 'h': show_help(); return 0;
|
case 'h': show_help(); return 0;
|
||||||
case 'k': keep_input_files = true; break;
|
case 'k': keep_input_files = true; break;
|
||||||
|
case 'm': magic_type = arg; break;
|
||||||
case 'o': default_output_filename = arg; break;
|
case 'o': default_output_filename = arg; break;
|
||||||
case 'q': verbosity = -1; break;
|
case 'q': verbosity = -1; break;
|
||||||
case 't': program_mode = m_test; 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;
|
bool filenames_given = false;
|
||||||
for( ; argind < parser.arguments(); ++argind )
|
for( ; argind < parser.arguments(); ++argind )
|
||||||
{
|
{
|
||||||
|
@ -669,19 +798,22 @@ int main( const int argc, const char * argv[] )
|
||||||
case m_decompress:
|
case m_decompress:
|
||||||
/*tmp = decompress( inhandle, pp );*/ break;
|
/*tmp = decompress( inhandle, pp );*/ break;
|
||||||
case m_test:
|
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 > retval ) retval = tmp;
|
||||||
if( tmp && program_mode != m_test ) cleanup_and_fail( retval );
|
if( tmp && program_mode != m_test ) cleanup_and_fail( retval );
|
||||||
/*
|
|
||||||
if( delete_output_on_interrupt )
|
// if( delete_output_on_interrupt )
|
||||||
close_and_set_permissions( in_statsp, &retval );
|
// close_and_set_permissions( in_statsp, &retval );
|
||||||
if( input_filename.size() )
|
if( input_filename.size() )
|
||||||
{
|
{
|
||||||
close( inhandle ); inhandle = -1;
|
close( inhandle ); inhandle = -1;
|
||||||
if( !keep_input_files && !to_stdout && program_mode != m_test )
|
if( !keep_input_files && !to_stdout && program_mode != m_test )
|
||||||
std::remove( input_filename.c_str() );
|
std::remove( input_filename.c_str() );
|
||||||
}*/
|
}
|
||||||
}
|
}
|
||||||
if( outhandle >= 0 ) close( outhandle );
|
if( outhandle >= 0 ) close( outhandle );
|
||||||
return retval;
|
return retval;
|
||||||
|
|
|
@ -55,13 +55,10 @@ echo -n .
|
||||||
"${ZCAT}" < in.gz > copy || fail=1
|
"${ZCAT}" < in.gz > copy || fail=1
|
||||||
cmp in copy || fail=1
|
cmp in copy || fail=1
|
||||||
echo -n .
|
echo -n .
|
||||||
"${ZCAT}" --gzip < in.gz > copy || fail=1
|
"${ZCAT}" < in.bz2 > copy || fail=1
|
||||||
cmp in copy || fail=1
|
cmp in copy || fail=1
|
||||||
echo -n .
|
echo -n .
|
||||||
"${ZCAT}" --bzip2 < in.bz2 > copy || fail=1
|
"${ZCAT}" < in.lz > copy || fail=1
|
||||||
cmp in copy || fail=1
|
|
||||||
echo -n .
|
|
||||||
"${ZCAT}" --lzip < in.lz > copy || fail=1
|
|
||||||
cmp in copy || fail=1
|
cmp in copy || fail=1
|
||||||
echo -n .
|
echo -n .
|
||||||
"${ZCAT}" in > copy || fail=1
|
"${ZCAT}" in > copy || fail=1
|
||||||
|
@ -122,11 +119,9 @@ done
|
||||||
echo -n .
|
echo -n .
|
||||||
"${ZGREP}" License < in.gz 2>&1 > /dev/null || fail=1
|
"${ZGREP}" License < in.gz 2>&1 > /dev/null || fail=1
|
||||||
echo -n .
|
echo -n .
|
||||||
"${ZGREP}" --gzip License < in.gz 2>&1 > /dev/null || fail=1
|
"${ZGREP}" License < in.bz2 2>&1 > /dev/null || fail=1
|
||||||
echo -n .
|
echo -n .
|
||||||
"${ZGREP}" --bzip2 License < in.bz2 2>&1 > /dev/null || fail=1
|
"${ZGREP}" License < in.lz 2>&1 > /dev/null || fail=1
|
||||||
echo -n .
|
|
||||||
"${ZGREP}" --lzip License < in.lz 2>&1 > /dev/null || fail=1
|
|
||||||
echo -n .
|
echo -n .
|
||||||
"${ZGREP}" License in 2>&1 > /dev/null || fail=1
|
"${ZGREP}" License in 2>&1 > /dev/null || fail=1
|
||||||
echo -n .
|
echo -n .
|
||||||
|
|
29
zcat.in
29
zcat.in
|
@ -8,7 +8,6 @@
|
||||||
LC_ALL=C
|
LC_ALL=C
|
||||||
export LC_ALL
|
export LC_ALL
|
||||||
args=
|
args=
|
||||||
default_prog=gzip
|
|
||||||
two_hyphens=0
|
two_hyphens=0
|
||||||
|
|
||||||
# Loop over args until a filename is found
|
# 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 "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 "given file does not exist, zcat tries the compressed file names"
|
||||||
echo "corresponding to the supported compressors. If no files are specified,"
|
echo "corresponding to the supported compressors. If no files are specified,"
|
||||||
echo "the standard input is decompressed using the selected compressor and"
|
echo "data is read from standard input, decompressed if needed, and sent to"
|
||||||
echo "sent to stdout."
|
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 "The supported compressors are gzip, bzip2, lzip and xz."
|
||||||
echo
|
echo
|
||||||
echo "Usage: $0 [OPTIONS] [CAT_OPTIONS] [FILES]"
|
echo "Usage: $0 [OPTIONS] [CAT_OPTIONS] [FILES]"
|
||||||
|
@ -35,10 +35,6 @@ while [ x"$1" != x ] ; do
|
||||||
echo "Options:"
|
echo "Options:"
|
||||||
echo " -h, --help display this help and exit"
|
echo " -h, --help display this help and exit"
|
||||||
echo " -V, --version output version information 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
|
||||||
echo "Report bugs to zutils-bug@nongnu.org"
|
echo "Report bugs to zutils-bug@nongnu.org"
|
||||||
echo "Zutils home page: http://www.nongnu.org/zutils/zutils.html"
|
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 "This script is free software: you have unlimited permission"
|
||||||
echo "to copy, distribute and modify it."
|
echo "to copy, distribute and modify it."
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
--gz*)
|
|
||||||
default_prog=gzip ;;
|
|
||||||
--bz*)
|
|
||||||
default_prog=bzip2 ;;
|
|
||||||
--lz*)
|
|
||||||
default_prog=lzip ;;
|
|
||||||
--xz*)
|
|
||||||
default_prog=xz ;;
|
|
||||||
- | -f)
|
- | -f)
|
||||||
;;
|
;;
|
||||||
--)
|
--)
|
||||||
|
@ -70,7 +58,16 @@ while [ x"$1" != x ] ; do
|
||||||
done
|
done
|
||||||
|
|
||||||
if [ $# = 0 ]; then
|
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 $?
|
exit $?
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
29
zgrep.in
29
zgrep.in
|
@ -8,7 +8,6 @@
|
||||||
LC_ALL=C
|
LC_ALL=C
|
||||||
export LC_ALL
|
export LC_ALL
|
||||||
args=
|
args=
|
||||||
default_prog=gzip
|
|
||||||
have_pat=0
|
have_pat=0
|
||||||
list=0
|
list=0
|
||||||
no_name=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 "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 "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 "names corresponding to the supported compressors. If no files are"
|
||||||
echo "specified, the standard input is decompressed using the selected"
|
echo "specified, data is read from standard input, decompressed if needed, and"
|
||||||
echo "compressor and fed to grep."
|
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 "The supported compressors are gzip, bzip2, lzip and xz."
|
||||||
echo
|
echo
|
||||||
echo "Zegrep is a shortcut for \"zgrep -E\""
|
echo "Zegrep is a shortcut for \"zgrep -E\""
|
||||||
|
@ -41,10 +41,6 @@ while [ x"$1" != x ] ; do
|
||||||
echo "Options:"
|
echo "Options:"
|
||||||
echo " -h, --help display this help and exit"
|
echo " -h, --help display this help and exit"
|
||||||
echo " -V, --version output version information 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
|
||||||
echo "Report bugs to zutils-bug@nongnu.org"
|
echo "Report bugs to zutils-bug@nongnu.org"
|
||||||
echo "Zutils home page: http://www.nongnu.org/zutils/zutils.html"
|
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 "This script is free software: you have unlimited permission"
|
||||||
echo "to copy, distribute and modify it."
|
echo "to copy, distribute and modify it."
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
--gz*)
|
|
||||||
default_prog=gzip ;;
|
|
||||||
--bz*)
|
|
||||||
default_prog=bzip2 ;;
|
|
||||||
--lz*)
|
|
||||||
default_prog=lzip ;;
|
|
||||||
--xz*)
|
|
||||||
default_prog=xz ;;
|
|
||||||
-[drRzZ] | --di* | --exc* | --inc* | --nu* | --rec*)
|
-[drRzZ] | --di* | --exc* | --inc* | --nu* | --rec*)
|
||||||
echo "$0: option $1 not supported"
|
echo "$0: option $1 not supported"
|
||||||
exit 1 ;;
|
exit 1 ;;
|
||||||
|
@ -96,7 +84,16 @@ if [ ${have_pat} = 0 ]; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ $# = 0 ]; then
|
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 $?
|
exit $?
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue