1. Си / Говнокод #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)
  2. Си / Говнокод #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)
  3. Си / Говнокод #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)
  4. Си / Говнокод #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)
  5. Си / Говнокод #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)
  6. Си / Говнокод #5968

    +125

    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
    #line 411 "ext/standard/var_unserializer.c"
    {
    	YYCTYPE yych;
    
    	if ((YYLIMIT - YYCURSOR) < 7) YYFILL(7);
    	yych = *YYCURSOR;
    	switch (yych) {
    	case 'C':
    	case 'O':	goto yy13;
    	case 'N':	goto yy5;
    	case 'R':	goto yy2;
    	case 'S':	goto yy10;
    	case 'a':	goto yy11;
    	case 'b':	goto yy6;
    	case 'd':	goto yy8;
    	case 'i':	goto yy7;
    	case 'o':	goto yy12;
    	case 'r':	goto yy4;
    	case 's':	goto yy9;
    	case '}':	goto yy14;
    	default:	goto yy16;
    	}
    yy2:
    	yych = *(YYMARKER = ++YYCURSOR);
    	switch (yych) {
    	case ':':	goto yy95;
    	default:	goto yy3;
    	}
    yy3:
    #line 733 "ext/standard/var_unserializer.re"
    	{ return 0; }
    #line 442 "ext/standard/var_unserializer.c"
    yy4:
    	yych = *(YYMARKER = ++YYCURSOR);
    	switch (yych) {
    	case ':':	goto yy89;
    	default:	goto yy3;
    	}
    yy5:
    	yych = *++YYCURSOR;
    	switch (yych) {
    	case ';':	goto yy87;
    	default:	goto yy3;
    	}
    yy6:
    	yych = *(YYMARKER = ++YYCURSOR);
    	switch (yych) {
    	case ':':	goto yy83;
    	default:	goto yy3;
    	}
    yy7:
    	yych = *(YYMARKER = ++YYCURSOR);
    	switch (yych) {
    	case ':':	goto yy77;
    	default:	goto yy3;
    	}
    yy8:
    	yych = *(YYMARKER = ++YYCURSOR);
    	switch (yych) {
    	case ':':	goto yy53;
    	default:	goto yy3;
    	}
    yy9:
    	yych = *(YYMARKER = ++YYCURSOR);
    	switch (yych) {
    	case ':':	goto yy46;
    	default:	goto yy3;
    	}
    yy10:
    	yych = *(YYMARKER = ++YYCURSOR);
    	switch (yych) {
    	case ':':	goto yy39;
    	default:	goto yy3;
    	}
    yy11:
    	yych = *(YYMARKER = ++YYCURSOR);
    	switch (yych) {
    	case ':':	goto yy32;
    	default:	goto yy3;
    	}
    yy12:
    	yych = *(YYMARKER = ++YYCURSOR);
    	switch (yych) {
    	case ':':	goto yy25;
    	default:	goto yy3;
    	}
    yy13:
    	yych = *(YYMARKER = ++YYCURSOR);
    	switch (yych) {
    	case ':':	goto yy17;
    	default:	goto yy3;
    	}
    yy14:
    	++YYCURSOR;
    
    /* далее еще несколько похожих кусков кода чуть менее хардкорных */

    http://svn.php.net/viewvc/php/php-src/trunk/ext/standard/var_unserializer.c?view=markup

    Исходники функции unserialize в php, не зря она так медленно работает на больших массивах...

    dim-s, 13 Марта 2011

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

    +135

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    //глубоко в коде
    char output[1024];
    
    //еще глубже
    struct sockaddr_in outputa;
    
    //...
    
    if(sendto(s, output, 512, 0, (struct sockaddr *) &output, rsize) == SOCKET_ERROR) {
        printf("Socket error: %i.\n", WSAGetLastError());
    }

    Долго-же я думал, почему оно вываливается с ошибкой 10047.

    danilissimus, 12 Марта 2011

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

    +142

    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
    #include <unistd.h>
    #include <stdlib.h>
    int main(int argc,char* argv[])
    {
    int fdp1[2],fdp2[2],fdp3[2],fdp4[2],fdp5[2];
    pipe(fdp1);
    pipe(fdp2);
    pipe(fdp3);
    pipe(fdp4);
    pipe(fdp5);
    if(fork()==0){
    close(1);dup(fdp1[1]);close(fdp1[1]);close(fdp1[0]);
    execl("/bin/cat","cat",argv[1],(char*)0);
    exit(1);
    }
    if(fork()==0){
    close(0);dup(fdp1[0]);close(fdp1[0]);close(fdp1[1]);
    close(1);dup(fdp2[1]);close(fdp2[1]);
    execl("/usr/bin/tr","tr","-cs","A-Za-z","\n",(char*)0);
    exit(2);
    }
    if(fork()==0){
    close(0);dup(fdp2[0]);close(fdp2[0]);close(fdp2[1]);
    close(fdp1[0]);close(fdp1[1]);
    close(1);dup(fdp3[1]);close(fdp3[1]);close(fdp3[0]);
    execl("/usr/bin/sort","sort",(char*)0);
    exit(3);
    }
     
    if(fork()==0){
    close(0);dup(fdp3[0]);close(fdp3[0]);close(fdp3[1]);
    close(fdp1[0]);close(fdp1[1]);
    close(fdp2[0]);close(fdp2[1]);
     
    close(1);dup(fdp4[1]);close(fdp4[1]);
    execl("/usr/bin/uniq","uniq","-c",(char*)0);
    exit(4);
    }
     
    if(fork()==0){
    close(0);dup(fdp4[0]);close(fdp4[0]);close(fdp4[1]);
    close(fdp1[0]);close(fdp1[1]);
    close(fdp2[0]);close(fdp2[1]);
    close(fdp3[0]);close(fdp3[1]);
    close(1);dup(fdp5[1]);close(fdp5[1]);
    execl("/usr/bin/sort","sort","-n",(char*)0);
    exit(5);
    }
    if(fork()==0){
    close(0);dup(fdp5[0]);close(fdp5[0]);close(fdp5[1]);
    close(fdp1[0]);close(fdp1[1]);
    close(fdp2[0]);close(fdp2[1]);
    close(fdp3[0]);close(fdp3[1]);
    close(fdp4[0]);close(fdp4[1]);
    execl("/usr/bin/tail","tail","-n",argv[2],(char*)0);
    exit(6);
    }
    close(fdp1[0]);close(fdp1[1]);
    close(fdp2[0]);close(fdp2[1]);
    close(fdp3[0]);close(fdp3[1]);
    close(fdp4[0]);close(fdp4[1]);
    close(fdp5[0]);close(fdp5[1]);
    while(wait(0)!=(-1));
    exit(0);
    }

    задача: подсчет повторяемости слов, и вывод слов указанной длины.

    niXman, 11 Марта 2011

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

    +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
    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <ctime>
    #include <signal.h>
    #include <sys/time.h>
    #include <fcntl.h>
    #include <termios.h>
    #include <time.h>
    
    #include <iostream>
    
    using namespace std;
    
    struct termios savetty;
    struct termios tty;
    char num[]="0123456789QWERTYUIOPASDFGHJKLZXCVBNM";
            char let[]="!\",#$%&'()*qwertyuiopasdfghjklzxcvbnm";
    int t=1;
    int tm=0;
    int opnum=0;
      char buffer[30];
    char var[1000];
    char out[1000];
    struct timeval tv;
    struct timeval tv2;
    int main()
    {
      if ( !isatty(0) ) {
      fprintf (stderr, "stdin not terminal\n");
      exit (1);
      };
    
    tcgetattr (0, &tty);
    savetty = tty;
    tty.c_lflag &= ~(ICANON|ISIG);
    tty.c_cc[VMIN] = 1;
    tcsetattr (0, TCSAFLUSH, &tty);
    
      srand(time(0));
    
      int i=0;
      bool c=true;
      time_t curtime;
      int passLen=200+rand()%400;
      for(int i=0;i<=passLen;i++){
        int s=rand()%2;
        if(s==1){
          out[i]=let[rand()%37];
        } else {
          out[i]=num[rand()%35];
        };
        if((i%5)==0 && i!=0)out[i]=' ';
      };
      out[passLen]='\0';
      int tt=gettimeofday(&tv, NULL);
      if(tt<0)exit(0);
      printf("%s\n",out);
      while(out[i]!='\0')
      {
        var[i]=getchar();
        if(var[i]!=out[i]){
          opnum++;
          printf("Er%c",out[i]);
        };
        i++;
      };
      tt=gettimeofday(&tv2, NULL);
      if(tt<0)exit(0);
      int tm=tv2.tv_sec-tv.tv_sec;
      int v=(passLen*60)/tm;
      int min=tm/60;
      tm%=60;
      printf("Time %d min %d sec\n",min,tm);
      cout<<"Num of errors "<<opnum<<" Speed "<<v<<endl;
      tcsetattr (0, TCSAFLUSH, &savetty);
      
    };

    Клавиатурный тренажер

    AliceGoth, 09 Марта 2011

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

    +109

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    while(1) {
        :cycle
        goto cycleCode;
    }
    
    // ...
    
    :cycleCode
    //код
    goto cycle;

    danilissimus, 08 Марта 2011

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