--Apple-Mail=_BE3C6EFB-D185-4C61-995A-D840D221B209
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
	charset=us-ascii

Doing more research, the existing ruby code is 99% there.

I got it to work by changing line 248 of ext/pty/pty.c from:

#if defined(I_PUSH) && !defined(__linux__)

to

#if defined(I_PUSH) && !defined(__linux__) && !defined(_AIX)

AIX has autopush which is really what the second half of the && should =
be testing.

Perry

On Nov 23, 2013, at 1:14 PM, pedz (Perry Smith) <pedz / easesoftware.com> =
wrote:

>=20
> Issue #9144 has been reported by pedz (Perry Smith).
>=20
> ----------------------------------------
> Bug #9144: ptys on AIX version 4 through 7
> https://bugs.ruby-lang.org/issues/9144
>=20
> Author: pedz (Perry Smith)
> Status: Open
> Priority: Normal
> Assignee:=20
> Category:=20
> Target version:=20
> ruby -v: ruby 2.0.0p247 (2013-06-27 revision 41674) =
[powerpc-aix6.1.0.0]
> Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN
>=20
>=20
> The best way to open a pty on AIX version 4 through 7 is using what =
they call "AT&T" mode.  The steps are to first open "/dev/ptc" which =
opens the master side.  Then to a ttyname on the file descriptor and =
open the string that is returned to open the slave side.
>=20
> cat q.c
> #include <stdio.h>
> #include <fcntl.h>
>=20
> int main(int argc, char *argv[])
> {
>  int master =3D open("/dev/ptc", O_RDWR);
>  char *slave_name =3D ttyname(master);
>  int slave =3D open(slave_name, O_RDWR);
>  int n;
>  char buf[128];
>=20
>  printf("slave name is %s\n", slave_name);
>  printf("master fd is %d, slave fd is %d\n", master, slave);
>  write(master, "blah\n", 5);
>  n =3D read(slave, buf, sizeof(buf));
>  printf("n =3D %d\n", n);
>  printf("%*.*s", n, n, buf);
>  write(slave, "foodog\n", 7);
>  n =3D read(master, buf, sizeof(buf));
>  printf("n =3D %d\n", n);
>  printf("%*.*s", n, n, buf);
>  return 0;
> }
>=20
> make q
> cc     q.c   -o q
>=20
> ./q
> slave name is /dev/pts/9
> master fd is 3, slave fd is 5
> n =3D 5
> blah
> n =3D 14
> blah
> foodog
>=20
> (Note that ECHO is set on the tty which is why we see 'blah' when the =
slave is read.)
>=20
> You can also use what the ruby code calls BSD 4.2 ptys.  On my build =
that I did as simply as possible, I'm not sure which code I got but it =
is not working.  I have several versions of Ruby and all fail with =
"can't get Master/Slave device (RuntimeError)"  While "BSD" mode is =
supported and works, the "AT&T" mode is much nicer.
>=20
> For AIX version 3, there was a similar approach but instead of =
/dev/ptc, the master was called /dev/ptm. =20
>=20
> The _IBMESA code in ext/pty/pty.c (which mentions AIX) I don't =
recognize those names.
>=20
> There is no need to push any streams modules, etc.  Everything is =
autopushed.  You might want to add in a grantpt but I'm still not clear =
when and if that is needed.
>=20
>=20
>=20
> --=20
> http://bugs.ruby-lang.org/


--Apple-Mail=_BE3C6EFB-D185-4C61-995A-D840D221B209
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
	filename=signature.asc
Content-Type: application/pgp-signature;
	name=signature.asc
Content-Description: Message signed with OpenPGP using GPGMail

-----BEGIN PGP SIGNATURE-----
Comment: GPGTools - http://gpgtools.org

iQEcBAEBAgAGBQJSkRcvAAoJEIPoMwNgGirlajsH/2rVCQ8YXu9K+1eDGcJARWYE
BAH9X+kuqovzq/EEss6hsruErAdFQTqt7RQAgyxAmq2FgBm2e/CMVSETHRjgagMh
TYl7KVkJOMt5l1GE8T1k7usAqyxkrWWQ5SlCQ3OTvTwEcQcjj5hi9Qur8nEhh1CV
/MPQDkI+VHqecKC9qOpG9IY860BBQM/2Rx+LjCeAwxOC2FyuggrI2NbtljyaAyZk
wSaGcoc1KTMEDHL/AdI6ZyA0ThlUEOOzvzJpo+SDPvRpC+OLwz4SP2LXlnoVCwJq
AzceqYZ+GaCOgCSBlu3OkWYSFMa/UqSZe9LWpTJDEiV95XFC93Ve0J6aTLazMOQ=
=2qDL
-----END PGP SIGNATURE-----

--Apple-Mail=_BE3C6EFB-D185-4C61-995A-D840D221B209--