1 #!/bin/bash 2 3 [ -f testing.sh ] && . testing.sh 4 5 # We need to test name and file padding. 6 # This means all possible values of strlen(name)+1 % 4, 7 # plus file sizes of at least 0-4. 8 9 touch a bb ccc dddd 10 testing "cpio name padding" "cpio -o -H newc|cpio -it" "a\nbb\nccc\ndddd\n" "" "a\nbb\nccc\ndddd\n" 11 rm a bb ccc dddd 12 13 touch a 14 printf '1' >b 15 printf '22' >c 16 printf '333' >d 17 testing "cpio file padding" "cpio -o -H newc|cpio -it" "a\nb\nc\nd\n" "" "a\nb\nc\nd\n" 18 rm a b c d 19 20 touch a 21 printf '1' >bb 22 printf '22' >ccc 23 printf '333' >dddd 24 # With the proper padding, header length, and file length, 25 # the relevant bit should be here: 26 # 110*5 + 4*3 + 2 + 6*3 = 550 + 12 + 20 = 582 27 # files are padded to n*4, names are padded to 2 + n*4 due to the header length 28 testing "cpio archive length" "cpio -o -H newc|dd ibs=2 skip=291 count=5 2>/dev/null" "TRAILER!!!" "" "a\nbb\nccc\ndddd\n" 29 testing "cpio archive magic" "cpio -o -H newc|dd ibs=2 count=3 2>/dev/null" "070701" "" "a\n" 30 # check name length (8 bytes before the empty "crc") 31 testing "cpio name length" "cpio -o -H newc|dd ibs=2 skip=47 count=4 2>/dev/null" "00000002" "" "a\n" 32 rm a bb ccc dddd 33 34 # archive dangling symlinks and empty files even if we cannot open them 35 touch a; chmod a-rwx a; ln -s a/cant b 36 testing "cpio archives unreadable empty files" "cpio -o -H newc|cpio -it" "a\nb\n" "" "a\nb\n" 37 chmod u+rw a; rm -f a b 38 39 40