Author: delphij
Date: Mon May 10 02:09:53 2010
New Revision: 207839
URL: http://svn.freebsd.org/changeset/base/207839

Log:
  MFC most of the recent changes to gzip(1) back to RELENG_7.

Modified:
  stable/7/usr.bin/gzip/gzip.1
  stable/7/usr.bin/gzip/gzip.c
  stable/7/usr.bin/gzip/unbzip2.c
Directory Properties:
  stable/7/usr.bin/gzip/   (props changed)

Modified: stable/7/usr.bin/gzip/gzip.1
==============================================================================
--- stable/7/usr.bin/gzip/gzip.1        Mon May 10 02:07:57 2010        
(r207838)
+++ stable/7/usr.bin/gzip/gzip.1        Mon May 10 02:09:53 2010        
(r207839)
@@ -25,7 +25,7 @@
 .\" SUCH DAMAGE.
 .\"
 .\" $FreeBSD$
-.Dd June 24, 2009
+.Dd April 27, 2010
 .Dt GZIP 1
 .Os
 .Sh NAME
@@ -205,18 +205,21 @@ This implementation of
 .Nm
 was ported based on the
 .Nx
-.Nm
-20090412, and first appeared in
+.Nm ,
+and first appeared in
 .Fx 7.0 .
 .Sh AUTHORS
+.An -nosplit
 This implementation of
 .Nm
 was written by
-.An Matthew R. Green Aq [email protected] .
+.An Matthew R. Green Aq [email protected]
+with unpack support written by
+.An Xin LI Aq [email protected] .
 .Sh BUGS
 According to RFC 1952, the recorded file size is stored in a 32-bit
-integer and therefore it can not represent files that is bigger than
-4GB in size.  This limitation also applies to
+integer, therefore, it can not represent files larger than 4GB.
+This limitation also applies to
 .Fl l
 option of
 .Nm

Modified: stable/7/usr.bin/gzip/gzip.c
==============================================================================
--- stable/7/usr.bin/gzip/gzip.c        Mon May 10 02:07:57 2010        
(r207838)
+++ stable/7/usr.bin/gzip/gzip.c        Mon May 10 02:09:53 2010        
(r207839)
@@ -1,4 +1,4 @@
-/*     $NetBSD: gzip.c,v 1.94 2009/04/12 10:31:14 lukem Exp $  */
+/*     $NetBSD: gzip.c,v 1.97 2009/10/11 09:17:21 mrg Exp $    */
 
 /*-
  * Copyright (c) 1997, 1998, 2003, 2004, 2006 Matthew R. Green
@@ -43,7 +43,6 @@ __RCSID("$FreeBSD$");
  *
  * TODO:
  *     - use mmap where possible
- *     - handle some signals better (remove outfile?)
  *     - make bzip2/compress -v/-t/-l support work as well as possible
  */
 
@@ -149,8 +148,9 @@ static suffixes_t suffixes[] = {
 #undef SUFFIX
 };
 #define NUM_SUFFIXES (sizeof suffixes / sizeof suffixes[0])
+#define SUFFIX_MAXLEN  30
 
-static const char      gzip_version[] = "FreeBSD gzip 20090621";
+static const char      gzip_version[] = "FreeBSD gzip 20100407";
 
 #ifndef SMALL
 static const char      gzip_copyright[] = \
@@ -193,6 +193,7 @@ static      int     qflag;                  /* quiet mode */
 static int     rflag;                  /* recursive mode */
 static int     tflag;                  /* test */
 static int     vflag;                  /* verbose mode */
+static const char *remove_file = NULL; /* file to be removed upon SIGINT */
 #else
 #define                qflag   0
 #define                tflag   0
@@ -204,7 +205,7 @@ static      char    *infile;                /* name of file 
co
 
 static void    maybe_err(const char *fmt, ...) __dead2
     __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, ...) __dead2
     __attribute__((__format__(__printf__, 1, 2)));
 #endif
@@ -230,6 +231,7 @@ static      void    usage(void);
 static void    display_version(void);
 #ifndef SMALL
 static void    display_license(void);
+static void    sigint_handler(int);
 #endif
 static const suffixes_t *check_suffix(char *, int);
 static ssize_t read_retry(int, void *, size_t);
@@ -299,11 +301,10 @@ main(int argc, char **argv)
 #endif
        int ch;
 
-       /* XXX set up signals */
-
 #ifndef SMALL
        if ((gzip = getenv("GZIP")) != NULL)
                prepend_gzip(gzip, &argc, &argv);
