Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/netbsd-6]: src/usr.bin/vndcompress Pull up following revision(s) (reques...



details:   https://anonhg.NetBSD.org/src/rev/3e92fd1baba1
branches:  netbsd-6
changeset: 776808:3e92fd1baba1
user:      martin <martin%NetBSD.org@localhost>
date:      Sun Dec 07 13:57:58 2014 +0000

description:
Pull up following revision(s) (requested by riastradh in ticket #1138):
        usr.bin/vndcompress/Makefile                    1.3-1.13
        usr.bin/vndcompress/common.h                    1.1-1.6
        usr.bin/vndcompress/main.c                      1.1-1.3
        usr.bin/vndcompress/offtab.c                    1.1-1.13
        usr.bin/vndcompress/offtab.h                    1.1-1.2
        usr.bin/vndcompress/utils.c                     1.1-1.4
        usr.bin/vndcompress/utils.h                     1.1-1.3
        usr.bin/vndcompress/vndcompress.1               1.7-1.14
        usr.bin/vndcompress/vndcompress.c               1.8-1.24
        usr.bin/vndcompress/vndcompress.h               delete
        usr.bin/vndcompress/vnduncompress.c             1.1-1.11
Rewrite vndcompress to support SIGINFO and restart after interrupt.
Make it generally more robust in the process.

diffstat:

 usr.bin/vndcompress/Makefile        |   225 ++++++-
 usr.bin/vndcompress/common.h        |   160 ++++
 usr.bin/vndcompress/main.c          |   178 +++++
 usr.bin/vndcompress/offtab.c        |   511 +++++++++++++++
 usr.bin/vndcompress/offtab.h        |    74 ++
 usr.bin/vndcompress/utils.c         |   202 ++++++
 usr.bin/vndcompress/utils.h         |    54 +
 usr.bin/vndcompress/vndcompress.1   |   371 ++++++----
 usr.bin/vndcompress/vndcompress.c   |  1145 ++++++++++++++++++++++++----------
 usr.bin/vndcompress/vndcompress.h   |    83 --
 usr.bin/vndcompress/vnduncompress.c |   262 ++++++++
 11 files changed, 2687 insertions(+), 578 deletions(-)

diffs (truncated from 3434 to 300 lines):

diff -r 1fc19068d274 -r 3e92fd1baba1 usr.bin/vndcompress/Makefile
--- a/usr.bin/vndcompress/Makefile      Thu Dec 04 06:12:16 2014 +0000
+++ b/usr.bin/vndcompress/Makefile      Sun Dec 07 13:57:58 2014 +0000
@@ -1,8 +1,225 @@
-# $Id: Makefile,v 1.2 2009/04/14 22:15:28 lukem Exp $
+PROG=  vndcompress
+SRCS=  main.c offtab.c utils.c vndcompress.c vnduncompress.c
 
-PROG=  vndcompress
-LINKS=   ${BINDIR}/vndcompress ${BINDIR}/vnduncompress
-MLINKS=  vndcompress.1 vnduncompress.1
+LINKS= ${BINDIR}/vndcompress ${BINDIR}/vnduncompress
+MLINKS=        vndcompress.1 vnduncompress.1
+
+DPADD+=        ${LIBZ}
 LDADD+=        -lz
 
+WARNS= 5
+
 .include <bsd.prog.mk>
+
+TESTFILES+=    oneblock
+XFAIL+=                oneblock.in-outx
+XFAIL+=                oneblock.cl2-cl2x
+oneblock.in:
+       head -c 512 < /usr/share/dict/words > ${.TARGET}.tmp \
+       && mv -f ${.TARGET}.tmp ${.TARGET}
+
+TESTFILES+=    tenblock
+XFAIL+=                tenblock.in-outx
+XFAIL+=                tenblock.cl2-cl2x
+tenblock.in:
+       head -c 5120 < /usr/share/dict/words > ${.TARGET}.tmp \
+       && mv -f ${.TARGET}.tmp ${.TARGET}
+
+TESTFILES+=    smallfile
+XFAIL+=                smallfile.in-outx
+XFAIL+=                smallfile.cl2-cl2x
+smallfile.in:
+       head -c 12345 < /usr/share/dict/words > ${.TARGET}.tmp \
+       && mv -f ${.TARGET}.tmp ${.TARGET}
+
+CHECKS+=       check-pipe
+CLEANFILES+=   smallfile.cl2pipe
+check-pipe: .PHONY smallfile.cl2 smallfile.cl2pipe
+       cmp ${.ALLSRC}
+smallfile.cl2pipe: smallfile.in vndcompress
+       head -c 54321 < /usr/share/dict/words \
+       | ./vndcompress -l 12345 /dev/stdin ${.TARGET}.tmp \
+       && mv -f ${.TARGET}.tmp ${.TARGET}
+
+TESTFILES+=    onechunk
+onechunk.in:
+       head -c 65536 < /usr/share/dict/words > ${.TARGET}.tmp \
+       && mv -f ${.TARGET}.tmp ${.TARGET}
+
+TESTFILES+=    tenchunk
+tenchunk.in:
+       head -c 655360 < /usr/share/dict/words > ${.TARGET}.tmp \
+       && mv -f ${.TARGET}.tmp ${.TARGET}
+
+TESTFILES+=    extrablock
+XFAIL+=                extrablock.in-outx
+XFAIL+=                extrablock.cl2-cl2x
+extrablock.in:
+       head -c $$((65536 + 512)) < /usr/share/dict/words > ${.TARGET}.tmp \
+       && mv -f ${.TARGET}.tmp ${.TARGET}
+
+TESTFILES+=    medfile
+XFAIL+=                medfile.in-outx
+XFAIL+=                medfile.cl2-cl2x
+medfile.in:
+       head -c 123456 < /usr/share/dict/words > ${.TARGET}.tmp \
+       && mv -f ${.TARGET}.tmp ${.TARGET}
+
+TESTFILES+=            onetinyblock
+BLOCKSIZE.onetinyblock=        512
+onetinyblock.in:
+       head -c 512 < /usr/share/dict/words > ${.TARGET}.tmp \
+       && mv -f ${.TARGET}.tmp ${.TARGET}
+
+TESTFILES+=            tentinyblock
+BLOCKSIZE.tentinyblock=        512
+tentinyblock.in:
+       head -c 5120 < /usr/share/dict/words > ${.TARGET}.tmp \
+       && mv -f ${.TARGET}.tmp ${.TARGET}
+
+CHECKS+=       check-pipe-restart
+CLEANFILES+=   piperestart.in piperestart.in.tmp
+CLEANFILES+=   piperestart.cl2 piperestart.cl2.tmp
+CLEANFILES+=   piperestart.cl2restart piperestart.cl2restart.tmp
+CLEANFILES+=   piperestart.cl2part piperestart.cl2part.tmp
+check-pipe-restart: .PHONY piperestart.cl2 piperestart.cl2restart
+       cmp ${.ALLSRC}
+piperestart.cl2restart: piperestart.cl2part vndcompress
+       cp piperestart.cl2part ${.TARGET}.tmp \
+       && head -c 700000 < /usr/share/dict/words \
+       | ./vndcompress -l 655360 -k 1 -rR /dev/stdin ${.TARGET}.tmp \
+       && mv -f ${.TARGET}.tmp ${.TARGET}
+# The following rule uses ; and not && on purpose: vndcompress is
+# supposed to fail (and it is even OK to interrupt!) so we can restart
+# and fill in the rest.
+piperestart.cl2part: vndcompress
+       head -c 600000 < /usr/share/dict/words \
+       | ./vndcompress -l 655360 -k 1 /dev/stdin ${.TARGET}.tmp; \
+       mv -f ${.TARGET}.tmp ${.TARGET}
+piperestart.in:
+       head -c 655360 < /usr/share/dict/words > ${.TARGET}.tmp \
+       && mv -f ${.TARGET}.tmp ${.TARGET}
+
+CHECKS+=       check-part
+CLEANFILES+=   part.orig part.cl2part part.cl2 part.out
+check-part: .PHONY part.orig part.out
+       cmp part.orig part.out
+part.cl2: part.orig part.cl2part vndcompress
+       cp part.cl2part ${.TARGET}.tmp \
+       && ./vndcompress -b 512 -rR part.orig ${.TARGET}.tmp \
+       && mv -f ${.TARGET}.tmp ${.TARGET}
+part.cl2part: part.orig vndcompress
+       ./vndcompress -b 512 -p 10 part.orig ${.TARGET}.tmp \
+       && mv -f ${.TARGET}.tmp ${.TARGET}
+part.orig:
+       head -c 12345 < /usr/share/dict/words > ${.TARGET}.tmp \
+       && mv -f ${.TARGET}.tmp ${.TARGET}
+
+TESTFILES+=    smallwindow
+smallwindow.in:
+       head -c 655360 < /usr/share/dict/words > ${.TARGET}.tmp \
+       && mv -f ${.TARGET}.tmp ${.TARGET}
+smallwindow.cl2: smallwindow.in
+       ./vndcompress -w 1 ${.IMPSRC} ${.TARGET}.tmp \
+       && mv -f ${.TARGET}.tmp ${.TARGET}
+smallwindow.out: smallwindow.cl2
+       ./vndcompress -w 1 -d ${.IMPSRC} ${.TARGET}.tmp \
+       && mv -f ${.TARGET}.tmp ${.TARGET}
+
+CHECKS+=       check-pipewindow
+check-pipewindow: smallwindow.cl2
+       @echo '# expecting failure...'
+       if cat smallwindow.cl2 | ./vndcompress -w 1 -d /dev/stdin /dev/null; \
+       then \
+         echo 'unexpected pass!' && exit 1; \
+       fi
+
+# The following two tests try to ensure a limited window size means
+# limited memory allocation.  They don't work very well.  The virtual
+# address space rlimit (ulimit -v, RLIMIT_AS) must cover the stack size
+# that is allocated automatically for the process, which varies from
+# machine architecture to machine architecture (the kernel's MAXSSIZ
+# parameter), as well as any shared libraries that get loaded in and
+# other auxiliary crud the loader or libc might allocate.
+#
+# In principle, the overhead from that and the program image should be
+# constant, and the only substantial memory allocation performed by
+# vndcompress should be w*8 bytes or (n/b)*8, where w is the window
+# size if specified, n is the size of the input, and b is the block
+# size.
+#
+# We could perhaps do an exponential growth and then binary search on
+# the virtual address space limit to determine the overhead, but that's
+# more trouble than I care to do in a makefile right now.  Currently
+# this is calibrated for NetBSD/amd64 6, where 128 MB of virtual
+# address space is allocated for the stack.  (Note `ulimit -v' takes a
+# number of kilobytes, not a number of bytes.)  Since this is not
+# reliable, however, these are commented out.
+
+#CHECKS+=      check-ulimit
+#check-ulimit:
+#      @echo '# expecting failure...'
+#      if head -c $$((64 * 1024 * 1024)) < /dev/zero \
+#          | (ulimit -v $$((139 * 1024)) && \
+#              ./vndcompress -w 0 -l 64m -b 512 /dev/stdin /dev/null); then \
+#        echo 'unexpected pass!' && exit 1; \
+#      fi
+#
+#CHECKS+=      check-ulimit-window
+#check-ulimit-window:
+#      head -c $$((64 * 1024 * 1024)) < /dev/zero \
+#      | (ulimit -v $$((139 * 1024)) && \
+#          ./vndcompress -w 8192 -l 64m -b 512 /dev/stdin /dev/null)
+
+TESTSUFFIXES+= in cl2 cl2x out outx
+
+TESTFORMS+=    cl2 cl2x
+TESTFORMS+=    in out
+TESTFORMS+=    in outx
+
+.for testfile in ${TESTFILES}
+.  for suffix in ${TESTSUFFIXES}
+CLEANFILES+=   ${testfile}.${suffix}
+CLEANFILES+=   ${testfile}.${suffix}.tmp
+.  endfor
+.  for left right in ${TESTFORMS}
+CHECKS.${testfile}+=   check-${testfile}.${left}-${right}
+check-${testfile}.${left}-${right}: .PHONY \
+  ${testfile}.${left} ${testfile}.${right}
+.    if empty(XFAIL:M${testfile}.${left}-${right})
+       cmp ${testfile}.${left} ${testfile}.${right}
+.    else
+       @echo '# expecting failure...' \
+       && echo 'cmp ${testfile}.${left} ${testfile}.${right}' \
+       && if cmp ${testfile}.${left} ${testfile}.${right}; then \
+         echo 'unexpected pass!' \
+         && exit 1; \
+       fi
+.    endif
+.  endfor
+check-${testfile}: ${CHECKS.${testfile}}
+CHECKS+=       check-${testfile}
+.endfor
+
+check: .PHONY ${CHECKS}
+
+.SUFFIXES: .cl2 .cl2x .in .out .outx
+
+# XXX These tests should automatically try different window sizes, but
+# that is tricky to express in make.
+
+.in.cl2: vndcompress
+       ./vndcompress ${.IMPSRC} ${.TARGET}.tmp ${BLOCKSIZE.${.PREFIX}} \
+       && mv -f ${.TARGET}.tmp ${.TARGET}
+
+.in.cl2x:
+       vndcompress ${.IMPSRC} ${.TARGET}.tmp ${BLOCKSIZE.${.PREFIX}} \
+       && mv -f ${.TARGET}.tmp ${.TARGET}
+
+.cl2.out: vndcompress
+       ./vndcompress -d ${.IMPSRC} ${.TARGET}.tmp \
+       && mv -f ${.TARGET}.tmp ${.TARGET}
+
+.cl2.outx:
+       vnduncompress ${.IMPSRC} ${.TARGET}.tmp \
+       && mv -f ${.TARGET}.tmp ${.TARGET}
diff -r 1fc19068d274 -r 3e92fd1baba1 usr.bin/vndcompress/common.h
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/usr.bin/vndcompress/common.h      Sun Dec 07 13:57:58 2014 +0000
@@ -0,0 +1,160 @@
+/*     $NetBSD: common.h,v 1.6.8.2 2014/12/07 13:57:58 martin Exp $    */
+
+/*-
+ * Copyright (c) 2013 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Taylor R. Campbell.
+ *
+ * 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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.
+ */
+
+#ifndef        VNDCOMPRESS_COMMON_H
+#define        VNDCOMPRESS_COMMON_H
+
+#include <sys/cdefs.h>
+#include <sys/param.h>
+
+#include <limits.h>
+#include <stdint.h>
+
+#ifndef __type_fit
+
+/* XXX Cruft from HEAD.  */
+
+#define __type_mask(t) (/*LINTED*/sizeof(t) < sizeof(intmax_t) ? \
+    (~((1ULL << (sizeof(t) * NBBY)) - 1)) : 0ULL)
+
+#define __zeroll() (0LL)
+#define __negative_p(x) ((x) < 0)
+
+#define __type_min_s(t) ((t)((1ULL << (sizeof(t) * NBBY - 1))))
+#define __type_max_s(t) ((t)~((1ULL << (sizeof(t) * NBBY - 1))))
+#define __type_min_u(t) ((t)0ULL)
+#define __type_max_u(t) ((t)~0ULL)
+#define __type_is_signed(t) (/*LINTED*/__type_min_s(t) + (t)1 < (t)1)
+#define __type_min(t) (__type_is_signed(t) ? __type_min_s(t) : __type_min_u(t))
+#define __type_max(t) (__type_is_signed(t) ? __type_max_s(t) : __type_max_u(t))
+
+
+#define __type_fit_u(t, a) (/*LINTED*/sizeof(t) < sizeof(intmax_t) ? \
+    (((a) & __type_mask(t)) == 0) : !__negative_p(a))
+
+#define __type_fit_s(t, a) (/*LINTED*/__negative_p(a) ? \



Home | Main Index | Thread Index | Old Index