#! /bin/bash
# FS QA Test No. 002
#
# simple inode link count test for a regular file
#
#-----------------------------------------------------------------------
# Copyright (c) 2000-2001 Silicon Graphics, Inc.  All Rights Reserved.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it would be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write the Free Software Foundation,
# Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
#
#-----------------------------------------------------------------------
#
# creator
owner=kenmcd@sgi.com

seq=`basename $0`
echo "QA output created by $seq"

# get standard environment, filters and checks
. ./common.rc
. ./common.filter

tmp=/tmp/$$
here=`pwd`
status=0	# success is the default!
trap "_cleanup; exit \$status" 0 1 2 3 15

_cleanup()
{
    rm -f $tmp.*
    _cleanup_testdir
}

# real QA test starts here
_supported_fs generic
_supported_os IRIX Linux

_setup_testdir

echo "Silence is goodness ..."

# ensure target directory exists
mkdir `dirname $testdir/$tmp` 2>/dev/null

touch $testdir/$tmp.1
for l in 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
do
    ln $testdir/$tmp.1 $testdir/$tmp.$l
    x=`src/lstat64 $testdir/$tmp.1 | sed -n -e '/ Links: /s/.*Links: *//p'`
    if [ "$l" -ne $x ]
    then
	echo "Arrgh, created link #$l and lstat64 looks like ..."
	src/lstat64 $testdir/$tmp.1
	status=1
    fi
done

for l in 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
do
    x=`src/lstat64 $testdir/$tmp.1 | sed -n -e '/ Links: /s/.*Links: *//p'`
    if [ "$l" -ne $x ]
    then
	echo "Arrgh, about to remove link #$l and lstat64 looks like ..."
	src/lstat64 $testdir/$tmp.1
	status=1
    fi
    rm -f $testdir/$tmp.$l
done

# success, all done
exit
