Няшная / Говнокод #18128 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
static int card_open(struct inode *inode, struct file *f)
{
    unsigned int		minor = MINOR(inode->i_rdev);

    DEBUG(KERN_CRIT "Driver: card_open()\n");
    f->private_data = (void *)(unsigned long long)minor;

    return 0;
}

А вместо минора надобно захуярить указатель на struct some_idiot_wrote_this *asshole в f->private_data.

Запостил: codemonkey codemonkey, (Updated )

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

  • Неужели у этого драйвера из приватных для открытого хендла данных только минор?
    Ответить
    • Да. Там дальше для КАЖДОГО fops'а:
      minor = ((unsigned long long)(f->private_data) & 0xffffffff);
          dev = g_driver_dev[minor];


      Хотя, когда надо было закодировать пару чисел в другом драйвере, родил ЭТО:
      f->private_data = (void *) (((u64) i << 32) | j);
      Ответить
      • > g_driver_dev[minor]
        Мда. Можно же вот так?
        // open
        f->private_data = g_driver_dev[minor];
        // other file operations
        dev = (my_device*)f->private_data;
        Ответить
      • > (void *) (((u64) i << 32) | j);
        Прощание с 32-битными платформами?
        Ответить
        • Типа 32-бит не поддерживается в принципе. Так приказали мудаки в начальстве.

          Блять, что за хуйня с минусами, не видно ГК же.
          Ответить
          • > что за хуйня с минусами
            Это у одного местного жителя жопа горит. Из-за этого он пятнадцатью ботами минусует треды.

            Если хочешь, чтобы твой новый тред заметили - просто напиши к нему комментарий. Тут дофига народу читает сток, даже не заглядывая на главную.
            Ответить
            • >>Это у одного местного жителя

              На воре - шапка горит, а у пiдора - жOпу бомбитЪ!
              Ответить
              • И ведь предупреждали, чтобы не садился на колючие предметы...
                Ответить
  • Вопрос господам говнокодерам: Даны n PCI девайсов, в каждом 2m субдевайсов. Типа

    rooster@prison:~$ ll /dev/kokoko*
    crw-rw-rw- 1 root root 250,  0 May 10 11:46 /dev/kokoko0
    crw-rw-rw- 1 root root 251,  0 May 10 11:46 /dev/kokoko0koko0
    crw-rw-rw- 1 root root 251,  1 May 10 11:46 /dev/kokoko0kudkudah0
    crw-rw-rw- 1 root root 251,  2 May 10 11:46 /dev/kokoko0koko1
    crw-rw-rw- 1 root root 251,  3 May 10 11:46 /dev/kokoko0kudkudah1


    Есть ли смысл для каждого создавать свой cdev, или же джва cdevа на все как сейчас есть и оно работает?
    Ответить
    • Т.е. сейчас создаются /dev/kokoko0koko и /dev/kokoko0kudkudah, а сабдевайсы разруливаются через какое-нибудь поле в ioctl запросе?

      Ну хрен знает... Если с ними по-отдельности работают, и на них надо ссылаться в параметрах или конфигах - можно и растащить. А если одна юзерлендная прога работает со всей кучей одновременно - лучше не растаскивать, чтобы не править и не усложнять её.
      Ответить
      • >Eсли с ними по-отдельности работают, и на них надо ссылаться в параметрах или конфигах - можно и растащить.
        Это с /dev/kokokoXkudkudahY для любых X, Y.

        >А если одна юзерлендная прога работает со всей кучей одновременно - лучше не растаскивать, чтобы не править и не усложнять её.
        А это с /dev/kokokoX для любого X.
        Ответить
        • А, т.е. будет джва способа отправить запрос сабдевайсу?
          Ответить
          • Нет. У /dev/kokoko0kudkudah0 отключено ВСЁ кроме ioctl, а у /dev/kokoko0 ioctl коды другие. С точки зрения параши юзерленда это совершенно разные девайсы, хотя указывают на тот же физический быдлодевайс.

            Ну и конечно в /dev/kokoko0kudkudah0 есть защита от двойного open'a.
            Ответить

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

Из-за тебя ушел bormand, guest!

    А не использовать ли нам bbcode?


    8