#!/bin/sh
-
+#
# Check whether -c and -w options work.
+#
+# Copyright (c) 2014-2016 Dmitry V. Levin <ldv@altlinux.org>
+# Copyright (c) 2014-2018 The strace developers.
+# All rights reserved.
+#
+# SPDX-License-Identifier: GPL-2.0-or-later
. "${srcdir=.}/init.sh"
-check_prog sleep
+run_prog ../sleep 0
check_prog grep
-make_log()
-{
- $STRACE $args > $LOG 2>&1 || {
- cat $LOG
- fail_ "$STRACE $args failed"
- }
-}
-
grep_log()
{
- LC_ALL=C grep -E -x -e "$*" $LOG > /dev/null || {
- cat $LOG
- fail_ "unexpected output from $STRACE $args"
- }
-}
+ local pattern="$1"; shift
-args='-c sleep 1'
-make_log
-grep nanosleep $LOG > /dev/null ||
- skip_ 'sleep does not use nanosleep'
-grep_log ' *[^ ]+ +0\.0[^n]*nanosleep'
+ run_strace "$@" ../sleep 1
-args='-c -enanosleep sleep 1'
-make_log
-grep_log ' *[^ ]+ +0\.0[^n]*nanosleep'
+ grep nanosleep "$LOG" > /dev/null ||
+ framework_skip_ 'sleep does not use nanosleep'
-args='-cw sleep 1'
-make_log
-grep_log ' *[^ ]+ +1\.0[^n]*nanosleep'
+ LC_ALL=C grep -E -x -e "$pattern" "$LOG" > /dev/null || {
+ echo "Pattern of expected output: $pattern"
+ echo 'Actual output:'
+ dump_log_and_fail_with "$STRACE $args output mismatch"
+ }
+}
-args='-cw -enanosleep sleep 1'
-make_log
-grep_log '100\.00 +1\.0[^n]*nanosleep'
+grep_log ' *[^ ]+ +0\.0[^n]*nanosleep' -c
+grep_log ' *[^ ]+ +0\.0[^n]*nanosleep' -c -O1
+grep_log ' *[^ ]+ +0\.0[^n]*nanosleep' -c -enanosleep
+grep_log ' *[^ ]+ +0\.0[^n]*nanosleep' -c -O1 -enanosleep
+grep_log ' *[^ ]+ +(1\.[01]|0\.99)[^n]*nanosleep' -cw
+grep_log ' *[^ ]+ +(1\.[01]|0\.99)[^n]*nanosleep' -cw -O1
+grep_log '100\.00 +(1\.[01]|0\.99)[^n]*nanosleep' -cw -enanosleep
+grep_log '100\.00 +(1\.[01]|0\.99)[^n]*nanosleep' -cw -O1 -enanosleep
exit 0