Deleted Added
full compact
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 ---