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

    +139

    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
    bool aiccu_os_install(void)
    {
        /* Check if IPv6 support is available */
        if (access("/proc/net/if_inet6", F_OK))
        {
            /* Doing the modprobe doesn't guarantee success unfortunately */
            (void)system("modprobe -q ipv6 2>/dev/null >/dev/null");
    
            /* Thus test it again */
            if (access("/proc/net/if_inet6", F_OK))
            {
                dolog(LOG_ERR, "No IPv6 Stack found! Please check your kernel and module configuration\n");
                return false;
            }
        }
    
        /* Try to load modules (SIT tunnel, TUN/TAP)
         * They can be kernel builtins and there is no easy
         * way to check if they are loaded/built except for
         * trying to use them and fail at that point
         */
        (void)system("modprobe -q sit 2>/dev/null >/dev/null");
        (void)system("modprobe -q tun 2>/dev/null >/dev/null");
    
        return true;
    }

    Запостил: raorn, 27 Июня 2011

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

    • А в чём хохма? Кроме (void) в скобках.
      Ответить
      • Из /dev/null в /dev/null, может быть? Лично я не знаю, зачем это тут и для чего сию конструкцию можно использовать...
        Ответить
        • Это чтобы и stdout и stderr в null слить, правильнее писать &>/dev/null
          Ответить
          • &>/dev/null это расширение bash и работает не везде (в дебиане, например использует dash для всего неинтеррактивного).
            Ответить
      • Мне кажется должно быть что то вроде:
        bool aiccu_os_install(void)
        {
        	return !system("modprobe -q ipv6 &>/dev/null") && 
        	  !system("modprobe -q sit &>/dev/null") && 
        	  !system("modprobe -q tun &>/dev/null");
        }


        Но могу ошибаться, не пробовал использовать.
        Ответить
        • /* Doing the modprobe doesn't guarantee success unfortunately */
          Ответить
          • Sure, but doesn’t it return a non zero value in this case?
            Ответить
          • Разве lsmod не выведет загруженные модули?
            Ответить
            • Что-то вроде `lsmod | grep -E 'ipv6|sit|tun' | wc -l` да? :-)
              Ответить
              • Как вариант вполне покатит. Правда, не вспомню, потянет ли system конвейерное выполнение или нет.
                Ответить
    • показать все, что скрытоvanished
      Ответить
    • показать все, что скрытоvanished
      Ответить

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