#!/bin/sh
#
# Ensure that strace does not retain stdin and stdout descriptors.
#
# Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
#    notice, this list of conditions and the following disclaimer in the
#    documentation and/or other materials provided with the distribution.
# 3. The name of the author may not be used to endorse or promote products
#    derived from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

. "${srcdir=.}/init.sh"

run_prog_skip_if_failed \
	kill -0 $$

check_prog sleep
check_prog yes

> "$OUT"
> "$LOG"
(
	while [ -f "$LOG" ]; do
		:
	done
	$SLEEP_A_BIT &
	yes
	if kill -0 $! 2> /dev/null; then
		wait
	else
		echo TIMEOUT >> "$OUT"
	fi
) | $STRACE -qq -enone -esignal=none \
	sh -c "exec <&- >&-; rm -f -- $LOG; $SLEEP_A_BIT; $SLEEP_A_BIT"

if [ -s "$OUT" ]; then
	fail_ "$STRACE failed to redirect standard input"
fi

> "$LOG"
$STRACE -qq -enone -esignal=none \
	sh -c "exec <&- >&-; rm -f -- $LOG; $SLEEP_A_BIT; $SLEEP_A_BIT" |
(
	while [ -f "$LOG" ]; do
		:
	done
	$SLEEP_A_BIT &
	cat > /dev/null
	if kill -0 $! 2> /dev/null; then
		wait
	else
		echo TIMEOUT >> "$OUT"
	fi
)

if [ -s "$OUT" ]; then
	fail_ "$STRACE failed to redirect standard output"
fi

rm -f -- "$OUT"
