1#!/bin/bash
2
3if [[ -z "$AWK" || -z "$WORKDIR" ]]; then
4    printf '$AWK and $WORKDIR must be set\n' >&2
5    exit 1
6fi
7
8TEMP0=$WORKDIR/test.temp.0
9TEMP1=$WORKDIR/test.temp.1
10TEMP2=$WORKDIR/test.temp.2
11
12RESULT=0
13
14fail() {
15	echo "$1" >&2
16	RESULT=1
17}
18
19echo T.close: test close built-in
20
21rm -f $TEMP0
22$AWK '{ print >>"'$TEMP0'"; close("'$TEMP0'") }' /etc/passwd
23diff /etc/passwd $TEMP0 || fail 'BAD: T.close (1)'
24
25ls -l > $TEMP0
26tail -1 $TEMP0 > $TEMP1
27$AWK '{ print >"'$TEMP2'"; close("'$TEMP2'") }' $TEMP0
28diff $TEMP1 $TEMP2 || fail 'BAD: T.close (2)'
29
30echo 0 > $TEMP1
31$AWK '	# non-accessible file
32  BEGIN { getline <"/etc/passwd"; print close("/etc/passwd"); }
33' > $TEMP2
34diff $TEMP1 $TEMP2 || fail 'BAD: T.close (3)'
35
36echo -1 > $TEMP1
37$AWK '	# file not opened
38  BEGIN { print close("glotch"); }
39' > $TEMP2
40diff $TEMP1 $TEMP2 || fail 'BAD: T.close (4)'
41
42echo 0 > $TEMP1
43$AWK '	# normal close
44  BEGIN { print "hello" > "'$TEMP0'"; print close("'$TEMP0'"); }
45' > $TEMP2
46diff $TEMP1 $TEMP2 || fail 'BAD: T.close (5)'
47
48echo 0 > $TEMP1
49$AWK '	# normal close
50  BEGIN { print "hello" | "cat > '$TEMP0'"; print close("cat > '$TEMP0'"); }
51' > $TEMP2
52diff $TEMP1 $TEMP2 || fail 'BAD: T.close (6)'
53
54exit $RESULT
55