summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjohan <johan@FreeBSD.org>2002-10-03 19:30:22 +0000
committerjohan <johan@FreeBSD.org>2002-10-03 19:30:22 +0000
commitb8f13ad64366f383744def751f79e415c51f7513 (patch)
tree25906745c66eca251888a360f0f08c960796234d
parent96a42355e2c83e96c49318518b0ab107a1b4ae21 (diff)
downloadFreeBSD-src-b8f13ad64366f383744def751f79e415c51f7513.zip
FreeBSD-src-b8f13ad64366f383744def751f79e415c51f7513.tar.gz
Actually implement gzip's -c option. minigzip now also doubles
as zcat properly. PR: 13043 Submitted by: Toshihiko ARAI <toshi@jp.freebsd.org> Jonathan Towne <jontow@twcny.rr.com> Approved by: peter, sheldonh (mentor) MFC After: 2 weeks
-rw-r--r--lib/libz/minigzip.c39
-rw-r--r--usr.bin/minigzip/minigzip.111
2 files changed, 43 insertions, 7 deletions
diff --git a/lib/libz/minigzip.c b/lib/libz/minigzip.c
index 3617dfc..076aa2c 100644
--- a/lib/libz/minigzip.c
+++ b/lib/libz/minigzip.c
@@ -271,7 +271,8 @@ void file_uncompress(file)
/* ===========================================================================
- * Usage: minigzip [-d] [-f] [-h] [-1 to -9] [files...]
+ * Usage: minigzip [-c ] [-d] [-f] [-h] [-1 to -9] [files...]
+ * -c : write to standard output
* -d : decompress
* -f : compress with Z_FILTERED
* -h : compress with Z_HUFFMAN_ONLY
@@ -282,6 +283,7 @@ int main(argc, argv)
int argc;
char *argv[];
{
+ int copyout = 0;
int uncompr = 0;
gzFile file;
char *bname, outmode[20];
@@ -296,12 +298,14 @@ int main(argc, argv)
bname = argv[0];
argc--, argv++;
- if (!strcmp(bname, "gunzip") || !strcmp(bname, "zcat"))
+ if (!strcmp(bname, "gunzip"))
uncompr = 1;
+ else if (!strcmp(bname, "zcat"))
+ copyout = uncompr = 1;
while (argc > 0) {
if (strcmp(*argv, "-c") == 0)
- ; /* Just for compatibility with gzip */
+ copyout = 1;
else if (strcmp(*argv, "-d") == 0)
uncompr = 1;
else if (strcmp(*argv, "-f") == 0)
@@ -328,11 +332,36 @@ int main(argc, argv)
gz_compress(stdin, file);
}
} else {
+ if (copyout) {
+ SET_BINARY_MODE(stdout);
+ }
do {
if (uncompr) {
- file_uncompress(*argv);
+ if (copyout) {
+ file = gzopen(*argv, "rb");
+ if (file == NULL)
+ fprintf(stderr, "%s: can't gzopen %s\n", prog, *argv);
+ else
+ gz_uncompress(file, stdout);
+ } else {
+ file_uncompress(*argv);
+ }
} else {
- file_compress(*argv, outmode);
+ if (copyout) {
+ FILE * in = fopen(*argv, "rb");
+
+ if (in == NULL) {
+ perror(*argv);
+ } else {
+ file = gzdopen(fileno(stdout), outmode);
+ if (file == NULL) error("can't gzdopen stdout");
+
+ gz_compress(in, file);
+ }
+
+ } else {
+ file_compress(*argv, outmode);
+ }
}
} while (argv++, --argc);
}
diff --git a/usr.bin/minigzip/minigzip.1 b/usr.bin/minigzip/minigzip.1
index 0bfe899..7759296 100644
--- a/usr.bin/minigzip/minigzip.1
+++ b/usr.bin/minigzip/minigzip.1
@@ -24,7 +24,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd December 13, 1997
+.Dd October 3, 2002
.Dt MINIGZIP 1
.Os
.Sh NAME
@@ -32,7 +32,7 @@
.Nd minimal implementation of the 'gzip' compression tool
.Sh SYNOPSIS
.Nm
-.Op Fl d
+.Op Fl cd
.Op Ar
.Sh DESCRIPTION
The
@@ -64,6 +64,13 @@ arguments are supplied,
.Nm
reads from standard input and writes the results of the operation
to standard output.
+.Pp
+If the
+.Fl c
+option is specified,
+.Nm
+writes the results to standard output and keep the original files
+unchanged.
.Sh SEE ALSO
.Xr gzip 1
.Sh AUTHORS
OpenPOWER on IntegriCloud