mirror of
git://git.sv.gnu.org/coreutils
synced 2026-05-17 04:17:17 -04:00
dcff25a925
* tests/misc/stty: Don't check the serial control settings as these are ignored by various Linux kernels. Reported by Matthew Burgess.
106 lines
3.6 KiB
Bash
Executable File
106 lines
3.6 KiB
Bash
Executable File
#! /bin/sh
|
|
# Make sure stty can parse most of its options.
|
|
|
|
# Copyright (C) 1998-2004, 2006-2009 Free Software Foundation, Inc.
|
|
|
|
# This program is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation, either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
if test "$VERBOSE" = yes; then
|
|
set -x
|
|
stty --version
|
|
fi
|
|
|
|
# Make sure there's a tty on stdin.
|
|
. $srcdir/test-lib.sh
|
|
require_controlling_input_terminal_
|
|
trap '' TTOU # Ignore SIGTTOU
|
|
|
|
# The following list of reversible options was generated with
|
|
# grep -w REV stty.c|sed -n '/^ {"/{s//REV_/;s/".*/=1/;p;}'|fmt
|
|
REV_parenb=1 REV_parodd=1 REV_hupcl=1 REV_hup=1 REV_cstopb=1 REV_cread=1
|
|
REV_clocal=1 REV_crtscts=1 REV_ignbrk=1 REV_brkint=1 REV_ignpar=1
|
|
REV_parmrk=1 REV_inpck=1 REV_istrip=1 REV_inlcr=1 REV_igncr=1 REV_icrnl=1
|
|
REV_ixon=1 REV_ixoff=1 REV_tandem=1 REV_iuclc=1 REV_ixany=1 REV_imaxbel=1
|
|
REV_opost=1 REV_olcuc=1 REV_ocrnl=1 REV_onlcr=1 REV_onocr=1 REV_onlret=1
|
|
REV_ofill=1 REV_ofdel=1 REV_isig=1 REV_icanon=1 REV_iexten=1 REV_echo=1
|
|
REV_echoe=1 REV_crterase=1 REV_echok=1 REV_echonl=1 REV_noflsh=1
|
|
REV_xcase=1 REV_tostop=1 REV_echoprt=1 REV_prterase=1 REV_echoctl=1
|
|
REV_ctlecho=1 REV_echoke=1 REV_crtkill=1 REV_evenp=1 REV_parity=1
|
|
REV_oddp=1 REV_nl=1 REV_cooked=1 REV_raw=1 REV_pass8=1 REV_litout=1
|
|
REV_cbreak=1 REV_decctlq=1 REV_tabs=1 REV_lcase=1 REV_LCASE=1
|
|
|
|
|
|
saved_state=.saved-state
|
|
stty --save > $saved_state || fail=1
|
|
stty `cat $saved_state` || fail=1
|
|
|
|
# This would segfault prior to sh-utils-2.0j.
|
|
stty erase - || fail=1
|
|
|
|
# These would improperly ignore invalid options through coreutils 5.2.1.
|
|
stty -F 2>/dev/null && fail=1
|
|
stty -raw -F no/such/file 2>/dev/null && fail=1
|
|
stty -raw -a 2>/dev/null && fail=1
|
|
|
|
# Build a list of all boolean options stty accepts on this system.
|
|
# Don't depend on terminal width. Put each option on its own line,
|
|
# remove all non-boolean ones, then remove any leading hyphens.
|
|
sed_del='/^speed/d;/^rows/d;/^columns/d;/ = /d'
|
|
options=`stty -a | tr -s ';' '\n' | sed "s/^ //;$sed_del;s/-//g"`
|
|
|
|
# Take them one at a time, with and without the leading `-'.
|
|
for opt in $options; do
|
|
# `stty parenb' and `stty -parenb' fail with this message
|
|
# stty: standard input: unable to perform all requested operations
|
|
# on Linux 2.2.0-pre4 kernels. Also since around Linux 2.6.30
|
|
# other serial control settings give the same error. So skip them.
|
|
case $opt in parenb|parodd|cstopb|crtscts) continue;; esac
|
|
|
|
stty $opt || fail=1
|
|
|
|
# Likewise, `stty -cread' would fail, so skip that, too.
|
|
test $opt = cread && continue
|
|
rev=`eval echo "\\\$REV_$opt"`
|
|
if test -n "$rev"; then
|
|
stty -$opt || { fail=1; echo -$opt; }
|
|
fi
|
|
done
|
|
|
|
if test -n "$RUN_LONG_TESTS"; then
|
|
# Take them in pairs.
|
|
for opt1 in $options; do
|
|
echo .|tr -d '\n'
|
|
for opt2 in $options; do
|
|
|
|
stty $opt1 $opt2 || fail=1
|
|
|
|
rev1=`eval echo "\\\$REV_$opt1"`
|
|
rev2=`eval echo "\\\$REV_$opt2"`
|
|
if test -n "$rev1"; then
|
|
stty -$opt1 $opt2 || fail=1
|
|
fi
|
|
if test -n "$rev2"; then
|
|
stty $opt1 -$opt2 || fail=1
|
|
fi
|
|
if test "$rev1$rev2" = 11; then
|
|
stty -$opt1 -$opt2 || fail=1
|
|
fi
|
|
done
|
|
done
|
|
fi
|
|
|
|
stty `cat $saved_state`
|
|
|
|
Exit $fail
|