GZIP - Add SCM ident and commit missed changes to gzip.c
authorMatthew Dillon <dillon@apollo.backplane.com>
Mon, 27 Jul 2009 23:19:10 +0000 (16:19 -0700)
committerMatthew Dillon <dillon@apollo.backplane.com>
Mon, 27 Jul 2009 23:19:10 +0000 (16:19 -0700)
* Add SCM ident so Xin Li can track the file, and add missed changes
  to gzip.c

usr.bin/gzip/gzip.c
usr.bin/gzip/unpack.c

index 90c7368..70c10b4 100644 (file)
@@ -75,6 +75,9 @@ enum filetype {
 #endif
 #ifndef NO_COMPRESS_SUPPORT
        FT_Z,
+#endif
+#ifndef NO_PACK_SUPPORT
+       FT_PACK,
 #endif
        FT_LAST,
        FT_UNKNOWN
@@ -92,6 +95,10 @@ enum filetype {
 #define Z_MAGIC                "\037\235"
 #endif
 
+#ifndef NO_PACK_SUPPORT
+#define PACK_MAGIC     "\037\036"
+#endif
+
 #define GZ_SUFFIX      ".gz"
 
 #define BUFLEN         (64 * 1024)
@@ -165,7 +172,7 @@ static      char    *infile;                /* name of file coming in */
 
 static void    maybe_err(const char *fmt, ...)
     __attribute__((__format__(__printf__, 1, 2)));
-#ifndef NO_BZIP2_SUPPORT
+#if !defined(NO_BZIP2_SUPPORT) || !defined(NO_PACK_SUPPORT)
 static void    maybe_errx(const char *fmt, ...)
     __attribute__((__format__(__printf__, 1, 2)));
 #endif
@@ -213,6 +220,10 @@ static     FILE    *zdopen(int);
 static off_t   zuncompress(FILE *, FILE *, char *, size_t, off_t *);
 #endif
 
+#ifndef NO_PACK_SUPPORT
+static off_t   unpack(int, int, char *, size_t, off_t *);
+#endif
+
 int main(int, char *p[]);
 
 #ifdef SMALL
@@ -411,7 +422,7 @@ maybe_err(const char *fmt, ...)
        exit(2);
 }
 
-#ifndef NO_BZIP2_SUPPORT
+#if !defined(NO_BZIP2_SUPPORT) || !defined(NO_PACK_SUPPORT)
 /* ... without an errno. */
 void
 maybe_errx(const char *fmt, ...)
@@ -1072,6 +1083,11 @@ file_gettype(u_char *buf)
        if (memcmp(buf, Z_MAGIC, 2) == 0)
                return FT_Z;
        else
+#endif
+#ifndef NO_PACK_SUPPORT
+       if (memcmp(buf, PACK_MAGIC, 2) == 0)
+               return FT_PACK;
+       else
 #endif
                return FT_UNKNOWN;
 }
@@ -1427,6 +1443,17 @@ file_uncompress(char *file, char *outfile, size_t outsize)
        } else
 #endif
 
+#ifndef NO_PACK_SUPPORT
+       if (method == FT_PACK) {
+               if (lflag) {
+                       maybe_warnx("no -l with packed files");
+                       goto lose;
+               }
+
+               size = unpack(fd, zfd, NULL, 0, NULL);
+       } else
+#endif
+
 #ifndef SMALL
        if (method == FT_UNKNOWN) {
                if (lflag) {
@@ -1619,6 +1646,12 @@ handle_stdin(void)
                usize = zuncompress(in, stdout, header1, sizeof header1, &gsize);
                fclose(in);
                break;
+#endif
+#ifndef NO_PACK_SUPPORT
+       case FT_PACK:
+               usize = unpack(STDIN_FILENO, STDOUT_FILENO,
+                              (char *)header1, sizeof header1, &gsize);
+               break;
 #endif
        }
 
@@ -1993,6 +2026,9 @@ display_version(void)
 #ifndef NO_COMPRESS_SUPPORT
 #include "zuncompress.c"
 #endif
+#ifndef NO_PACK_SUPPORT
+#include "unpack.c"
+#endif
 
 static ssize_t
 read_retry(int fd, void *buf, size_t sz)
index 5b0dd78..1abfb6e 100644 (file)
@@ -23,7 +23,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD$
+ * $FreeBSD: head/usr.bin/gzip/unpack.c 194579 2009-06-21 09:39:43Z delphij $
  */
 
 /* This file is #included by gzip.c */