diff options
author | brian <brian@FreeBSD.org> | 1997-09-21 20:26:47 +0000 |
---|---|---|
committer | brian <brian@FreeBSD.org> | 1997-09-21 20:26:47 +0000 |
commit | 89c06caf59f100df493249d523a88407f121f5ee (patch) | |
tree | f8a83ca815fc2267800452e7b052489bdf0e3fda /usr.sbin/ppp/modem.c | |
parent | 00501fb8d78efbe4ea91a630d926204b229104a5 (diff) | |
download | FreeBSD-src-89c06caf59f100df493249d523a88407f121f5ee.zip FreeBSD-src-89c06caf59f100df493249d523a88407f121f5ee.tar.gz |
It turns out that the following:
close(1);
close(2);
x = open(ctermid(NULL), O_RDWR|O_NONBLOCK);
close(0)
on a tty causes select() to return an exception for descriptor x !
This is the case in RELENG_2_2, but not in 2.2.2. I'm not sure why.
Instead of doing the x=open() and close(0), we just do x=0 now.
Problem pointed out by: Greg Lehey <grog@lemis.com>
Tomi Vainio <tomppa@fidata.fi>
Diffstat (limited to 'usr.sbin/ppp/modem.c')
-rw-r--r-- | usr.sbin/ppp/modem.c | 19 |
1 files changed, 4 insertions, 15 deletions
diff --git a/usr.sbin/ppp/modem.c b/usr.sbin/ppp/modem.c index 35f52b2..9cd0098 100644 --- a/usr.sbin/ppp/modem.c +++ b/usr.sbin/ppp/modem.c @@ -17,7 +17,7 @@ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * $Id: modem.c,v 1.52 1997/09/16 23:15:14 brian Exp $ + * $Id: modem.c,v 1.53 1997/09/18 00:15:25 brian Exp $ * * TODO: */ @@ -442,20 +442,9 @@ OpenModem(int mode) LogPrintf(LogDEBUG, "OpenModem: Modem is already open!\n"); /* We're going back into "term" mode */ else if (mode & MODE_DIRECT) { - if (isatty(0)) { - char *dev; - modem = open(dev = ctermid(NULL), O_RDWR | O_NONBLOCK); - if (modem < 0) { - LogPrintf(LogERROR, "OpenModem(direct) failed: %s: %s\n", - dev, strerror(errno)); - return (-1); - } - LogPrintf(LogDEBUG, "OpenModem(direct): Modem is a tty\n"); - } else { - /* must be a tcp connection */ - LogPrintf(LogDEBUG, "OpenModem(direct): Modem is not a tty\n"); - return modem = dup(0); - } + LogPrintf(LogDEBUG, "OpenModem(direct): Modem is %sa tty\n", + isatty(0) ? "" : "not "); + return modem = 0; } else { if (strncmp(VarDevice, "/dev/", 5) == 0) { if ((res = uu_lock(VarBaseDevice)) != UU_LOCK_OK) { |