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