linux/arch/um/os-Linux/tty.c
<<
>>
Prefs
   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
  13struct grantpt_info {
  14        int fd;
  15        int res;
  16        int err;
  17};
  18
  19static 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
  27int 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;
  57out:
  58        close(fd);
  59        return err;
  60}
  61