1#
2# CDDL HEADER START
3#
4# The contents of this file are subject to the terms of the
5# Common Development and Distribution License (the "License").
6# You may not use this file except in compliance with the License.
7#
8# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9# or http://www.opensolaris.org/os/licensing.
10# See the License for the specific language governing permissions
11# and limitations under the License.
12#
13# When distributing Covered Code, include this CDDL HEADER in each
14# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15# If applicable, add the following below this CDDL HEADER, with the
16# fields enclosed by brackets "[]" replaced with your own identifying
17# information: Portions Copyright [yyyy] [name of copyright owner]
18#
19# CDDL HEADER END
20#
21
22#
23# Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
24# Use is subject to license terms.
25#
26#ident	"%Z%%M%	%I%	%E% SMI"
27
28script()
29{
30	$dtrace -wq -o $tmpfile -s /dev/stdin 2> $errfile <<EOF
31	BEGIN
32	{
33		/*
34		 * All of these should fail...
35		 */
36		freopen("..");
37		freopen("%s", ".");
38		freopen("%c%c", '.', '.');
39		freopen("%c", '.');
40
41		/*
42		 * ...so stdout should still be open here.
43		 */
44		printf("%d", ++i);
45
46		freopen("%s%s", ".", ".");
47		freopen("%s%s", ".", ".");
48
49		printf("%d", ++i);
50	}
51
52	BEGIN
53	/i == 2/
54	{
55		/*
56		 * ...and here.
57		 */
58		printf("%d\n", ++i);
59		exit(0);
60	}
61
62	BEGIN
63	{
64		exit(1);
65	}
66EOF
67}
68
69if [ $# != 1 ]; then
70	echo expected one argument: '<'dtrace-path'>'
71	exit 2
72fi
73
74dtrace=$1
75tmpfile=/tmp/tst.badfreopen.$$
76errfile=/tmp/tst.badfreopen.$$.stderr
77
78script
79status=$?
80
81if [ "$status" -eq 0 ]; then
82	i=`cat $tmpfile`
83
84	if [[ $i != "123" ]]; then
85		echo "$0: unexpected contents in $tmpfile: " \
86		    "expected 123, found $i"
87		status=100
88	fi
89
90	i=`wc -l $errfile | nawk '{ print $1 }'`
91
92	if [ "$i" -lt 6 ]; then
93		echo "$0: expected at least 6 lines of stderr, found $i lines"
94		status=101
95	fi
96else
97	cat $errfile > /dev/fd/2
98fi
99
100rm $tmpfile $errfile
101
102exit $status
103