heap   [plain text]


#!/bin/sh

. functions

cleanup() {
	rm -rf h h1 h.xar h.toc h.out
}

echo "Checking normal heap archiving"
cleanup
mkdir -p h h1
cp /bin/ls h
cp h/ls h/foo

cd h
create_archive ../h.xar .
cd ..
${XAR} --dump-toc=h.toc -f h.xar
cd h1
extract_archive ../h.xar
cd ..
xsltproc heap1.xsl h.toc > h.out
if [ $? -ne 0 ]; then
	echo "Error processing toc"
	cleanup
	exit 1
fi

offset1=`head -1 h.out | awk '{print $2}'`
offset2=`tail -1 h.out | awk '{print $2}'`
if [ $offset1 -ge $offset2 ]; then
	echo "Offset of first file is greater than or equal to offset of the first file"
	cleanup
	exit 1
fi
cleanup


echo "Checking --coalesce-heap heap archiving"
mkdir -p h h1
cp /bin/ls h
cp h/ls h/foo

cd h
${XAR} --coalesce-heap -cf ../h.xar .
if [ $? -ne 0 ]; then
	echo "Error creating archive"
	cleanup
	exit 1
fi
cd ..
${XAR} --dump-toc=h.toc -f h.xar
cd h1
extract_archive ../h.xar
cd ..
xsltproc heap1.xsl h.toc > h.out
if [ $? -ne 0 ]; then
	echo "Error processing toc"
	cleanup
	exit 1
fi

offset1=`head -1 h.out | awk '{print $2}'`
offset2=`tail -1 h.out | awk '{print $2}'`
if [ $offset1 -ne $offset2 ]; then
	echo "Offset of the files differ"
	cleanup
	exit 1
fi
cleanup


echo "Checking --link-same heap archiving"
mkdir -p h h1
cp /bin/ls h
cp h/ls h/foo

cd h
${XAR} --link-same -cf ../h.xar .
if [ $? -ne 0 ]; then
	echo "Error creating archive"
	cleanup
	exit 1
fi
cd ..
${XAR} --dump-toc=h.toc -f h.xar
cd h1
extract_archive ../h.xar
cd ..
inode1=`ls -i h1/ls | awk '{print $1}'`
inode2=`ls -i h1/foo | awk '{print $1}'`
if [ $inode1 -ne $inode2 ]; then
	echo "Inodes of extracted files don't match"
	cleanup
	exit 1
fi
cleanup