X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fptsname_r.c;h=5b345f39e012e2504535d3391c9fd816a550bf63;hb=4779b635ef35c7b0bc4044fcb5bc746d06f158c4;hp=ec314c6b43b9a164e65edd6e24868dcafa16d653;hpb=d46c27a98eb3a11b60fdf76107ab96487d747ef2;p=gnulib.git diff --git a/lib/ptsname_r.c b/lib/ptsname_r.c index ec314c6b4..5b345f39e 100644 --- a/lib/ptsname_r.c +++ b/lib/ptsname_r.c @@ -1,5 +1,5 @@ /* Determine name of the slave side of a pseudo-terminal. - Copyright (C) 1998, 2002, 2010-2012 Free Software Foundation, Inc. + Copyright (C) 1998, 2002, 2010-2013 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 @@ -53,7 +53,7 @@ # include #endif -#ifdef __osf__ +#if defined _AIX || defined __osf__ /* Get ioctl(), ISPTM. */ # include /* Get the major, minor macros. */ @@ -115,7 +115,7 @@ __ptsname_r (int fd, char *buf, size_t buflen) } memcpy (buf, tmpbuf, n + 1); } -#elif defined __osf__ /* OSF/1 */ +#elif defined _AIX || defined __osf__ /* AIX, OSF/1 */ /* This implementation returns /dev/pts/N, like ptsname() does. Whereas the generic implementation below returns /dev/ttypN. Both are correct, but let's be consistent with ptsname(). */ @@ -127,11 +127,18 @@ __ptsname_r (int fd, char *buf, size_t buflen) return errno; } { + int ret; int dev; char tmpbuf[9 + 10 + 1]; int n; - dev = ioctl (fd, ISPTM, NULL); - if (dev < 0) +# ifdef _AIX + ret = ioctl (fd, ISPTM, &dev); +# endif +# ifdef __osf__ + ret = ioctl (fd, ISPTM, NULL); + dev = ret; +# endif + if (ret < 0) { errno = ENOTTY; return errno; @@ -170,7 +177,8 @@ __ptsname_r (int fd, char *buf, size_t buflen) return errno; } - buf[sizeof (_PATH_DEV) - 1] = 't'; + if (strncmp(buf, "/dev/pts/", strlen("/dev/pts/")) != 0) + buf[sizeof (_PATH_DEV) - 1] = 't'; #endif if (__stat (buf, &st) < 0)