1. Си / Говнокод #2332

    +131.2

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    static void module3_exit(void){        
      cdev_del(mydev);            
      printk(KERN_INFO"Device"DEV_NAME"was deleted");
    };                                               
    int mydev_open(struct inode *in,struct file *filp){                                                 
      printk(KERN_INFO DEV_NAME "open");              
      struct dev_state *dev_stat;                     
      dev_stat=&STATE[MINOR(in->i_rdev)];             
      if(dev_stat->dev_open)                          
      {                                               
        printk("Kernel: device "DEV_NAME" is exist"); 
        return -EBUSY;                                
      };                                              
      dev_stat->dev_open++;                           
      dev_stat->dev_read=0;                           
      dev_stat->dev_write=0;                          
      int num= NUM(in->i_rdev);                       
      int type=TYPE(in->i_rdev);                      
      return 0;                                       
    };                                                
    
    int mydev_ioctl(struct inode *in,struct file *filp,unsigned int ioctl,unsigned long param)
    {                                                                                         
      printk(KERN_INFO DEV_NAME "ioctl");                                                     
      return 0;                                                                               
    };                                                                                        
    
    ssize_t mydev_read(struct file *filp,char *buff,ssize_t len,loff_t pos)
    {                                                                      
      printk(KERN_INFO DEV_NAME "read");                                   
      struct inode *in;                                                    
      int count=len;                                                       
      struct dev_state *devst;                                             
      printk("Kernel: try to read %d bytes \n",len);                       
      in=filp->f_dentry->d_inode;                                          
      printk("Kernel: minor number is %d",MINOR(in->i_rdev));              
      devst=&STATE[MINOR(in->i_rdev)];                                     
      while(count--)                                                       
      {                                                                    
        put_user(inb_p(PORT_START+10*MINOR(in->i_rdev)),buff);             
        buff++;                                                            
      };                                                                   
      devst->dev_read+=len;                                                
      printk(KERN_INFO"Kernel: read "DEV_NAME" %d bytes",len);             
      return len;                                                          
    };                                                                     
                                                                           
    ssize_t mydev_write(struct file *filp, const char *buff, ssize_t len,loff_t pos)
    {
      printk(KERN_INFO DEV_NAME "write");
      struct inode *in;
      int count=len;
      unsigned char byte;
      struct dev_state *devst;
      printk(KERN_INFO"Kernel: try to write %d bytes\n",len);
      in=filp->f_dentry->d_inode;
      printk(KERN_INFO"Kernel: minor number %d\n",MINOR(in->i_rdev));
      devst=&STATE[MINOR(in->i_rdev)];
      while(count--)
      {
        get_user(byte, buff);
        outb_p(byte, PORT_START+10*MINOR(in->i_rdev));
        buff++;
      };
      devst->dev_write +=len;
      printk(KERN_INFO"Kernel: "DEV_NAME " written %d bytes\n",len);
      return len;
    };

    Модуль ядра

    Запостил: Alice, 25 Декабря 2009

    Комментарии (14) RSS

    • чьего ядра?
      Ответить
    • конечно читабельности очень мало, особенно эти printk... Но сверхговнокода я здесь не вижу как для языка C
      Ответить
    • Не силен в "ядрах" :) В чем суть?
      Ответить
    • Системный код редко бывает понятным и приятным. Тем не менее, он тоже нужен.
      Ответить
    • Помоему обычная студенческая лаба. Если каждый студенческий код выкладывать на говнокод, то не какого www.govnokod.ru не хватит...
      Ответить
      • Точно студенческая лаба. Мы такую же делали в институте. Просто пробный говнодрайвер.
        Ответить
    • Не вникал в суть кода , но -1 за оформление

      Пару энторов людям влом вставить между логическими частями. Жалко места
      Ответить
    • +1 в смысле =)
      Ответить
    • Пробелов между оператарами тоже влом поставить.
      Индус писал короче
      Ответить
      • С индусов хорошие кодеры получаются.
        Ответить
    • 17 и 18 строки
      Ответить

    Добавить комментарий