pty.c (121193) | pty.c (154835) |
---|---|
1/*- 2 * Copyright (c) 1990, 1993, 1994 3 * The Regents of the University of California. All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 18 unchanged lines hidden (view full) --- 27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 31 * SUCH DAMAGE. 32 */ 33 34#include <sys/cdefs.h> | 1/*- 2 * Copyright (c) 1990, 1993, 1994 3 * The Regents of the University of California. All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 18 unchanged lines hidden (view full) --- 27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 31 * SUCH DAMAGE. 32 */ 33 34#include <sys/cdefs.h> |
35__FBSDID("$FreeBSD: head/lib/libutil/pty.c 121193 2003-10-18 10:04:16Z markm $"); | 35__FBSDID("$FreeBSD: head/lib/libutil/pty.c 154835 2006-01-26 01:33:26Z cognet $"); |
36 37#if defined(LIBC_SCCS) && !defined(lint) 38#if 0 39static char sccsid[] = "@(#)pty.c 8.3 (Berkeley) 5/16/94"; 40#endif 41#endif /* LIBC_SCCS and not lint */ 42 43#include <sys/types.h> --- 4 unchanged lines hidden (view full) --- 48#include <fcntl.h> 49#include <grp.h> 50#include <libutil.h> 51#include <stdlib.h> 52#include <string.h> 53#include <termios.h> 54#include <unistd.h> 55 | 36 37#if defined(LIBC_SCCS) && !defined(lint) 38#if 0 39static char sccsid[] = "@(#)pty.c 8.3 (Berkeley) 5/16/94"; 40#endif 41#endif /* LIBC_SCCS and not lint */ 42 43#include <sys/types.h> --- 4 unchanged lines hidden (view full) --- 48#include <fcntl.h> 49#include <grp.h> 50#include <libutil.h> 51#include <stdlib.h> 52#include <string.h> 53#include <termios.h> 54#include <unistd.h> 55 |
56int __use_pts(void); 57 58static int 59new_openpty(int *amaster, int *aslave, char *name, struct termios *termp, 60 struct winsize *winp) 61{ 62 int master, slave; 63 64 master = posix_openpt(O_RDWR); 65 if (master == -1) 66 return (-1); 67 68 if (grantpt(master) == -1) { 69 close(master); 70 return (-1); 71 } 72 73 slave = open(ptsname(master), O_RDWR); 74 if (slave == -1) { 75 close(master); 76 return (-1); 77 } 78 79 if (unlockpt(master) == -1) { 80 close(master); 81 close(slave); 82 return (-1); 83 } 84 85 *amaster = master; 86 *aslave = slave; 87 88 if (name) 89 strcpy(name, ptsname(master)); 90 if (termp) 91 tcsetattr(slave, TCSAFLUSH, termp); 92 if (winp) 93 ioctl(slave, TIOCSWINSZ, (char *)winp); 94 95 return (0); 96} 97 |
|
56int 57openpty(int *amaster, int *aslave, char *name, struct termios *termp, struct winsize *winp) 58{ 59 char line[] = "/dev/ptyXX"; 60 const char *cp1, *cp2; 61 int master, slave, ttygid; 62 struct group *gr; 63 | 98int 99openpty(int *amaster, int *aslave, char *name, struct termios *termp, struct winsize *winp) 100{ 101 char line[] = "/dev/ptyXX"; 102 const char *cp1, *cp2; 103 int master, slave, ttygid; 104 struct group *gr; 105 |
106 if (__use_pts()) 107 return (new_openpty(amaster, aslave, name, termp, winp)); 108 |
|
64 if ((gr = getgrnam("tty")) != NULL) 65 ttygid = gr->gr_gid; 66 else 67 ttygid = -1; 68 69 for (cp1 = "pqrsPQRS"; *cp1; cp1++) { 70 line[8] = *cp1; 71 for (cp2 = "0123456789abcdefghijklmnopqrstuv"; *cp2; cp2++) { --- 56 unchanged lines hidden --- | 109 if ((gr = getgrnam("tty")) != NULL) 110 ttygid = gr->gr_gid; 111 else 112 ttygid = -1; 113 114 for (cp1 = "pqrsPQRS"; *cp1; cp1++) { 115 line[8] = *cp1; 116 for (cp2 = "0123456789abcdefghijklmnopqrstuv"; *cp2; cp2++) { --- 56 unchanged lines hidden --- |