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