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

    +144

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    /* возвращает в buf последние 4 символа имени файла filename */
    void getfileext(unsigned char *buf, unsigned char *filename)
    {
        int i, j;
    
        for (i = strlen((char *) filename) - 4, j = 0; i < strlen((char *) filename); i++, j++)
            buf[j] = filename[i];
    
        return;
    }

    angry C nerd, 06 Апреля 2011

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

    +134

    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
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    91. 91
    92. 92
    93. 93
    94. 94
    95. 95
    96. 96
    97. 97
    98. 98
    99. 99
    int _Mbtowcx(wchar_t *pwc, const char *s, size_t nin, mbstate_t *pst, _Statab *pmbstate)
    	char state = (char)pst->_State;
    	unsigned char *su = (unsigned char *)s;
    	wchar_t wc = (wchar_t)pst->_Wchar;
    	static const mbstate_t initial = {0};
    
    	if (pmbstate->_Tab[0] == 0)	{	/* no table, convert from UTF8 */
    		if (s == 0)
    			{	/* set initial state */
    			*pst = initial;
    			return (0);
    			}
    
    		for (; ; ++su, --nin) {	/* consume an input byte */
    			if (nin == 0) {	/* report incomplete conversion */
    				pst->_Wchar = wc;
    				pst->_State = state;
    				return (-2);
    				}
    			else if (0 < state)	{	/* fold in a successor byte */
    				if ((*su & 0xc0) != 0x80) {	/* report invalid sequence */
    					errno = EILSEQ;
    					return (-1);
    					}
    				wc = (wchar_t)((wc << 6) | (*su & 0x3f));
    				--state;
    				}
    			else if ((*su & 0x80) == 0)
    				wc = *su;	/* consume a single byte */
    			else if ((*su & 0xe0) == 0xc0)	{	/* consume first of two bytes */
    				wc = (wchar_t)(*su & 0x1f);
    				state = 1;
    				}
    			else if ((*su & 0xf0) == 0xe0)	{	/* consume first of three bytes */
    				wc = (wchar_t)(*su & 0x0f);
    				state = 2;
    				}
    
    			else{	/* report invalid sequence */
    				errno = EILSEQ;
    				return (-1);
    				}
    			if (state == 0)	{	/* produce an output wchar */
    				if (pwc != 0)
    					*pwc = wc;
    				pst->_State = 0;
    				return (wc == 0 ? 0 : (const char *)++su - s);
    				}
    			}
    
    		}
    	else
    		{	/* run finite state machine */
    		int limit = 0;
    
    		if (s == 0)	{	/* set initial state */
    			*pst = initial;
    			return (pmbstate->_Tab[0][0] & _ST_STATE);
    			}
    
    		for (; ; )	{	/* perform a state transformation */
    			unsigned short code;
    			const unsigned short *stab;
    
    			if (nin == 0)
    				{	/* report incomplete conversion */
    				pst->_Wchar = wc;
    				pst->_State = state;
    				return (-2);
    				}
    			else if (_NSTATE <= state
    				|| (stab = pmbstate->_Tab[state]) == 0
    				|| (_NSTATE*UCHAR_MAX) <= ++limit
    				|| (code = stab[*su]) == 0)
    				{	/* report invalid sequence */
    				errno = EILSEQ;
    				return (-1);
    				}
    			state = (char)((code & _ST_STATE) >> _ST_STOFF);
    			if (code & _ST_FOLD)
    				wc = (wchar_t)(wc & ~UCHAR_MAX | code & _ST_CH);
    			if (code & _ST_ROTATE)
    				wc = (wchar_t)(wc << CHAR_BIT | UCHAR_MAX
    					& wc >> CHAR_BIT * (sizeof (wchar_t) - 1));
    			if (code & _ST_INPUT && *su != '\0')
    				++su, --nin, limit = 0;
    			if (code & _ST_OUTPUT)
    				{	/* produce an output wchar */
    				int nused = (const char *)su - s;
    
    				if (pwc)
    					*pwc = wc;
    				pst->_Wchar = wc;
    				pst->_State = state;
    				return (wc == 0 ? 0 : nused == 0 ? -3 : nused);
    				}
    			}
    		}
    	}

    Долго не мог понять почему не работает
    setlocale(...);
    _setmbcp(...);
    mbtowc(...);

    на C++ Builder. Пока не заглянул в исходники.

    sanchousf, 05 Апреля 2011

    Комментарии (17)
  3. Си / Говнокод #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)
  4. Си / Говнокод #6085

    +113

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    int main(int argv,char *argc[]){
      ...
      if(fork() != 0)goto _EXIT;
      ...
      return 0;
    _EXIT:
      return 0;
    }

    Ну как ???

    Mooncrafter, 24 Марта 2011

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

    +126

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    format MS COFF
    
    public fuckHighLevel as '_fuckHighLevel@4'
    
    fuckHighLevel:
            pop ebx
    
                pop eax
                add eax, 1
    
            jmp ebx

    Вызываем ассемблерную процедуру из Си.
    Вместо retn используем безусловыный переход на адрес возврата.
    Но работает же!

    danilissimus, 19 Марта 2011

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

    +105

    1. 1
    int c = ((i-(i%(int)pow(10,p)))/(int)pow(10,p))%10;

    Выделение из числа I цифры, стоящей на месте P с конца.
    =>
    i = 1234, p = 2, c => 2

    danilissimus, 16 Марта 2011

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

    +127

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    [code=Си]
    switch(n)
    case 1:
    {
      /* code1 */
      /* fallthrough */
      case 2:
      /* code 2 */
    }
    [/code]

    Все имена и явки изменены!
    Сцуко, работает. Щас в стандарт полезу, интересно же! Обвиняют меня, я киваю на издержки мержа. Но смешно.

    nil, 15 Марта 2011

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

    +132

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    if (argc == 3)
        snprintf(outfile, sizeof(outfile) - 1, "scan.log", argv[1], argv[2]);
    else if (argc >= 4)
    {
        snprintf(outfile, sizeof(outfile) - 1, "scan.log", argv[1], argv[3], argv[2]);
        // ...
    }

    Какой-то иксплойт, файл pscan2.c

    raorn, 14 Марта 2011

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

    +138

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    int ftp_list (int sck, int verbose) {
    	/* ... */
    	list = fopen("LIST.txt", "w");
    
    	if (list == NULL) {
    		printf("Unable to open LIST file..\n");
    		free(buffer);
    		
    		return -1;
    	}
    	/* ... */
    }

    Функция получения списка файлов в директории с FTP-сервера.
    http://sourceforge.net/projects/libftp/

    EmbargEr, 14 Марта 2011

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

    +140

    1. 1
    printf("0x%02X", (int)( (((block[i << 1] >> ((15 - (j >> 4)) << 2)) & 15) << 4 ) | ((block[(i << 1) | 1] >> ((15 - (j & 15)) << 2)) & 15)));

    Жертва жестокой оптимизации. При всем этом код исправно делал свое дело... пока не пришла пора в нем что-то изменить =)

    SIGSEGV, 13 Марта 2011

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