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

    +143

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    string=(char*)malloc(N);
     k=fread(string,sizeof(char),N,f);
     while (k==N)
     {
     free(string);
     N=N*2;
     rewind(f);//возращает в начало файла
     string =(char*)malloc(N);
     k=fread(string,sizeof(char),N,f);
     }
     fclose (f);

    Сегодня зачоты ставил...
    студенты читают из файла. В буфер. Я придираюсь к тому, что размер файла может быть больше размера буфера....

    Исправили...

    klavdiev, 22 Декабря 2013

    Комментарии (106)
  2. Си / Говнокод #14248

    +143

    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
    const int index64[64] = {
        0,  1, 48,  2, 57, 49, 28,  3,
       61, 58, 50, 42, 38, 29, 17,  4,
       62, 55, 59, 36, 53, 51, 43, 22,
       45, 39, 33, 30, 24, 18, 12,  5,
       63, 47, 56, 27, 60, 41, 37, 16,
       54, 35, 52, 21, 44, 32, 23, 11,
       46, 26, 40, 15, 34, 20, 31, 10,
       25, 14, 19,  9, 13,  8,  7,  6
    };
     
    /**
     * bitScanForward
     * @author Martin Läuter (1997)
     *         Charles E. Leiserson
     *         Harald Prokop
     *         Keith H. Randall
     * "Using de Bruijn Sequences to Index a 1 in a Computer Word"
     * @param bb bitboard to scan
     * @precondition bb != 0
     * @return index (0..63) of least significant one bit
     */
    int bitScanForward(U64 bb) {
       assert (bb != 0);
       return index64[((bb & -bb) * 0x03f79d71b4cb0a89) >> 58];
    }

    нашёл на кывте

    TarasB, 19 Декабря 2013

    Комментарии (96)
  3. Си / Говнокод #14236

    +141

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    if (connfailed) {
    			KSOCKET_CALLBACK(so, disconnected, error);
    		} else {
    			KSOCKET_CALLBACK(so, connectfailed, error);
    		}

    https://github.com/joyent/illumos-joyent/blob/master/usr/src/uts/common/fs/sockfs/socknotify.c

    myaut, 17 Декабря 2013

    Комментарии (8)
  4. Си / Говнокод #14224

    +135

    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
    void permutate(int a[10], int n) {
        // God bless mr. Donald E. Knuth;
        // Tons of oil to English bell ringers!
    
        // WARNING: It's dangerous to go alone, take this^H read this shit
        int c[10], o[10], j, s, q;
        for (j = 1; j <= n; j++) {
            c[j] = 0;
            o[j] = 1;
        }
        while (1) {
            check(a, n);
            j = n;
            s = 0;
            while (1) {
                do {
                    q = c[j] + o[j];
                    if (q < 0) { o[j] = -o[j]; --j; }
                } while (q < 0);
                if (q == j) {
                    if (j == 1) return; else ++s;
                    o[j] = -o[j];
                    --j;
                    continue;
                }
                int t = a[j - c[j] + s];
                a[j - c[j] + s] = a[j - q + s];
                a[j - q + s] = t;
                c[j] = q;
                break;
            }
        }
    }

    Реализация алгоратма "простых изменений" по описанию из Кнута (т4. Комбинаторный поиск, генерация всех перестановок).
    Напрашивающиеся goto раздражают, было бы приятно увидеть менее пахучие реализации. Не смог нагуглить, забугорного названия этого алгоритма не знаю, а про "простые изменения" тинай вики молчит.

    vistefan, 13 Декабря 2013

    Комментарии (95)
  5. Си / Говнокод #14174

    +139

    1. 1
    2. 2
    byteL = (length & (0x00ff));
    byteH = (length - byteL)>>BITS_IN_BYTE;

    Вдруг биты справа полезут прямо из компьютера, давайте вычтем!
    Макрос BITS_IN_BYTE особенно радует!

    sermp, 04 Декабря 2013

    Комментарии (19)
  6. Си / Говнокод #14152

    +130

    1. 1
    http://ithappens.ru/story/11670

    TarasB, 28 Ноября 2013

    Комментарии (106)
  7. Си / Говнокод #14142

    +139

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    // drivers/usb/serial/cp210x.c
    
    static void cp210x_close(struct usb_serial_port *port)
    {
            usb_serial_generic_close(port);
            cp210x_set_config_single(port, CP210X_IFC_ENABLE, UART_DISABLE);
    }

    Дело было так.

    На прошлой неделе, по просьбе одного знакомого, я сел писать прошивку для attiny2313, которая должна принять по RS-232 строчку и исполнить соответствующую команду. Потратив несколько минут на раскур даташита, а именно главы, посвященной USART, я набросал тупейший код на сях, залил его на чип, и затестил через миником. Все работало нормально, ничто не предвещало беды...

    Но когда я попробовал послать команду через echo, меня ждал облом. Она не выполнилась. На 10 раз проверил код - все ок, в миникоме пашет идеально, через echo - куй. Под виндой та же ересь. Чем отличается echo от миникома? Правильно, тем, что оно отправляет символы подряд, без пауз. Контроллер тактировался от внутренного генератора, поэтому я подумал, что оный хреново откалиброван, и что надо бы его настроить... Вечер ушел на написание прошивки для калибровки... Оказалось, что частота действительно уплыла на 2% от расчетной, что некритично. Ну да пофиг, откалибровался до +-0.5%. Запустил echo - куй. Послал все нахрен, и пошел спать...

    (Продолжение в комменте ниже)

    bormand, 26 Ноября 2013

    Комментарии (49)
  8. Си / Говнокод #14137

    +135

    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
    static int
    wl_iw_get_country(
            struct net_device *dev,
            struct iw_request_info *info,
            union iwreq_data *wrqu,
            char *extra
    )
    {
    	char *ccode;
    	int current_channels;
    	
    	WL_TRACE(("%s\n", __FUNCTION__));
    
    	ccode = dhd_bus_country_get(dev);
    	if(ccode){
    		if(0 == strcmp(ccode, "Q2"))
    			current_channels = 11;
    		else if(0 == strcmp(ccode, "EU"))
    			current_channels = 13;
    		else if(0 == strcmp(ccode, "JP"))
    			current_channels = 14;
    	}
    	sprintf(extra, "Scan-Channels = %d", current_channels);
    	printk("Get Channels return %d,(country code = %s)\n",current_channels, ccode);	
    	return 0;
    }

    На этот раз отличился броадком.
    Подсказка: Пользователи с кантри-кодом RU должны СТРАДАТЬ!

    Necromant, 25 Ноября 2013

    Комментарии (41)
  9. Си / Говнокод #14136

    +136

    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
    /*
     * Just a wifi driver hooker.
     *
     * Yongle Lai @ 2009-05-10 @ Rockchip
     */
    
    #include <linux/init.h>
    #include <linux/module.h>
    #include <linux/kernel.h>
    
    MODULE_LICENSE("Dual BSD/GPL");
    
    #ifdef CONFIG_MODVERSIONS
    #define MODVERSIONS
    #include <linux/modversions.h>
    #endif 
    
    //#define OLD_WIFI_IFACE
    
    #ifdef OLD_WIFI_IFACE
    extern int mv88w8686_if_sdio_init_module(void);
    extern void mv88w8686_if_sdio_exit_module(void);
    #else
    extern int rockchip_wifi_init_module(void);
    extern void rockchip_wifi_exit_module(void);
    #endif
    
    static int wifi_launcher_init(void) 
    {
      int ret;
    
      printk("=======================================================\n");
      printk("==== Launching Wi-Fi driver! (Powered by Rockchip) ====\n");
      printk("=======================================================\n");
    
    #ifdef OLD_WIFI_IFACE
      ret = mv88w8686_if_sdio_init_module();
      if (ret) /* Try again */
            ret = mv88w8686_if_sdio_init_module();
    #else
      ret = rockchip_wifi_init_module();
      //if (ret) /* Try again */
      //    ret = rockchip_wifi_init_module();
    #endif
    
      return ret;
    }
    
    static void wifi_launcher_exit(void) 
    {
      printk("=======================================================\n");
      printk("== Dis-launching Wi-Fi driver! (Powered by Rockchip) ==\n");
      printk("=======================================================\n");
    
    #ifdef OLD_WIFI_IFACE
      mv88w8686_if_sdio_exit_module();
    #else
      rockchip_wifi_exit_module();
    #endif
    }
    
    module_init(wifi_launcher_init);
    module_exit(wifi_launcher_exit);

    Вот так вот, просто и незатейливо на RK3188 включается и выключается вайфай.

    Necromant, 25 Ноября 2013

    Комментарии (4)
  10. Си / Говнокод #14135

    +136

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    int rkwifi_set_country_code(char *code)
    {
    	sprintf(code, "%s", "EU");
    	return 0;
    }

    Где-то в сырцах драйвера вайфая от RK3188...

    Necromant, 25 Ноября 2013

    Комментарии (2)