+       signal(SIGINT, sigint_handler);
 #endif
 
        /*
@@ -372,6 +373,8 @@ main(int argc, char **argv)
                case 'S':
                        len = strlen(optarg);
                        if (len != 0) {
+                               if (len > SUFFIX_MAXLEN)
+                                       errx(1, "incorrect suffix: '%s': too 
long", optarg);
                                suffixes[0].zipped = optarg;
                                suffixes[0].ziplen = len;
                        } else {
@@ -457,7 +460,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, ...)
@@ -1168,6 +1171,15 @@ unlink_input(const char *file, const str
                return;
        unlink(file);
 }
+
+static void
+sigint_handler(int signo __unused)
+{
+
+       if (remove_file != NULL)
+               unlink(remove_file);
+       _exit(2);
+}
 #endif
 
 static const suffixes_t *
@@ -1236,7 +1248,7 @@ file_compress(char *file, char *outfile,
                /* Add (usually) .gz to filename */
                if ((size_t)snprintf(outfile, outsize, "%s%s",
                                        file, suffixes[0].zipped) >= outsize)
-                       memcpy(outfile - suffixes[0].ziplen - 1,
+                       memcpy(outfile + outsize - suffixes[0].ziplen - 1,
                                suffixes[0].zipped, suffixes[0].ziplen + 1);
 
 #ifndef SMALL
@@ -1254,6 +1266,9 @@ file_compress(char *file, char *outfile,
                        fclose(stdin);
                        return -1;
                }
+#ifndef SMALL
+               remove_file = outfile;
+#endif
        } else
                out = STDOUT_FILENO;
 
@@ -1285,6 +1300,7 @@ file_compress(char *file, char *outfile,
        }
 
        copymodes(out, &isb, outfile);
+       remove_file = NULL;
 #endif
        if (close(out) == -1)
                maybe_warn("couldn't close output");
@@ -1315,6 +1331,7 @@ file_uncompress(char *file, char *outfil
        enum filetype method;
        int fd, ofd, zfd = -1;
 #ifndef SMALL
+       ssize_t rv;
        time_t timestamp = 0;
        unsigned char name[PATH_MAX + 1];
 #endif
@@ -1360,7 +1377,6 @@ file_uncompress(char *file, char *outfil
 #ifndef SMALL
        if (method == FT_GZIP && Nflag) {
                unsigned char ts[4];    /* timestamp */
-               ssize_t rv;
 
                rv = pread(fd, ts, sizeof ts, GZIP_TIMESTAMP);
                if (rv >= 0 && rv < (ssize_t)(sizeof ts))
@@ -1421,6 +1437,9 @@ file_uncompress(char *file, char *outfil
                        maybe_warn("can't open %s", outfile);
                        goto lose;
                }
+#ifndef SMALL
+               remove_file = outfile;
+#endif
        } else
                zfd = STDOUT_FILENO;
 
@@ -1552,11 +1571,12 @@ file_uncompress(char *file, char *outfil
                unlink(outfile);
                return -1;
        }
-       unlink_input(file, &isb);
 #ifndef SMALL
        copymodes(ofd, &isb, outfile);
+       remove_file = NULL;
 #endif
        close(ofd);
+       unlink_input(file, &isb);
        return size;
 
     unexpected_EOF:
@@ -2050,7 +2070,7 @@ static void
 display_license(void)
 {
 
-       fprintf(stderr, "%s (based on NetBSD gzip 20060927)\n", gzip_version);
+       fprintf(stderr, "%s (based on NetBSD gzip 20091011)\n", gzip_version);
        fprintf(stderr, "%s\n", gzip_copyright);
        exit(0);
 }
@@ -2096,4 +2116,3 @@ read_retry(int fd, void *buf, size_t sz)
 
        return sz - left;
 }
-

Modified: stable/7/usr.bin/gzip/unbzip2.c
==============================================================================
--- stable/7/usr.bin/gzip/unbzip2.c     Mon May 10 02:07:57 2010        
(r207838)
+++ stable/7/usr.bin/gzip/unbzip2.c     Mon May 10 02:09:53 2010        
(r207839)
@@ -1,4 +1,4 @@
-/*     $NetBSD: unbzip2.c,v 1.12 2009/10/11 05:17:20 mrg Exp $ */
+/*     $NetBSD: unbzip2.c,v 1.13 2009/12/05 03:23:37 mrg Exp $ */
 
 /*-
  * Copyright (c) 2006 The NetBSD Foundation, Inc.
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to