1 /* Copyright (C) 1998 Free Software Foundation, Inc.
2    This file is part of the GNU C Library.
3    Contributed by Zack Weinberg <zack@rabi.phys.columbia.edu>, 1998.
4 
5    The GNU C Library is free software; you can redistribute it and/or
6    modify it under the terms of the GNU Lesser General Public
7    License as published by the Free Software Foundation; either
8    version 2.1 of the License, or (at your option) any later version.
9 
10    The GNU C Library is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13    Lesser General Public License for more details.
14 
15    You should have received a copy of the GNU Lesser General Public
16    License along with the GNU C Library; if not, see
17    <http://www.gnu.org/licenses/>.  */
18 
19 #include <sys/types.h>
20 #include <termios.h>
21 #include <unistd.h>
22 #include <utmp.h>
23 #include <pty.h>
24 
25 int
forkpty(int * amaster,char * name,const struct termios * termp,const struct winsize * winp)26 forkpty (int *amaster, char *name, const struct termios *termp,
27          const struct winsize *winp)
28 {
29   int master, slave, pid;
30 
31   if (openpty (&master, &slave, name, termp, winp) == -1)
32     return -1;
33 
34   switch (pid = fork ())
35     {
36     case -1:
37       return -1;
38     case 0:
39       /* Child.  */
40       close (master);
41       if (login_tty (slave))
42 	_exit (1);
43 
44       return 0;
45     default:
46       /* Parent.  */
47       *amaster = master;
48       close (slave);
49 
50       return pid;
51     }
52 }
53