From daf25780c53da49a0b802242d436c778043d8b56 Mon Sep 17 00:00:00 2001 From: Paul Mackerras Date: Thu, 1 Apr 1999 05:39:34 +0000 Subject: [PATCH] cope with the case where we don't have a device name when ppp_available is called. --- pppd/sys-linux.c | 54 +++++++++++++++++++++--------------------------- 1 file changed, 23 insertions(+), 31 deletions(-) diff --git a/pppd/sys-linux.c b/pppd/sys-linux.c index a5989d3..43855a9 100644 --- a/pppd/sys-linux.c +++ b/pppd/sys-linux.c @@ -1571,47 +1571,39 @@ ppp_registered(void) { int local_fd; int init_disc = -1; - int initfdflags; + int mfd = -1; + int ret = 0; - local_fd = open(devnam, O_NONBLOCK | O_RDWR, 0); - if (local_fd < 0) { - error("Failed to open %s: %m(%d)", devnam, errno); - return 0; - } - - initfdflags = fcntl(local_fd, F_GETFL); - if (initfdflags == -1) { - error("Couldn't get device fd flags: %m(%d)", errno); - close (local_fd); - return 0; + if (devnam[0] == 0) { + /* running with notty or pty option */ + char slave[16]; + if (!get_pty(&mfd, &local_fd, slave, 0)) + return 0; + } else { + local_fd = open(devnam, O_NONBLOCK | O_RDWR, 0); + if (local_fd < 0) { + error("Failed to open %s: %m(%d)", devnam, errno); + return 0; + } } - initfdflags &= ~O_NONBLOCK; - fcntl(local_fd, F_SETFL, initfdflags); /* - * Read the initial line dicipline and try to put the device into the + * Read the initial line discipline and try to put the device into the * PPP dicipline. */ if (ioctl(local_fd, TIOCGETD, &init_disc) < 0) { error("ioctl(TIOCGETD): %m(%d)", errno); - close (local_fd); - return 0; - } - - if (ioctl(local_fd, TIOCSETD, &ppp_disc) < 0) { - error("ioctl(TIOCSETD): %m(%d)", errno); - close (local_fd); - return 0; - } - - if (ioctl(local_fd, TIOCSETD, &init_disc) < 0) { - error("ioctl(TIOCSETD): %m(%d)", errno); - close (local_fd); - return 0; - } + } else if (ioctl(local_fd, TIOCSETD, &ppp_disc) < 0) { + error("ioctl(TIOCSETD(PPP)): %m(%d)", errno); + } else if (ioctl(local_fd, TIOCSETD, &init_disc) < 0) { + error("ioctl(TIOCSETD(%d)): %m(%d)", init_disc, errno); + } else + ret = 1; close (local_fd); - return 1; + if (mfd >= 0) + close(mfd); + return ret; } /******************************************************************** -- 2.39.2