Annotation of linux/fs/char_dev.c, revision 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.