Author: sobomax
Date: Mon Aug 28 20:55:13 2017
New Revision: 322983
URL: https://svnweb.freebsd.org/changeset/base/322983

Log:
  MFC r320048+r320301+r320277:
  
    o Move logic that determines size of the input image into its own
      file. That logic has grown quite significantly now;
  
    o add a special handling for the snapshot images. Those have some
      extra headers at the end of the image and we don't need those
      in the output image really.

Added:
  stable/11/usr.bin/mkuzip/mkuz_insize.c
     - copied, changed from r320048, head/usr.bin/mkuzip/mkuz_insize.c
  stable/11/usr.bin/mkuzip/mkuz_insize.h
     - copied unchanged from r320048, head/usr.bin/mkuzip/mkuz_insize.h
Modified:
  stable/11/usr.bin/mkuzip/Makefile
  stable/11/usr.bin/mkuzip/mkuz_cfg.h
  stable/11/usr.bin/mkuzip/mkuzip.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/usr.bin/mkuzip/Makefile
==============================================================================
--- stable/11/usr.bin/mkuzip/Makefile   Mon Aug 28 20:52:32 2017        
(r322982)
+++ stable/11/usr.bin/mkuzip/Makefile   Mon Aug 28 20:55:13 2017        
(r322983)
@@ -3,7 +3,7 @@
 PROG=  mkuzip
 MAN=   mkuzip.8
 SRCS=  mkuzip.c mkuz_blockcache.c mkuz_lzma.c mkuz_zlib.c mkuz_conveyor.c \
-           mkuz_blk.c mkuz_fqueue.c mkuz_time.c
+           mkuz_blk.c mkuz_fqueue.c mkuz_time.c mkuz_insize.c
 
 #CFLAGS+=      -DMKUZ_DEBUG
 

Modified: stable/11/usr.bin/mkuzip/mkuz_cfg.h
==============================================================================
--- stable/11/usr.bin/mkuzip/mkuz_cfg.h Mon Aug 28 20:52:32 2017        
(r322982)
+++ stable/11/usr.bin/mkuzip/mkuz_cfg.h Mon Aug 28 20:55:13 2017        
(r322983)
@@ -36,5 +36,7 @@ struct mkuz_cfg {
     int en_dedup;
     int nworkers;
     int blksz;
+    const char *iname;
+    off_t isize;
     const struct mkuz_format *handler;
 };

Copied and modified: stable/11/usr.bin/mkuzip/mkuz_insize.c (from r320048, 
head/usr.bin/mkuzip/mkuz_insize.c)
==============================================================================
--- head/usr.bin/mkuzip/mkuz_insize.c   Sat Jun 17 02:58:31 2017        
(r320048, copy source)
+++ stable/11/usr.bin/mkuzip/mkuz_insize.c      Mon Aug 28 20:55:13 2017        
(r322983)
@@ -34,6 +34,7 @@ __FBSDID("$FreeBSD$");
 #include <sys/stat.h>
 #include <err.h>
 #include <fcntl.h>
+#include <unistd.h>
 
 #include "mkuz_cfg.h"
 #include "mkuz_insize.h"
@@ -58,12 +59,15 @@ mkuz_get_insize(struct mkuz_cfg *cfp)
                ffd = open(statfsbuf.f_mntfromname, O_RDONLY);
                if (ffd < 0) {
                        warn("open(%s, O_RDONLY)", statfsbuf.f_mntfromname);
+                       close(ffd);
                        return (-1);
                }
                if (ioctl(ffd, DIOCGMEDIASIZE, &ms) < 0) {
                        warn("ioctl(DIOCGMEDIASIZE)");
+                       close(ffd);
                        return (-1);
                }
