From 273d049a7c4e42074da9447e26944137f2aefc20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johan=20F=C3=B6rberg?= Date: Tue, 24 Mar 2015 20:15:56 +0100 Subject: [PATCH] Add `unzstd` program for decompression. --- programs/Makefile | 4 ++++ programs/unzstd.1 | 31 +++++++++++++++++++++++++++++++ programs/zstdcli.c | 16 ++++++++++++++++ 3 files changed, 51 insertions(+) create mode 100644 programs/unzstd.1 diff --git a/programs/Makefile b/programs/Makefile index db3c710ae..84a77894f 100644 --- a/programs/Makefile +++ b/programs/Makefile @@ -99,16 +99,20 @@ install: zstd @install -d -m 755 $(DESTDIR)$(BINDIR)/ $(DESTDIR)$(MANDIR)/ @install -m 755 zstd$(EXT) $(DESTDIR)$(BINDIR)/zstd$(EXT) @ln -sf zstd$(EXT) $(DESTDIR)$(BINDIR)/zstdcat + @ln -sf zstd$(EXT) $(DESTDIR)$(BINDIR)/unzstd @echo Installing man pages @install -m 644 zstd.1 $(DESTDIR)$(MANDIR)/zstd.1 @install -m 644 zstdcat.1 $(DESTDIR)$(MANDIR)/zstdcat.1 + @install -m 644 unzstd.1 $(DESTDIR)$(MANDIR)/unzstd.1 @echo zstd installation completed uninstall: rm -f $(DESTDIR)$(BINDIR)/zstdcat + rm -f $(DESTDIR)$(BINDIR)/unzstd [ -x $(DESTDIR)$(BINDIR)/zstd$(EXT) ] && rm -f $(DESTDIR)$(BINDIR)/zstd$(EXT) [ -f $(DESTDIR)$(MANDIR)/zstd.1 ] && rm -f $(DESTDIR)$(MANDIR)/zstd.1 [ -f $(DESTDIR)$(MANDIR)/zstdcat.1 ] && rm -f $(DESTDIR)$(MANDIR)/zstdcat.1 + [ -f $(DESTDIR)$(MANDIR)/unzstd.1 ] && rm -f $(DESTDIR)$(MANDIR)/unzstd.1 @echo zstd programs successfully uninstalled test: test-zstd test-fullbench test-fuzzer test-mem diff --git a/programs/unzstd.1 b/programs/unzstd.1 new file mode 100644 index 000000000..157fab765 --- /dev/null +++ b/programs/unzstd.1 @@ -0,0 +1,31 @@ +\" +\" unzstd.1: This is a manual page for 'unzstd' program. This file is part of +\" the zstd project. +\" + +\" No hyphenation +.hy 0 +.nr HY 0 + +.TH unzstd "1" "2014-06-20" "unzstd" "User Commands" +.SH NAME +\fBunzstd\fR - Utility based on zstd + +.SH SYNOPSIS +.TP 5 +\fBunzstd\fR [\fBOPTIONS\fR] [-|INPUT-FILE] + +.SH DESCRIPTION +.PP +\fBunzstd\fR is an utility based on \fBzstd\fR, a fast lossless compression algorithm. + +\fBunzstd\fR decompress input file, it is equivalent to \fBzstd -d\fR, + +Available options are the same as \fBzstd\fR ones (man zstd). + + +.SH BUGS +Report bugs at:- https://github.com/Cyan4973/zstd/ + +.SH AUTHOR +Yann Collet diff --git a/programs/zstdcli.c b/programs/zstdcli.c index 5876f557c..37aaf8062 100644 --- a/programs/zstdcli.c +++ b/programs/zstdcli.c @@ -76,6 +76,7 @@ #define WELCOME_MESSAGE "*** %s %i-bits %s, by %s (%s) ***\n", COMPRESSOR_NAME, (int)(sizeof(void*)*8), ZSTD_VERSION, AUTHOR, __DATE__ #define ZSTD_EXTENSION ".zst" #define ZSTD_CAT "zstdcat" +#define ZSTD_UNZSTD "unzstd" #define KB *(1 <<10) #define MB *(1 <<20) @@ -170,9 +171,24 @@ int main(int argc, char** argv) char* dynNameSpace = NULL; char extension[] = ZSTD_EXTENSION; + /* Pick out basename component. Don't rely on stdlib because of conflicting behaviour. */ + for (i = strlen(programName); i > 0; i--) + { + if (programName[i] == '/') + { + i++; + break; + } + } + programName += i; + /* zstdcat behavior */ if (!strcmp(programName, ZSTD_CAT)) { decode=1; forceStdout=1; displayLevel=1; outFileName=stdoutmark; } + /* unzstd behavior */ + if (!strcmp(programName, ZSTD_UNZSTD)) + decode=1; + // command switches for(i=1; i