Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v2.6.12-rc4 92 lines 1.9 kB view raw
1/* 2 * Copyright (C) 2001 Jeff Dike (jdike@karaya.com) 3 * Licensed under the GPL 4 */ 5 6#include <stdio.h> 7#include <termios.h> 8#include <errno.h> 9#include <unistd.h> 10#include "chan_user.h" 11#include "user_util.h" 12#include "user.h" 13#include "os.h" 14 15struct tty_chan { 16 char *dev; 17 int raw; 18 struct termios tt; 19}; 20 21static void *tty_chan_init(char *str, int device, struct chan_opts *opts) 22{ 23 struct tty_chan *data; 24 25 if(*str != ':'){ 26 printk("tty_init : channel type 'tty' must specify " 27 "a device\n"); 28 return(NULL); 29 } 30 str++; 31 32 data = um_kmalloc(sizeof(*data)); 33 if(data == NULL) 34 return(NULL); 35 *data = ((struct tty_chan) { .dev = str, 36 .raw = opts->raw }); 37 38 return(data); 39} 40 41static int tty_open(int input, int output, int primary, void *d, 42 char **dev_out) 43{ 44 struct tty_chan *data = d; 45 int fd, err; 46 47 fd = os_open_file(data->dev, of_set_rw(OPENFLAGS(), input, output), 0); 48 if(fd < 0) return(fd); 49 if(data->raw){ 50 CATCH_EINTR(err = tcgetattr(fd, &data->tt)); 51 if(err) 52 return(err); 53 54 err = raw(fd); 55 if(err) 56 return(err); 57 } 58 59 *dev_out = data->dev; 60 return(fd); 61} 62 63static int tty_console_write(int fd, const char *buf, int n, void *d) 64{ 65 struct tty_chan *data = d; 66 67 return(generic_console_write(fd, buf, n, &data->tt)); 68} 69 70struct chan_ops tty_ops = { 71 .type = "tty", 72 .init = tty_chan_init, 73 .open = tty_open, 74 .close = generic_close, 75 .read = generic_read, 76 .write = generic_write, 77 .console_write = tty_console_write, 78 .window_size = generic_window_size, 79 .free = generic_free, 80 .winch = 0, 81}; 82 83/* 84 * Overrides for Emacs so that we follow Linus's tabbing style. 85 * Emacs will notice this stuff at the end of the file and automatically 86 * adjust the settings for this buffer only. This must remain at the end 87 * of the file. 88 * --------------------------------------------------------------------------- 89 * Local variables: 90 * c-file-style: "linux" 91 * End: 92 */