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

    +105

    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
    #define C_WRONG              -2000
    
    ....
    
    int tttt_atoi(char* p_string){
    
       int result = C_WRONG;
    
       if ( *p_string < '0' || *p_string > '9' )
          return C_WRONG;
    
       result = atoi(p_string);
       return result;
    }
    
    double tttt_atof(char* p_string){
    
       double result = C_WRONG;
       result = atof(p_string);
       if (result!=0){
          return result;
       }
       else{
          if(strcmp(p_string,"0.0")==0 || strcmp(p_string,"0")==0 || strcmp(p_string,"0.")==0){
             return result;
          }
          else{
             return C_WRONG;
          }
       }
    }

    и вы посмейтесь. или facepalm'нитесь. синтакс оригинала.

    Dummy00001, 04 Марта 2011

    Комментарии (28)
  9. Си / Говнокод #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)
  10. Си / Говнокод #5859

    +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
    /*!
     * \brief is Printable Character
     * \param c Character
     * \return true/false
     */
    static int isPrintableChar(char c)
    {
    	if ((c < 'A' || c > 'Z') && (c < 'a' || c > 'z')
    	    && (c < '0' || c > '9') && (c != ' ') && (c != '\'')
    	    && (c != '(') && (c != ')') && (c != '+') && (c != ',')
    	    && (c != '-') && (c != '.') && (c != '/') && (c != ':')
    	    && (c != '=') && (c != '?') && (c != '_') && (c != '\\')
    	    && (c != '@') && (c != '"') && (c != '%') && (c != '$')
    	    && (c != '&') && (c != '#') && (c != ';')
    	    //&& (c != 'В_')
    	    && (c != '<') && (c != '>') && (c != ']') && (c != '{')
    	    && (c != '}') && (c != '*') && (c != '^')) {
    		return 0;
    	} else {
    		return 1;
    	}
    }

    из открытого проекта chan_sccp
    даже не знаю почему не использовать стандартный макрос isprint
    #define isprint(c) ((c) >= ' ' && (c) <= '~')

    ddkprog, 03 Марта 2011

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