1. Лучший говнокод

    В номинации:
    За время:
  2. Си / Говнокод #6156

    +141

    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
    char *toScan;
        unsigned int IP1, IP2, IP3, IP4, IPMask;
        if(argc > 1) {
            toScan = argv[1];
    
            if(sscanf(toScan, "%u.%u.%u.%u/%u", &IP1, &IP2, &IP3, &IP4, &IPMask) != 5) {
                puts("Error parsing arguments.");
                return -1;
            } else {
                if(IP1 > 255 || IP2 > 255 || IP3 > 255 || IP4 > 255 || IPMask > 32) {
                    puts("Incorrect values specified.");
                    return -2;
                } else {
                    baseIP |= IP1 & 0xFF;
                    baseIP |= ((IP2 << 8) & 0xFF00);
                    baseIP |= ((IP3 << 16) & 0xFF0000);
                    baseIP |= ((IP4 << 24) & 0xFF000000);
    
                    baseIP = ntohl(baseIP);
    
                    intCountIP = (unsigned long) pow(2, 32-IPMask);
                    //printf("Total IP's: %u\n", countIP());
                }
            }
        } else {
            return -1;
        }

    Парсинг аргументов из одного сетевого сканера. Программа выявляет выключенные хосты в указанной подсети.
    Несмотря на *это*, сканер работает весьма резво (350 IP в секунду)

    danilissimus, 31 Марта 2011

    Комментарии (9)
  3. Куча / Говнокод #5987

    +141

    1. 1
    http://respect.lg.ua/

    Смотрим хтмл код в самом низу.

    alex322, 15 Марта 2011

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

    +141

    1. 1
    2. 2
    3. 3
    unsigned b;
    unsigned char num;
    b = ((b & ((1 << num) - 1)) << ((sizeof(b) << 3) - num)) | (b >> num);

    Долго не мог понять, что оно делает.

    movaxbx, 03 Марта 2011

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

    +141

    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
    #define N2(n)   #n"0",#n"1",#n"2",#n"3",#n"4",#n"5",#n"6",#n"7",#n"8",#n"9"
    #define N30(n)  #n N2(),#n N2(1),#n N2(2),#n N2(3),#n N2(4),#n N2(5),#n N2(6),#n N2(7),#n N2(8),#n N2(9)
    #define N3(n,k) #n#k"0",#n#k"1",#n#k"2",#n#k"3",#n#k"4",#n#k"5",#n#k"6",#n#k"7",#n#k"8",#n#k"9"
    #define N4(k)   N3(k,0),N3(k,1),N3(k,2),N3(k,3),N3(k,4),N3(k,5),N3(k,6),N3(k,7),N3(k,8),N3(k,9)
    #define N5      N30(),N4(1),N4(2),N4(3),N4(4),N4(5),N4(6),N4(7),N4(8),N4(9)
    
    const char s[][4]={N5};
    const int s_size = sizeof(s)/sizeof(s[0]);
    void print_number(int n) {
        if (n<s_size) {
            printf("!%s\n",s[n]);
        }
        else {
            printf("?%d\n",n);
        }
    }

    Отсылка к #3376 http://govnokod.ru/3376
    Вопрос к общественности: что бОльший говнокод, >100 строк строковых констант или 5-строчный пассаж на макросах?

    xredor, 19 Февраля 2011

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

    +141

    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
    char *nvram_get(int index, char *name)
    {
            /* Initial value should be NULL */
            char *recv = NULL;
    
            //LIBNV_PRINT("--> nvram_get\n");
            nvram_init(index);
    
            recv = nvram_bufget(index, name);
    
            //btw, we don't return NULL anymore!
            if (!recv)
                recv = "";
    
            //Always need close nvram
            nvram_close(index);
    
        return recv;
    }
    
    char *nvram_bufget(int index, char *name)
    {
            int idx;
            /* Initial value should be NULL */
            static char *ret = NULL;
    
            //LIBNV_PRINT("--> nvram_bufget %d\n", index);
            LIBNV_CHECK_INDEX("");
            LIBNV_CHECK_VALID();
            idx = cache_idx(index, name);
    
            if (-1 != idx) {
                    if (fb[index].cache[idx].value) {
                            //duplicate the value in case caller modify it
                            //Tom.Hung 2010-5-7, strdup() will cause memory leakage
                            //but if we return value directly, it will cause many other crash or delete value to nvram error.
                            ret = strdup(fb[index].cache[idx].value);
                            LIBNV_PRINT("bufget %d '%s'->'%s'\n", index, name, ret);
    
                            //btw, we don't return NULL anymore!
                            if (!ret)
                                ret = "";
    
                        return ret;
                    }
            }
    
            //no default value set?
            //btw, we don't return NULL anymore!
            LIBNV_PRINT("bufget %d '%s'->''(empty) Warning!\n", index, name);
            return "";
    }

    Кусочек кода из библиотеки работы с nvram для железок на SoC Ralink. Китайцы плакали, кололись о утечки памяти, но продолжали настойчиво мешать указатели на статические строки с указателями на динамически выделенные в куче...

    NiTr0man, 27 Декабря 2010

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

    +141

    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
    void array_random_input(int *array, unsigned int *array_size)
    {
    	unsigned register int i, j;
    	for(i=0; i<(*array_size); i++)
    		for(j=0; j<(*array_size); j++)
    			*(array + (*array_size) * i + j) = rand()%100;
    }
    
    void array_recombination(int *array, unsigned int *array_size)
    {
    	unsigned register int i, j, tmp;
    	for(i=0; i<(*array_size)/2; i++)
    		for(j=0; j<(*array_size)/2; j++)
    			{
    				tmp = *(array + (*array_size) * i + j);
    				*(array + (*array_size) * i + j) = *(array + (*array_size) * ((*array_size)/2 + i) + ((*array_size)/2 + j));
    				*(array + (*array_size) * ((*array_size)/2 + i) + ((*array_size)/2 + j)) = tmp;
    			}
    			
    	for(i=0; i<(*array_size)/2; i++)
    		for(j=(*array_size)/2; j<(*array_size); j++)
    			{
    				tmp = *(array + (*array_size) * i + j);
    				*(array + (*array_size) * i + j) = *(array + (*array_size) * ((*array_size)/2 + i) + (j - (*array_size)/2));
    				*(array + (*array_size) * ((*array_size)/2 + i) + (j - (*array_size)/2)) = tmp;
    			}
    }
    
    //ardent greetings to my teacher F.S.V.! :)

    Условие задачи: необходимо создать динамический двумерный массив размерностью 2n и сделать перестановку крест накрест его четвертей. В качестве параметров все функции принимают указатели. Для пущего brainfuck'а доступ к элементам массива осуществлялся с использованием одномерной адресации (по другому никак не получалось :)
    Для сокращения привожу только функции наполнения массива случайными значениями и перестановки элементов.

    mr_visor, 23 Декабря 2010

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

    +141

    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
    static int16_t have_upper_dot(cell *c)
    {
     cell *cc;
     int16_t H;
     H=my_bases.ps;
     cc=c->prev;
     if ((cc->flg & c_f_dust) &&
          (c->w>4 && cc->h>=2 && cc->w>=2 &&
    	(abs(cc->h-cc->w)<=H/6 || cc->h<cc->w && cc->w-cc->h<=H/4) &&
    	cc->col+1>=c->col && cc->col+cc->w-5<=c->col+c->w ||
           c->w<=4 && abs(c->col-cc->col+(c->w-cc->w)/2)<=2) &&
          cc->row+cc->h-2<=my_bases.b2)
       return 1;
     cc=c->next;
     if ((cc->flg & c_f_dust) &&
          (c->w>4 && cc->h>=2 && cc->w>=2 &&
    	(abs(cc->h-cc->w)<=H/6 || cc->h<cc->w && cc->w-cc->h<=H/4) &&
    	cc->col+1>=c->col && cc->col+cc->w-5<=c->col+c->w ||
           c->w<=4 && abs(c->col-cc->col+(c->w-cc->w)/2)<=2) &&
          cc->row+cc->h-2<=my_bases.b2)
       return 1;
     return 0;
    }

    Из одной OCR программы.

    f0ma, 12 Декабря 2010

    Комментарии (38)
  9. Куча / Говнокод #4803

    +141

    1. 1
    <input type="hidden" id="id1" name="id1" value="someVal" readonly="readonly" style="background-color:Transparent;border:none;" />

    Стилизованный readonly hidden

    zheka, 01 Декабря 2010

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

    +141

    1. 1
    sprintf(name," %s", trim("рубль",0));

    Функция trim(char*, int), где вторым параметром указывается с какой стороны удалять пробелы(0 - с обеих сторон)

    wolf, 26 Октября 2010

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

    +141

    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
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    int AnalizingHeaderLine(char* HeadLine)
    {
    	if(HeadLine==NULL) return -1;
    	if(strlen(HeadLine)==0) return 0;
    
    	if(!strncmp(HeadLine,"HTTP/",5))
    		ProcessStatusHL(HeadLine);
    	else if(!strncmp(strlwr(HeadLine), "date:",5))
    		ProcessDateHL(HeadLine);
    	else if(!strncmp(strlwr(HeadLine), "server:",7))
    		ProcessServerHL(HeadLine);
    	else if(!strncmp(strlwr(HeadLine), "last-modified:",14))
    		ProcessLastModHL(HeadLine);
    	else if(!strncmp(strlwr(HeadLine), "content-type:",13))
    		ProcessContTypeHL(HeadLine);
    	else if(!strncmp(strlwr(HeadLine), "content-length:",15))
    		ProcessContLenHL(HeadLine);
    	else if(!strncmp(strlwr(HeadLine), "pragma:",7))
    		ProcessPragmaHL(HeadLine);
    	else if(!strncmp(strlwr(HeadLine), "Connection",10))
    		ProcessConnectHL(HeadLine);
    	else printf("Unknown header line: %s\n", HeadLine);
    	return strlen(HeadLine);
    }
    
    int ProcessStatusHL(char* HeadLine)
    {
    	short MinVer, MajVer;
    	char ResultStr[32];
    	char Num;
    	short Code;
    	Num = sscanf(HeadLine, "HTTP/%d.%d %d %s", &MinVer, &MajVer, &Code, ResultStr);
    	if(Num!=3 && Num!=4) 
    	{	printf("Error status string\n");
    		return -1;
    	}
    	return Code;
    }
    
    int ProcessDateHL(char* HeadLine)
    {
    	printf("%s\n",HeadLine);
    	return 0;
    }
    
    int ProcessServerHL(char* HeadLine)
    {
    	printf("%s\n",HeadLine);
    	return 0;
    }
    
    int ProcessLastModHL(char* HeadLine)
    {
    	printf("%s\n",HeadLine);
    	return 0;
    }
    
    int ProcessContTypeHL(char* HeadLine)
    {
    	printf("%s\n",HeadLine);
    	return 0;
    }
    
    int ProcessContLenHL(char* HeadLine)
    {
    	printf("%s\n",HeadLine);
    	return 0;
    }
    
    int ProcessPragmaHL(char* HeadLine)
    {
    	printf("%s\n",HeadLine);
    	return 0;
    }
    
    int ProcessConnectHL(char* HeadLine)
    {
    	printf("%s\n",HeadLine);
    	return 0;
    }

    CGI. Обработка HTTP-заголовков. Rev. 1.0

    absolut, 20 Июля 2010

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