Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package perl-IO-Tty for openSUSE:Factory checked in at 2021-01-28 21:22:24 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/perl-IO-Tty (Old) and /work/SRC/openSUSE:Factory/.perl-IO-Tty.new.28504 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "perl-IO-Tty" Thu Jan 28 21:22:24 2021 rev:25 rq:867232 version:1.16 Changes: -------- --- /work/SRC/openSUSE:Factory/perl-IO-Tty/perl-IO-Tty.changes 2020-11-07 21:03:25.377832193 +0100 +++ /work/SRC/openSUSE:Factory/.perl-IO-Tty.new.28504/perl-IO-Tty.changes 2021-01-28 21:22:25.207639515 +0100 @@ -1,0 +2,11 @@ +Sat Jan 23 03:07:15 UTC 2021 - Tina M??ller <timueller+p...@suse.de> + +- updated to 1.16 + see /usr/share/doc/packages/perl-IO-Tty/ChangeLog + + 1.16 2021-01-2 Todd Rinaldo <to...@cpan.org> + * Switch to github for issue tracker. + * Switch to testsuite CI workflow. + * Tidy + +------------------------------------------------------------------- Old: ---- IO-Tty-1.15.tar.gz New: ---- IO-Tty-1.16.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ perl-IO-Tty.spec ++++++ --- /var/tmp/diff_new_pack.vFWsUY/_old 2021-01-28 21:22:25.763640395 +0100 +++ /var/tmp/diff_new_pack.vFWsUY/_new 2021-01-28 21:22:25.767640402 +0100 @@ -1,7 +1,7 @@ # # spec file for package perl-IO-Tty # -# Copyright (c) 2020 SUSE LLC +# Copyright (c) 2021 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -16,17 +16,15 @@ # +%define cpan_name IO-Tty Name: perl-IO-Tty -Version: 1.15 +Version: 1.16 Release: 0 -%define cpan_name IO-Tty Summary: Low-level allocate a pseudo-Tty, import constants License: Artistic-1.0 OR GPL-1.0-or-later -Group: Development/Libraries/Perl URL: https://metacpan.org/release/%{cpan_name} Source0: https://cpan.metacpan.org/authors/id/T/TO/TODDR/%{cpan_name}-%{version}.tar.gz Source1: cpanspec.yml -BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildRequires: perl BuildRequires: perl-macros %{perl_requires} @@ -62,12 +60,11 @@ Thanks! %prep -%setup -q -n %{cpan_name}-%{version} -find . -type f ! -path "*/t/*" ! -name "*.pl" ! -path "*/bin/*" ! -path "*/script/*" ! -name "configure" -print0 | xargs -0 chmod 644 +%autosetup -n %{cpan_name}-%{version} %build perl Makefile.PL INSTALLDIRS=vendor OPTIMIZE="%{optflags}" -make %{?_smp_mflags} +%make_build %check make test @@ -78,7 +75,6 @@ %perl_gen_filelist %files -f %{name}.files -%defattr(-,root,root,755) -%doc ChangeLog README.md try +%doc ChangeLog README try %changelog ++++++ IO-Tty-1.15.tar.gz -> IO-Tty-1.16.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/IO-Tty-1.15/ChangeLog new/IO-Tty-1.16/ChangeLog --- old/IO-Tty-1.15/ChangeLog 2020-11-03 23:10:00.000000000 +0100 +++ new/IO-Tty-1.16/ChangeLog 2021-01-22 09:02:35.000000000 +0100 @@ -1,3 +1,8 @@ +1.16 2021-01-2 Todd Rinaldo <to...@cpan.org> + * Switch to github for issue tracker. + * Switch to testsuite CI workflow. + * Tidy + 2020-10-03 Todd Rinaldo <to...@cpan.org> 1.15 * Skip winsize test on Solaris and QNX NTO * Make function tests more robust diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/IO-Tty-1.15/MANIFEST new/IO-Tty-1.16/MANIFEST --- old/IO-Tty-1.15/MANIFEST 2020-11-03 23:10:16.000000000 +0100 +++ new/IO-Tty-1.16/MANIFEST 2021-01-22 09:02:55.000000000 +0100 @@ -1,9 +1,9 @@ ChangeLog Makefile.PL -MANIFEST +MANIFEST This list of files MANIFEST.SKIP Pty.pm -README.md +README t/pty_get_winsize.t t/test.t try diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/IO-Tty-1.15/MANIFEST.SKIP new/IO-Tty-1.16/MANIFEST.SKIP --- old/IO-Tty-1.15/MANIFEST.SKIP 2020-11-03 23:09:03.000000000 +0100 +++ new/IO-Tty-1.16/MANIFEST.SKIP 2021-01-22 08:58:50.000000000 +0100 @@ -8,3 +8,4 @@ ^Tty/Constant.pm ^Makefile$ ^IO-Tty-\d +^IO-Tty\.ppd$ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/IO-Tty-1.15/META.json new/IO-Tty-1.16/META.json --- old/IO-Tty-1.15/META.json 2020-11-03 23:10:16.000000000 +0100 +++ new/IO-Tty-1.16/META.json 2021-01-22 09:02:54.000000000 +0100 @@ -33,10 +33,16 @@ }, "release_status" : "stable", "resources" : { + "bugtracker" : { + "web" : "https://github.com/toddr/IO-Tty/issues" + }, + "license" : [ + "http://dev.perl.org/licenses/" + ], "repository" : { "url" : "https://github.com/toddr/IO-Tty" } }, - "version" : "1.15", + "version" : "1.16", "x_serialization_backend" : "JSON::PP version 4.04" } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/IO-Tty-1.15/META.yml new/IO-Tty-1.16/META.yml --- old/IO-Tty-1.15/META.yml 2020-11-03 23:10:16.000000000 +0100 +++ new/IO-Tty-1.16/META.yml 2021-01-22 09:02:54.000000000 +0100 @@ -18,6 +18,8 @@ - t - inc resources: + bugtracker: https://github.com/toddr/IO-Tty/issues + license: http://dev.perl.org/licenses/ repository: https://github.com/toddr/IO-Tty -version: '1.15' +version: '1.16' x_serialization_backend: 'CPAN::Meta::YAML version 0.018' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/IO-Tty-1.15/Makefile.PL new/IO-Tty-1.16/Makefile.PL --- old/IO-Tty-1.15/Makefile.PL 2020-11-03 23:10:00.000000000 +0100 +++ new/IO-Tty-1.16/Makefile.PL 2021-01-22 09:02:35.000000000 +0100 @@ -7,6 +7,8 @@ } use strict; +use warnings; + use IO::File; use File::Spec; use Config qw(%Config); @@ -35,7 +37,7 @@ my %define; my @libs; -my $Package_Version = '1.15'; # keep this consistent with Tty.pm +my $Package_Version = '1.16'; # keep this consistent with Tty.pm my $Is_Beta = ($Package_Version =~ m/_/); open(SUB, ">xssubs.c") or die "open: $!"; @@ -470,7 +472,9 @@ }, 'META_MERGE' => { 'resources' => { - 'repository' => 'https://github.com/toddr/IO-Tty', + license => 'http://dev.perl.org/licenses/', + repository => 'https://github.com/toddr/IO-Tty', + bugtracker => 'https://github.com/toddr/IO-Tty/issues', }, }, ); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/IO-Tty-1.15/Pty.pm new/IO-Tty-1.16/Pty.pm --- old/IO-Tty-1.15/Pty.pm 2020-11-03 23:10:00.000000000 +0100 +++ new/IO-Tty-1.16/Pty.pm 2021-01-22 09:02:35.000000000 +0100 @@ -10,140 +10,143 @@ use vars qw(@ISA $VERSION); -$VERSION = '1.15'; # keep same as in Tty.pm +$VERSION = '1.16'; # keep same as in Tty.pm @ISA = qw(IO::Handle); eval { local $^W = 0; undef local $SIG{__DIE__}; require IO::Stty }; -push @ISA, "IO::Stty" if (not $@); # if IO::Stty is installed +push @ISA, "IO::Stty" if ( not $@ ); # if IO::Stty is installed sub new { - my ($class) = $_[0] || "IO::Pty"; - $class = ref($class) if ref($class); - @_ <= 1 or croak 'usage: new $class'; + my ($class) = $_[0] || "IO::Pty"; + $class = ref($class) if ref($class); + @_ <= 1 or croak 'usage: new $class'; - my ($ptyfd, $ttyfd, $ttyname) = pty_allocate(); + my ( $ptyfd, $ttyfd, $ttyname ) = pty_allocate(); - croak "Cannot open a pty" if not defined $ptyfd; + croak "Cannot open a pty" if not defined $ptyfd; - my $pty = $class->SUPER::new_from_fd($ptyfd, "r+"); - croak "Cannot create a new $class from fd $ptyfd: $!" if not $pty; - $pty->autoflush(1); - bless $pty => $class; + my $pty = $class->SUPER::new_from_fd( $ptyfd, "r+" ); + croak "Cannot create a new $class from fd $ptyfd: $!" if not $pty; + $pty->autoflush(1); + bless $pty => $class; - my $slave = IO::Tty->new_from_fd($ttyfd, "r+"); - croak "Cannot create a new IO::Tty from fd $ttyfd: $!" if not $slave; - $slave->autoflush(1); + my $slave = IO::Tty->new_from_fd( $ttyfd, "r+" ); + croak "Cannot create a new IO::Tty from fd $ttyfd: $!" if not $slave; + $slave->autoflush(1); - ${*$pty}{'io_pty_slave'} = $slave; - ${*$pty}{'io_pty_ttyname'} = $ttyname; - ${*$slave}{'io_tty_ttyname'} = $ttyname; + ${*$pty}{'io_pty_slave'} = $slave; + ${*$pty}{'io_pty_ttyname'} = $ttyname; + ${*$slave}{'io_tty_ttyname'} = $ttyname; - return $pty; + return $pty; } sub ttyname { - @_ == 1 or croak 'usage: $pty->ttyname();'; - my $pty = shift; - ${*$pty}{'io_pty_ttyname'}; + @_ == 1 or croak 'usage: $pty->ttyname();'; + my $pty = shift; + ${*$pty}{'io_pty_ttyname'}; } - sub close_slave { - @_ == 1 or croak 'usage: $pty->close_slave();'; + @_ == 1 or croak 'usage: $pty->close_slave();'; - my $master = shift; + my $master = shift; - if (exists ${*$master}{'io_pty_slave'}) { - close ${*$master}{'io_pty_slave'}; - delete ${*$master}{'io_pty_slave'}; - } + if ( exists ${*$master}{'io_pty_slave'} ) { + close ${*$master}{'io_pty_slave'}; + delete ${*$master}{'io_pty_slave'}; + } } sub slave { - @_ == 1 or croak 'usage: $pty->slave();'; + @_ == 1 or croak 'usage: $pty->slave();'; - my $master = shift; + my $master = shift; - if (exists ${*$master}{'io_pty_slave'}) { - return ${*$master}{'io_pty_slave'}; - } + if ( exists ${*$master}{'io_pty_slave'} ) { + return ${*$master}{'io_pty_slave'}; + } - my $tty = ${*$master}{'io_pty_ttyname'}; + my $tty = ${*$master}{'io_pty_ttyname'}; - my $slave = new IO::Tty; + my $slave = new IO::Tty; - $slave->open($tty, O_RDWR | O_NOCTTY) || - croak "Cannot open slave $tty: $!"; + $slave->open( $tty, O_RDWR | O_NOCTTY ) + || croak "Cannot open slave $tty: $!"; - return $slave; + return $slave; } sub make_slave_controlling_terminal { - @_ == 1 or croak 'usage: $pty->make_slave_controlling_terminal();'; + @_ == 1 or croak 'usage: $pty->make_slave_controlling_terminal();'; + + my $self = shift; + local (*DEVTTY); + + # loose controlling terminal explicitly + if ( defined TIOCNOTTY ) { + if ( open( \*DEVTTY, "/dev/tty" ) ) { + ioctl( \*DEVTTY, TIOCNOTTY, 0 ); + close \*DEVTTY; + } + } + + # Create a new 'session', lose controlling terminal. + if ( POSIX::setsid() == -1 ) { + warn "setsid() failed, strange behavior may result: $!\r\n" if $^W; + } + + if ( open( \*DEVTTY, "/dev/tty" ) ) { + warn "Could not disconnect from controlling terminal?!\n" if $^W; + close \*DEVTTY; + } + + # now open slave, this should set it as controlling tty on some systems + my $ttyname = ${*$self}{'io_pty_ttyname'}; + my $slv = new IO::Tty; + $slv->open( $ttyname, O_RDWR ) + or croak "Cannot open slave $ttyname: $!"; + + if ( not exists ${*$self}{'io_pty_slave'} ) { + ${*$self}{'io_pty_slave'} = $slv; + } + else { + $slv->close; + } - my $self = shift; - local(*DEVTTY); + # Acquire a controlling terminal if this doesn't happen automatically + if ( not open( \*DEVTTY, "/dev/tty" ) ) { + if ( defined TIOCSCTTY ) { + if ( not defined ioctl( ${*$self}{'io_pty_slave'}, TIOCSCTTY, 0 ) ) { + warn "warning: TIOCSCTTY failed, slave might not be set as controlling terminal: $!" if $^W; + } + } + elsif ( defined TCSETCTTY ) { + if ( not defined ioctl( ${*$self}{'io_pty_slave'}, TCSETCTTY, 0 ) ) { + warn "warning: TCSETCTTY failed, slave might not be set as controlling terminal: $!" if $^W; + } + } + else { + warn "warning: You have neither TIOCSCTTY nor TCSETCTTY on your system\n" if $^W; + return 0; + } + } + + if ( not open( \*DEVTTY, "/dev/tty" ) ) { + warn "Error: could not connect pty as controlling terminal!\n"; + return undef; + } + else { + close \*DEVTTY; + } - # loose controlling terminal explicitly - if (defined TIOCNOTTY) { - if (open (\*DEVTTY, "/dev/tty")) { - ioctl( \*DEVTTY, TIOCNOTTY, 0 ); - close \*DEVTTY; - } - } - - # Create a new 'session', lose controlling terminal. - if (POSIX::setsid() == -1) { - warn "setsid() failed, strange behavior may result: $!\r\n" if $^W; - } - - if (open(\*DEVTTY, "/dev/tty")) { - warn "Could not disconnect from controlling terminal?!\n" if $^W; - close \*DEVTTY; - } - - # now open slave, this should set it as controlling tty on some systems - my $ttyname = ${*$self}{'io_pty_ttyname'}; - my $slv = new IO::Tty; - $slv->open($ttyname, O_RDWR) - or croak "Cannot open slave $ttyname: $!"; - - if (not exists ${*$self}{'io_pty_slave'}) { - ${*$self}{'io_pty_slave'} = $slv; - } else { - $slv->close; - } - - # Acquire a controlling terminal if this doesn't happen automatically - if (not open(\*DEVTTY, "/dev/tty")) { - if (defined TIOCSCTTY) { - if (not defined ioctl( ${*$self}{'io_pty_slave'}, TIOCSCTTY, 0 )) { - warn "warning: TIOCSCTTY failed, slave might not be set as controlling terminal: $!" if $^W; - } - } elsif (defined TCSETCTTY) { - if (not defined ioctl( ${*$self}{'io_pty_slave'}, TCSETCTTY, 0 )) { - warn "warning: TCSETCTTY failed, slave might not be set as controlling terminal: $!" if $^W; - } - } else { - warn "warning: You have neither TIOCSCTTY nor TCSETCTTY on your system\n" if $^W; - return 0; - } - } - - if (not open(\*DEVTTY, "/dev/tty")) { - warn "Error: could not connect pty as controlling terminal!\n"; - return undef; - } else { - close \*DEVTTY; - } - - return 1; + return 1; } *clone_winsize_from = \&IO::Tty::clone_winsize_from; -*get_winsize = \&IO::Tty::get_winsize; -*set_winsize = \&IO::Tty::set_winsize; -*set_raw = \&IO::Tty::set_raw; +*get_winsize = \&IO::Tty::get_winsize; +*set_winsize = \&IO::Tty::set_winsize; +*set_raw = \&IO::Tty::set_raw; 1; @@ -155,7 +158,7 @@ =head1 VERSION -1.15 +1.16 =head1 SYNOPSIS diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/IO-Tty-1.15/README new/IO-Tty-1.16/README --- old/IO-Tty-1.15/README 1970-01-01 01:00:00.000000000 +0100 +++ new/IO-Tty-1.16/README 2021-01-22 09:02:35.000000000 +0100 @@ -0,0 +1,162 @@ +NAME + IO::Tty - Low-level allocate a pseudo-Tty, import constants. + +VERSION + 1.16 + +SYNOPSIS + use IO::Tty qw(TIOCNOTTY); + ... + # use only to import constants, see IO::Pty to create ptys. + +DESCRIPTION + "IO::Tty" is used internally by "IO::Pty" to create a pseudo-tty. You + wouldn't want to use it directly except to import constants, use + "IO::Pty". For a list of importable constants, see IO::Tty::Constant. + + Windows is now supported, but ONLY under the Cygwin environment, see + <http://sources.redhat.com/cygwin/>. + + Please note that pty creation is very system-dependend. From my + experience, any modern POSIX system should be fine. Find below a list of + systems that "IO::Tty" should work on. A more detailed table (which is + slowly getting out-of-date) is available from the project pages document + manager at SourceForge <http://sourceforge.net/projects/expectperl/>. + + If you have problems on your system and your system is listed in the + "verified" list, you probably have some non-standard setup, e.g. you + compiled your Linux-kernel yourself and disabled ptys (bummer!). Please + ask your friendly sysadmin for help. + + If your system is not listed, unpack the latest version of "IO::Tty", do + a 'perl Makefile.PL; make; make test; uname -a' and send me + (rgier...@cpan.org) the results and I'll see what I can deduce from + that. There are chances that it will work right out-of-the-box... + + If it's working on your system, please send me a short note with details + (version number, distribution, etc. 'uname -a' and 'perl -V' is a good + start; also, the output from "perl Makefile.PL" contains a lot of + interesting info, so please include that as well) so I can get an + overview. Thanks! + +VERIFIED SYSTEMS, KNOWN ISSUES + This is a list of systems that "IO::Tty" seems to work on ('make test' + passes) with comments about "features": + + * AIX 4.3 + + Returns EIO instead of EOF when the slave is closed. Benign. + + * AIX 5.x + + * FreeBSD 4.4 + + EOF on the slave tty is not reported back to the master. + + * OpenBSD 2.8 + + The ioctl TIOCSCTTY sometimes fails. This is also known in + Tcl/Expect, see http://expect.nist.gov/FAQ.html + + EOF on the slave tty is not reported back to the master. + + * Darwin 7.9.0 + + * HPUX 10.20 & 11.00 + + EOF on the slave tty is not reported back to the master. + + * IRIX 6.5 + + * Linux 2.2.x & 2.4.x + + Returns EIO instead of EOF when the slave is closed. Benign. + + * OSF 4.0 + + EOF on the slave tty is not reported back to the master. + + * Solaris 8, 2.7, 2.6 + + Has the "feature" of returning EOF just once?! + + EOF on the slave tty is not reported back to the master. + + * Windows NT/2k/XP (under Cygwin) + + When you send (print) a too long line (>160 chars) to a non-raw pty, + the call just hangs forever and even alarm() cannot get you out. + Don't complain to me... + + EOF on the slave tty is not reported back to the master. + + * z/OS + + The following systems have not been verified yet for this version, but a + previous version worked on them: + + * SCO Unix + + * NetBSD + + probably the same as the other *BSDs... + + If you have additions to these lists, please mail them to + <rgier...@cpan.org>. + +SEE ALSO + IO::Pty, IO::Tty::Constant + +MAILING LISTS + As this module is mainly used by Expect, support for it is available via + the two Expect mailing lists, expectperl-announce and + expectperl-discuss, at + + http://lists.sourceforge.net/lists/listinfo/expectperl-announce + + and + + http://lists.sourceforge.net/lists/listinfo/expectperl-discuss + +AUTHORS + Originally by Graham Barr <gb...@pobox.com>, based on the Ptty module by + Nick Ing-Simmons <n...@tiuk.ti.com>. + + Now maintained and heavily rewritten by Roland Giersig + <rgier...@cpan.org>. + + Contains copyrighted stuff from openssh v3.0p1, authored by Tatu Ylonen + <y...@cs.hut.fi>, Markus Friedl and Todd C. Miller + <todd.mil...@courtesan.com>. I also got a lot of inspiration from the + pty code in Xemacs. + +COPYRIGHT + Now all code is free software; you can redistribute it and/or modify it + under the same terms as Perl itself. + + Nevertheless the above AUTHORS retain their copyrights to the various + parts and want to receive credit if their source code is used. See the + source for details. + +DISCLAIMER + THIS SOFTWARE IS PROVIDED ``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 AUTHORS 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. + + In other words: Use at your own risk. Provided as is. Your mileage may + vary. Read the source, Luke! + + And finally, just to be sure: + + Any Use of This Product, in Any Manner Whatsoever, Will Increase the + Amount of Disorder in the Universe. Although No Liability Is Implied + Herein, the Consumer Is Warned That This Process Will Ultimately Lead to + the Heat Death of the Universe. + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/IO-Tty-1.15/README.md new/IO-Tty-1.16/README.md --- old/IO-Tty-1.15/README.md 2020-11-03 23:10:00.000000000 +0100 +++ new/IO-Tty-1.16/README.md 1970-01-01 01:00:00.000000000 +0100 @@ -1,172 +0,0 @@ -[](https://github.com/toddr/IO-Tty/actions) [](https://github.com/toddr/IO-Tty/actions) - -# NAME - -IO::Tty - Low-level allocate a pseudo-Tty, import constants. - -# VERSION - -1.13\_01 - -# SYNOPSIS - - use IO::Tty qw(TIOCNOTTY); - ... - # use only to import constants, see IO::Pty to create ptys. - -# DESCRIPTION - -`IO::Tty` is used internally by `IO::Pty` to create a pseudo-tty. -You wouldn't want to use it directly except to import constants, use -`IO::Pty`. For a list of importable constants, see -[IO::Tty::Constant](https://metacpan.org/pod/IO::Tty::Constant). - -Windows is now supported, but ONLY under the Cygwin -environment, see [http://sources.redhat.com/cygwin/](http://sources.redhat.com/cygwin/). - -Please note that pty creation is very system-dependend. From my -experience, any modern POSIX system should be fine. Find below a list -of systems that `IO::Tty` should work on. A more detailed table -(which is slowly getting out-of-date) is available from the project -pages document manager at SourceForge -[http://sourceforge.net/projects/expectperl/](http://sourceforge.net/projects/expectperl/). - -If you have problems on your system and your system is listed in the -"verified" list, you probably have some non-standard setup, e.g. you -compiled your Linux-kernel yourself and disabled ptys (bummer!). -Please ask your friendly sysadmin for help. - -If your system is not listed, unpack the latest version of `IO::Tty`, -do a `'perl Makefile.PL; make; make test; uname -a'` and send me -(`rgier...@cpan.org`) the results and I'll see what I can deduce from -that. There are chances that it will work right out-of-the-box... - -If it's working on your system, please send me a short note with -details (version number, distribution, etc. 'uname -a' and 'perl -V' -is a good start; also, the output from "perl Makefile.PL" contains a -lot of interesting info, so please include that as well) so I can get -an overview. Thanks! - -# VERIFIED SYSTEMS, KNOWN ISSUES - -This is a list of systems that `IO::Tty` seems to work on ('make -test' passes) with comments about "features": - -- AIX 4.3 - - Returns EIO instead of EOF when the slave is closed. Benign. - -- AIX 5.x -- FreeBSD 4.4 - - EOF on the slave tty is not reported back to the master. - -- OpenBSD 2.8 - - The ioctl TIOCSCTTY sometimes fails. This is also known in - Tcl/Expect, see http://expect.nist.gov/FAQ.html - - EOF on the slave tty is not reported back to the master. - -- Darwin 7.9.0 -- HPUX 10.20 & 11.00 - - EOF on the slave tty is not reported back to the master. - -- IRIX 6.5 -- Linux 2.2.x & 2.4.x - - Returns EIO instead of EOF when the slave is closed. Benign. - -- OSF 4.0 - - EOF on the slave tty is not reported back to the master. - -- Solaris 8, 2.7, 2.6 - - Has the "feature" of returning EOF just once?! - - EOF on the slave tty is not reported back to the master. - -- Windows NT/2k/XP (under Cygwin) - - When you send (print) a too long line (>160 chars) to a non-raw pty, - the call just hangs forever and even alarm() cannot get you out. - Don't complain to me... - - EOF on the slave tty is not reported back to the master. - -- z/OS - -The following systems have not been verified yet for this version, but -a previous version worked on them: - -- SCO Unix -- NetBSD - - probably the same as the other \*BSDs... - -If you have additions to these lists, please mail them to -<`rgier...@cpan.org`>. - -# SEE ALSO - -[IO::Pty](https://metacpan.org/pod/IO::Pty), [IO::Tty::Constant](https://metacpan.org/pod/IO::Tty::Constant) - -# MAILING LISTS - -As this module is mainly used by Expect, support for it is available -via the two Expect mailing lists, expectperl-announce and -expectperl-discuss, at - - http://lists.sourceforge.net/lists/listinfo/expectperl-announce - -and - - http://lists.sourceforge.net/lists/listinfo/expectperl-discuss - -# AUTHORS - -Originally by Graham Barr <`gb...@pobox.com`>, based on the -Ptty module by Nick Ing-Simmons <`n...@tiuk.ti.com`>. - -Now maintained and heavily rewritten by Roland Giersig -<`rgier...@cpan.org`>. - -Contains copyrighted stuff from openssh v3.0p1, authored by Tatu -Ylonen <y...@cs.hut.fi>, Markus Friedl and Todd C. Miller -<todd.mil...@courtesan.com>. I also got a lot of inspiration from -the pty code in Xemacs. - -# COPYRIGHT - -Now all code is free software; you can redistribute it and/or modify -it under the same terms as Perl itself. - -Nevertheless the above AUTHORS retain their copyrights to the various -parts and want to receive credit if their source code is used. -See the source for details. - -# DISCLAIMER - -THIS SOFTWARE IS PROVIDED \`\`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 AUTHORS 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. - -In other words: Use at your own risk. Provided as is. Your mileage -may vary. Read the source, Luke! - -And finally, just to be sure: - -Any Use of This Product, in Any Manner Whatsoever, Will Increase the -Amount of Disorder in the Universe. Although No Liability Is Implied -Herein, the Consumer Is Warned That This Process Will Ultimately Lead -to the Heat Death of the Universe. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/IO-Tty-1.15/Tty.pm new/IO-Tty-1.16/Tty.pm --- old/IO-Tty-1.15/Tty.pm 2020-11-03 23:10:00.000000000 +0100 +++ new/IO-Tty-1.16/Tty.pm 2021-01-22 09:02:35.000000000 +0100 @@ -3,7 +3,8 @@ package IO::Tty; -use strict; use warnings; +use strict; +use warnings; use IO::Handle; use IO::File; use IO::Tty::Constant; @@ -14,12 +15,12 @@ use vars qw(@ISA $VERSION $XS_VERSION $CONFIG $DEBUG); -$VERSION = '1.15'; -$XS_VERSION = "1.15"; -@ISA = qw(IO::Handle); +$VERSION = '1.16'; +$XS_VERSION = "1.16"; +@ISA = qw(IO::Handle); eval { local $^W = 0; undef local $SIG{__DIE__}; require IO::Stty }; -push @ISA, "IO::Stty" if (not $@); # if IO::Stty is installed +push @ISA, "IO::Stty" if ( not $@ ); # if IO::Stty is installed BOOT_XS: { # If I inherit DynaLoader then I inherit AutoLoader and I DON'T WANT TO @@ -29,21 +30,22 @@ *dl_load_flags = DynaLoader->can('dl_load_flags'); do { - defined(&bootstrap) - ? \&bootstrap - : \&DynaLoader::bootstrap - }->(__PACKAGE__); + defined(&bootstrap) + ? \&bootstrap + : \&DynaLoader::bootstrap; + } + ->(__PACKAGE__); } sub import { - IO::Tty::Constant->export_to_level(1, @_); + IO::Tty::Constant->export_to_level( 1, @_ ); } sub open { - my($tty,$dev,$mode) = @_; + my ( $tty, $dev, $mode ) = @_; - IO::File::open($tty,$dev,$mode) or - return undef; + IO::File::open( $tty, $dev, $mode ) + or return undef; $tty->autoflush; @@ -51,64 +53,63 @@ } sub clone_winsize_from { - my ($self, $fh) = @_; - croak "Given filehandle is not a tty in clone_winsize_from, called" - if not POSIX::isatty($fh); - return 1 if not POSIX::isatty($self); # ignored for master ptys - my $winsize = " "x1024; # preallocate memory - ioctl($fh, &IO::Tty::Constant::TIOCGWINSZ, $winsize) - and ioctl($self, &IO::Tty::Constant::TIOCSWINSZ, $winsize) + my ( $self, $fh ) = @_; + croak "Given filehandle is not a tty in clone_winsize_from, called" + if not POSIX::isatty($fh); + return 1 if not POSIX::isatty($self); # ignored for master ptys + my $winsize = " " x 1024; # preallocate memory + ioctl( $fh, &IO::Tty::Constant::TIOCGWINSZ, $winsize ) + and ioctl( $self, &IO::Tty::Constant::TIOCSWINSZ, $winsize ) and return 1; - warn "clone_winsize_from: error: $!" if $^W; - return undef; + warn "clone_winsize_from: error: $!" if $^W; + return undef; } # ioctl() doesn't tell us how long the structure is, so we'll have to trim it # after TIOCGWINSZ -my $SIZEOF_WINSIZE = length IO::Tty::pack_winsize(0,0,0,0); +my $SIZEOF_WINSIZE = length IO::Tty::pack_winsize( 0, 0, 0, 0 ); sub get_winsize { - my $self = shift; - ioctl($self, IO::Tty::Constant::TIOCGWINSZ(), my $winsize = q<>) - or croak "Cannot TIOCGWINSZ - $!"; - substr($winsize, $SIZEOF_WINSIZE) = ""; - return IO::Tty::unpack_winsize($winsize); + my $self = shift; + ioctl( $self, IO::Tty::Constant::TIOCGWINSZ(), my $winsize = q<> ) + or croak "Cannot TIOCGWINSZ - $!"; + substr( $winsize, $SIZEOF_WINSIZE ) = ""; + return IO::Tty::unpack_winsize($winsize); } sub set_winsize { - my $self = shift; - my $winsize = IO::Tty::pack_winsize(@_); - ioctl($self, IO::Tty::Constant::TIOCSWINSZ(), $winsize) - or croak "Cannot TIOCSWINSZ - $!"; + my $self = shift; + my $winsize = IO::Tty::pack_winsize(@_); + ioctl( $self, IO::Tty::Constant::TIOCSWINSZ(), $winsize ) + or croak "Cannot TIOCSWINSZ - $!"; } sub set_raw($) { - require POSIX; - my $self = shift; - return 1 if not POSIX::isatty($self); - my $ttyno = fileno($self); - my $termios = new POSIX::Termios; - unless ($termios) { - warn "set_raw: new POSIX::Termios failed: $!"; - return undef; - } - unless ($termios->getattr($ttyno)) { - warn "set_raw: getattr($ttyno) failed: $!"; - return undef; - } - $termios->setiflag(0); - $termios->setoflag(0); - $termios->setlflag(0); - $termios->setcc(&POSIX::VMIN, 1); - $termios->setcc(&POSIX::VTIME, 0); - unless ($termios->setattr($ttyno, &POSIX::TCSANOW)) { - warn "set_raw: setattr($ttyno) failed: $!"; - return undef; - } - return 1; + require POSIX; + my $self = shift; + return 1 if not POSIX::isatty($self); + my $ttyno = fileno($self); + my $termios = new POSIX::Termios; + unless ($termios) { + warn "set_raw: new POSIX::Termios failed: $!"; + return undef; + } + unless ( $termios->getattr($ttyno) ) { + warn "set_raw: getattr($ttyno) failed: $!"; + return undef; + } + $termios->setiflag(0); + $termios->setoflag(0); + $termios->setlflag(0); + $termios->setcc( &POSIX::VMIN, 1 ); + $termios->setcc( &POSIX::VTIME, 0 ); + unless ( $termios->setattr( $ttyno, &POSIX::TCSANOW ) ) { + warn "set_raw: setattr($ttyno) failed: $!"; + return undef; + } + return 1; } - 1; __END__ @@ -119,7 +120,7 @@ =head1 VERSION -1.15 +1.16 =head1 SYNOPSIS diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/IO-Tty-1.15/t/pty_get_winsize.t new/IO-Tty-1.16/t/pty_get_winsize.t --- old/IO-Tty-1.15/t/pty_get_winsize.t 2020-11-03 23:10:00.000000000 +0100 +++ new/IO-Tty-1.16/t/pty_get_winsize.t 2021-01-22 09:02:35.000000000 +0100 @@ -6,10 +6,10 @@ use Test::More; if ( $^O =~ m!^(solaris|nto)$! ) { - plan skip_all => 'Problems on Solaris and QNX with this test'; + plan skip_all => 'Problems on Solaris and QNX with this test'; } else { - plan tests => 1; + plan tests => 1; } use IO::Pty (); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/IO-Tty-1.15/t/test.t new/IO-Tty-1.16/t/test.t --- old/IO-Tty-1.15/t/test.t 2020-11-03 23:10:00.000000000 +0100 +++ new/IO-Tty-1.16/t/test.t 2021-01-22 09:02:35.000000000 +0100 @@ -30,29 +30,29 @@ close STDIN; close STDOUT; my $master = new IO::Pty; - my $slave = $master->slave(); - + my $slave = $master->slave(); + my $master_fileno = $master->fileno; - my $slave_fileno = $slave->fileno; - + my $slave_fileno = $slave->fileno; + $master->close(); - if ($master_fileno < 3 or $slave_fileno < 3) { # altered - die("ERROR: masterfd=$master_fileno, slavefd=$slave_fileno"); # altered + if ( $master_fileno < 3 or $slave_fileno < 3 ) { # altered + die("ERROR: masterfd=$master_fileno, slavefd=$slave_fileno"); # altered } exit(0); } is( wait, $pid, "fork exits with 0 exit code" ) or die("Wrong child"); - is( $?, 0, "0 exit code from forked child - Checking that returned fd's don't clash with stdin/out/err" ); + is( $?, 0, "0 exit code from forked child - Checking that returned fd's don't clash with stdin/out/err" ); } { diag(" === Checking if child gets pty as controlling terminal"); - + my $master = new IO::Pty; pipe( FROM_CHILD, TO_PARENT ) - or die "Cannot create pipe: $!"; + or die "Cannot create pipe: $!"; my $pid = fork(); die "Cannot fork" if not defined $pid; unless ($pid) { @@ -85,11 +85,11 @@ close FROM_CHILD; my ( $s, $chunk ); - $SIG{ALRM} = sub { die("Timeout ($s)");}; + $SIG{ALRM} = sub { die("Timeout ($s)"); }; alarm(10); sysread( $master, $s, 100 ) or die "sysread() failed: $!"; - like($s, qr/gimme.*:/ , "master object outputs: '$s'"); + like( $s, qr/gimme.*:/, "master object outputs: '$s'" ); print $master "seems OK!\n"; @@ -98,7 +98,7 @@ while ( $ret = sysread( $master, $chunk, 100 ) ) { $s .= $chunk; } - like($s, qr/back on STDOUT: SEEMS OK!/, "STDOUT looks right"); + like( $s, qr/back on STDOUT: SEEMS OK!/, "STDOUT looks right" ); warn <<"_EOT_" unless defined $ret; WARNING: when the client closes the slave pty, the master gets an error @@ -113,15 +113,18 @@ } # now for the echoback tests -diag("Checking basic functionality and how your ptys handle large strings... +diag( + "Checking basic functionality and how your ptys handle large strings... This test may hang on certain systems, even though it is protected - by alarm(). If the counter stops, try Ctrl-C, the test should continue."); + by alarm(). If the counter stops, try Ctrl-C, the test should continue." +); { - my $randstring = q{fakjdf ijj845jtirg\r8e 4jy8 gfuoyhj\agt8h\0x00 gues98\0xFF 45th guoa\beh gt98hae 45t8u ha8rhg ue4ht 8eh tgo8he4 t8 gfj aoingf9a8hgf uain dgkjadshft+uehgf =us??and9??87vgh afugh 8*h 98H 978H 7HG zG 86G (&g (O/g &(GF(/EG F78G F87SG F(/G F(/a sldjkf ha\@j<\rksdhf jk>~|ahsd fjkh asdHJKGDSG TRJKSGO JGDSFJDFHJGSDK1%&FJGSDGFSH\0xADJ??DGFljkhf lakjs(dh fkjahs djfk hasjkdh fjklahs dfkjhdjkf ha??jksdh fkjah sdjf)\$/??&k has??????jkdh fkjhuerhtuwe htui eruth ZI AHD BIZA Di7GH )/g98 9 97 86tr(& TA&(t 6t &T 75r 5\$R%/4r76 5&/% R79 5 )/&}; + my $randstring = + q{fakjdf ijj845jtirg\r8e 4jy8 gfuoyhj\agt8h\0x00 gues98\0xFF 45th guoa\beh gt98hae 45t8u ha8rhg ue4ht 8eh tgo8he4 t8 gfj aoingf9a8hgf uain dgkjadshft+uehgf =us??and9??87vgh afugh 8*h 98H 978H 7HG zG 86G (&g (O/g &(GF(/EG F78G F87SG F(/G F(/a sldjkf ha\@j<\rksdhf jk>~|ahsd fjkh asdHJKGDSG TRJKSGO JGDSFJDFHJGSDK1%&FJGSDGFSH\0xADJ??DGFljkhf lakjs(dh fkjahs djfk hasjkdh fjklahs dfkjhdjkf ha??jksdh fkjah sdjf)\$/??&k has??????jkdh fkjhuerhtuwe htui eruth ZI AHD BIZA Di7GH )/g98 9 97 86tr(& TA&(t 6t &T 75r 5\$R%/4r76 5&/% R79 5 )/&}; my $master = new IO::Pty; - diag("isatty(\$master): ", POSIX::isatty($master) ? "YES" : "NO"); + diag( "isatty(\$master): ", POSIX::isatty($master) ? "YES" : "NO" ); if ( POSIX::isatty($master) ) { $master->set_raw() or warn "warning: \$master->set_raw(): $!"; @@ -137,7 +140,7 @@ my $c; my $slave = $master->slave(); close $master; - diag("isatty(\$slave): ", POSIX::isatty($slave) ? "YES" : "NO"); + diag( "isatty(\$slave): ", POSIX::isatty($slave) ? "YES" : "NO" ); $slave->set_raw() or warn "warning: \$slave->set_raw(): $!"; close FROM_CHILD; @@ -148,7 +151,7 @@ while (1) { my $ret = sysread( $slave, $c, 1 ); - warn "sysread(): $!" unless defined $ret; + warn "sysread(): $!" unless defined $ret; die "Slave got EOF at line $linecnt, byte $cnt.\n" unless $ret; $cnt++; if ( $c eq "\n" ) { @@ -229,10 +232,9 @@ else { diag("Good, your raw ptys can handle at least $maxlen bytes at once."); } - ok( $maxlen >= 200, "\$maxlen >= 200 ($maxlen)"); + ok( $maxlen >= 200, "\$maxlen >= 200 ($maxlen)" ); close($master); sleep(1); kill TERM => $pid; } -