This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Change POSIX::Termios::setattr() to default to TCASNOW, not 0.
authorNicholas Clark <nick@ccl4.org>
Mon, 12 Sep 2011 12:11:05 +0000 (14:11 +0200)
committerNicholas Clark <nick@ccl4.org>
Tue, 13 Sep 2011 09:28:13 +0000 (11:28 +0200)
0 isn't valid on all operating systems. TCASNOW has the value 0 on most
operating systems, but on Solaris (at least) TCASNOW, TCSADRAIN and
TCSAFLUSH have the same values as the equivalent ioctls, TCSETS, TCSETSW and
TCSETSF. Solaris faults 0, setting errno to EINVAL. This isn't useful as a
default behaviour.

ext/POSIX/POSIX.xs
pod/perldelta.pod

index 392f35f..2737559 100644 (file)
@@ -841,12 +841,19 @@ getattr(termios_ref, fd = 0)
     OUTPUT:
        RETVAL
 
+#ifndef TCSANOW
+#  define TCSANOW 0
+#endif
 SysRet
-setattr(termios_ref, fd = 0, optional_actions = 0)
+setattr(termios_ref, fd = 0, optional_actions = TCSANOW)
        POSIX::Termios  termios_ref
        int             fd
        int             optional_actions
     CODE:
+       /* The second argument to the call is mandatory, but we'd like to give
+          it a useful default. 0 isn't valid on all operating systems - on
+          Solaris (at least) TCSANOW, TCSADRAIN and TCSAFLUSH have the same
+          values as the equivalent ioctls, TCSETS, TCSETSW and TCSETSF.  */
        RETVAL = tcsetattr(fd, optional_actions, termios_ref);
     OUTPUT:
        RETVAL
index 1be1a73..015c828 100644 (file)
@@ -288,6 +288,10 @@ the number of lines, with no change in functionality. The XS code has
 been refactored to reduce the size of the shared object by about 12%,
 with no change in functionality. More POSIX functions now have tests.
 
+C<POSIX::Termios::setattr> now defaults the third argument to C<TCSANOW>,
+instead of 0. On most platforms C<TCSANOW> is defined as 0, but on some
+0 is not a valid parameter, which caused a call with defaults to fail.
+
 =item *
 
 L<XSLoader> has been upgraded from version 0.15 to version 0.16.