xref: /illumos-gate/usr/src/cmd/dtrace/test/tst/common/funcs/tst.badfreopen.ksh (revision 753d2d2e8e7fd0c9bcf736d9bf2f2faf4d6234cc)
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
69dtrace=/usr/sbin/dtrace
70tmpfile=/tmp/tst.badfreopen.$$
71errfile=/tmp/tst.badfreopen.$$.stderr
72
73script
74status=$?
75
76if [ "$status" -eq 0 ]; then
77	i=`cat $tmpfile`
78
79	if [[ $i != "123" ]]; then
80		echo "$0: unexpected contents in $tmpfile: " \
81		    "expected 123, found $i"
82		status=100
83	fi
84
85	i=`wc -l $errfile | nawk '{ print $1 }'`
86
87	if [ "$i" -lt 6 ]; then
88		echo "$0: expected at least 6 lines of stderr, found $i lines"
89		status=101
90	fi
91else
92	cat $errfile > /dev/fd/2
93fi
94
95rm $tmpfile $errfile
96
97exit $status
98