+               close(ffd);
                sb.st_size = ms;
        } else if (S_ISCHR(sb.st_mode)) {
                if (ioctl(cfp->fdr, DIOCGMEDIASIZE, &ms) < 0) {

Copied: stable/11/usr.bin/mkuzip/mkuz_insize.h (from r320048, 
head/usr.bin/mkuzip/mkuz_insize.h)
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ stable/11/usr.bin/mkuzip/mkuz_insize.h      Mon Aug 28 20:55:13 2017        
(r322983, copy of r320048, head/usr.bin/mkuzip/mkuz_insize.h)
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2016 Maxim Sobolev <sobo...@freebsd.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+off_t mkuz_get_insize(struct mkuz_cfg *);

Modified: stable/11/usr.bin/mkuzip/mkuzip.c
==============================================================================
--- stable/11/usr.bin/mkuzip/mkuzip.c   Mon Aug 28 20:52:32 2017        
(r322982)
+++ stable/11/usr.bin/mkuzip/mkuzip.c   Mon Aug 28 20:55:13 2017        
(r322983)
@@ -28,7 +28,6 @@
 __FBSDID("$FreeBSD$");
 
 #include <sys/types.h>
-#include <sys/disk.h>
 #include <sys/endian.h>
 #include <sys/param.h>
 #include <sys/sysctl.h>
@@ -58,6 +57,7 @@ __FBSDID("$FreeBSD$");
 #include "mkuz_format.h"
 #include "mkuz_fqueue.h"
 #include "mkuz_time.h"
+#include "mkuz_insize.h"
 
 #define DEFAULT_CLSTSIZE       16384
 
@@ -94,7 +94,7 @@ cmp_blkno(const struct mkuz_blk *bp, void *p)
 int main(int argc, char **argv)
 {
        struct mkuz_cfg cfs;
-       char *iname, *oname;
+       char *oname;
        uint64_t *toc;
        int i, io, opt, tmp;
        struct {
@@ -102,7 +102,6 @@ int main(int argc, char **argv)
                FILE *f;
        } summary;
        struct iovec iov[2];
-       struct stat sb;
        uint64_t offset, last_offset;
        struct cloop_header hdr;
        struct mkuz_conveyor *cvp;
@@ -203,9 +202,9 @@ int main(int argc, char **argv)
 
        c_ctx = cfs.handler->f_init(cfs.blksz);
 
-       iname = argv[0];
+       cfs.iname = argv[0];
        if (oname == NULL) {
-               asprintf(&oname, "%s%s", iname, cfs.handler->default_sufx);
+               asprintf(&oname, "%s%s", cfs.iname, cfs.handler->default_sufx);
                if (oname == NULL) {
                        err(1, "can't allocate memory");
                        /* Not reached */
@@ -219,30 +218,18 @@ int main(int argc, char **argv)
        signal(SIGXFSZ, exit);
        atexit(cleanup);
 
-       cfs.fdr = open(iname, O_RDONLY);
+       cfs.fdr = open(cfs.iname, O_RDONLY);
        if (cfs.fdr < 0) {
-               err(1, "open(%s)", iname);
+               err(1, "open(%s)", cfs.iname);
                /* Not reached */
        }
-       if (fstat(cfs.fdr, &sb) != 0) {
-               err(1, "fstat(%s)", iname);
+       cfs.isize = mkuz_get_insize(&cfs);
+       if (cfs.isize < 0) {
+               errx(1, "can't determine input image size");
                /* Not reached */
        }
-       if (S_ISCHR(sb.st_mode)) {
-               off_t ms;
-
-               if (ioctl(cfs.fdr, DIOCGMEDIASIZE, &ms) < 0) {
-                       err(1, "ioctl(DIOCGMEDIASIZE)");
-                       /* Not reached */
-               }
-               sb.st_size = ms;
-       } else if (!S_ISREG(sb.st_mode)) {
-               fprintf(stderr, "%s: not a character device or regular file\n",
-                       iname);
-               exit(1);
-       }
-       hdr.nblocks = sb.st_size / cfs.blksz;
-       if ((sb.st_size % cfs.blksz) != 0) {
+       hdr.nblocks = cfs.isize / cfs.blksz;
+       if ((cfs.isize % cfs.blksz) != 0) {
                if (cfs.verbose != 0)
                        fprintf(stderr, "file size is not multiple "
                        "of %d, padding data\n", cfs.blksz);
@@ -270,7 +257,7 @@ int main(int argc, char **argv)
 
        if (cfs.verbose != 0) {
                fprintf(stderr, "data size %ju bytes, number of clusters "
-                   "%u, index length %zu bytes\n", sb.st_size,
+                   "%u, index length %zu bytes\n", cfs.isize,
                    hdr.nblocks, iov[1].iov_len);
        }
 
@@ -353,9 +340,9 @@ drain:
                et = getdtime();
                fprintf(summary.f, "compressed data to %ju bytes, saved %lld "
                    "bytes, %.2f%% decrease, %.2f bytes/sec.\n", offset,
-                   (long long)(sb.st_size - offset),
-                   100.0 * (long long)(sb.st_size - offset) /
-                   (float)sb.st_size, (float)sb.st_size / (et - st));
+                   (long long)(cfs.isize - offset),
+                   100.0 * (long long)(cfs.isize - offset) /
+                   (float)cfs.isize, (float)cfs.isize / (et - st));
        }
 
        /* Convert to big endian */
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to