1#!/bin/sh 2# Ensure that gzip -cdf handles mixed compressed/not-compressed data 3# Before gzip-1.5, it would produce invalid output. 4 5# Copyright (C) 2010-2016 Free Software Foundation, Inc. 6 7# This program is free software: you can redistribute it and/or modify 8# it under the terms of the GNU General Public License as published by 9# the Free Software Foundation, either version 3 of the License, or 10# (at your option) any later version. 11 12# This program is distributed in the hope that it will be useful, 13# but WITHOUT ANY WARRANTY; without even the implied warranty of 14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15# GNU General Public License for more details. 16 17# You should have received a copy of the GNU General Public License 18# along with this program. If not, see <http://www.gnu.org/licenses/>. 19# limit so don't run it by default. 20 21. "${srcdir=.}/init.sh"; path_prepend_ . 22 23printf 'xxx\nyyy\n' > exp2 || framework_failure_ 24printf 'aaa\nbbb\nccc\n' > exp3 || framework_failure_ 25 26fail=0 27 28(echo xxx; echo yyy) > in || fail=1 29gzip -cdf < in > out || fail=1 30compare exp2 out || fail=1 31 32# Uncompressed input, followed by compressed data. 33# Currently fails, so skip it. 34# (echo xxx; echo yyy|gzip) > in || fail=1 35# gzip -cdf < in > out || fail=1 36# compare exp2 out || fail=1 37 38# Compressed input, followed by regular (not-compressed) data. 39(echo xxx|gzip; echo yyy) > in || fail=1 40gzip -cdf < in > out || fail=1 41compare exp2 out || fail=1 42 43(echo xxx|gzip; echo yyy|gzip) > in || fail=1 44gzip -cdf < in > out || fail=1 45compare exp2 out || fail=1 46 47in_str=0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-+=% 48for i in 0 1 2 3 4 5 6 7 8 9 a; do in_str="$in_str$in_str" ;done 49 50# Start with some small sizes. $(seq 64) 51sizes=$(i=0; while :; do echo $i; test $i = 64 && break; i=$(expr $i + 1); done) 52 53# gzip's internal buffer size is 32KiB + 64 bytes: 54sizes="$sizes 32831 32832 32833" 55 56# 128KiB, +/- 1 57sizes="$sizes 131071 131072 131073" 58 59# Ensure that "gzip -cdf" acts like cat, for a range of small input files. 60i=0 61for i in $sizes; do 62 echo $i 63 printf %$i.${i}s $in_str > in 64 gzip -cdf < in > out 65 compare in out || fail=1 66done 67 68Exit $fail 69