Annotation of linux/fs/char_dev.c, revision 1.1.1.1

1.1       root        1: #include <errno.h>
                      2: 
                      3: #include <linux/sched.h>
                      4: #include <linux/kernel.h>
                      5: 
                      6: extern int tty_read(unsigned minor,char * buf,int count);
                      7: extern int tty_write(unsigned minor,char * buf,int count);
                      8: 
                      9: static int rw_ttyx(int rw,unsigned minor,char * buf,int count);
                     10: static int rw_tty(int rw,unsigned minor,char * buf,int count);
                     11: 
                     12: typedef (*crw_ptr)(int rw,unsigned minor,char * buf,int count);
                     13: 
                     14: #define NRDEVS ((sizeof (crw_table))/(sizeof (crw_ptr)))
                     15: 
                     16: static crw_ptr crw_table[]={
                     17:        NULL,           /* nodev */
                     18:        NULL,           /* /dev/mem */
                     19:        NULL,           /* /dev/fd */
                     20:        NULL,           /* /dev/hd */
                     21:        rw_ttyx,        /* /dev/ttyx */
                     22:        rw_tty,         /* /dev/tty */
                     23:        NULL,           /* /dev/lp */
                     24:        NULL};          /* unnamed pipes */
                     25: 
                     26: static int rw_ttyx(int rw,unsigned minor,char * buf,int count)
                     27: {
                     28:        return ((rw==READ)?tty_read(minor,buf,count):
                     29:                tty_write(minor,buf,count));
                     30: }
                     31: 
                     32: static int rw_tty(int rw,unsigned minor,char * buf,int count)
                     33: {
                     34:        if (current->tty<0)
                     35:                return -EPERM;
                     36:        return rw_ttyx(rw,current->tty,buf,count);
                     37: }
                     38: 
                     39: int rw_char(int rw,int dev, char * buf, int count)
                     40: {
                     41:        crw_ptr call_addr;
                     42: 
                     43:        if (MAJOR(dev)>=NRDEVS)
                     44:                panic("rw_char: dev>NRDEV");
                     45:        if (!(call_addr=crw_table[MAJOR(dev)])) {
                     46:                printk("dev: %04x\n",dev);
                     47:                panic("Trying to r/w from/to nonexistent character device");
                     48:        }
                     49:        return call_addr(rw,MINOR(dev),buf,count);
                     50: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.