Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/um/os-Linux/tty.c
26424 views
1
// SPDX-License-Identifier: GPL-2.0
2
/*
3
* Copyright (C) 2002 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
4
*/
5
6
#include <stdlib.h>
7
#include <unistd.h>
8
#include <errno.h>
9
#include <fcntl.h>
10
#include <kern_util.h>
11
#include <os.h>
12
13
struct grantpt_info {
14
int fd;
15
int res;
16
int err;
17
};
18
19
static void grantpt_cb(void *arg)
20
{
21
struct grantpt_info *info = arg;
22
23
info->res = grantpt(info->fd);
24
info->err = errno;
25
}
26
27
int get_pty(void)
28
{
29
struct grantpt_info info;
30
int fd, err;
31
32
fd = open("/dev/ptmx", O_RDWR);
33
if (fd < 0) {
34
err = -errno;
35
printk(UM_KERN_ERR "get_pty : Couldn't open /dev/ptmx - "
36
"err = %d\n", errno);
37
return err;
38
}
39
40
info.fd = fd;
41
initial_thread_cb(grantpt_cb, &info);
42
43
if (info.res < 0) {
44
err = -info.err;
45
printk(UM_KERN_ERR "get_pty : Couldn't grant pty - "
46
"errno = %d\n", -info.err);
47
goto out;
48
}
49
50
if (unlockpt(fd) < 0) {
51
err = -errno;
52
printk(UM_KERN_ERR "get_pty : Couldn't unlock pty - "
53
"errno = %d\n", errno);
54
goto out;
55
}
56
return fd;
57
out:
58
close(fd);
59
return err;
60
}
61
62