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

    +136

    1. 1
    2. 2
    3. 3
    4. 4
    /* My favorite names for boolean values */
    #define  No	0
    #define  Yes	1
    #define  Maybe	2		/* tri-state boolean, actually */

    Исходный код юниксовой утилиты top. Файл boolean.h.

    danilissimus, 29 Августа 2011

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

    +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
    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
    const int volume=100;
    int index=0;
    struct memo
    {   int nach;
    	int size;
    	char name[1];
    }raboch[volume];
    void main()
    {	setlocale(LC_ALL, "rus");
    	int switc=0;
    	int i,r;
    	int p=1;
    	int tekadr=0;
    	int ID=0;
    	int razmer;
    	int zap;
    	int paz;
    	int realproc=0;
    	int vhod=0;
    	int tekad;
    	char c[1024];
    	for(i=1023;i>=0;i--) { c[i]='0';}
    	for(i=99;i>=0;i--) { raboch[i].name[0]=' ';}
    		while(p>0) {
    					cout<<"Выберите действие: 1-Выделить память 2-Очистить 3-Дефрагментировать 4-состояние памяти 5-содежимое памяти 6-выход \n";
    					cin>>r;
    					int k=1;
    					switch(r)
    						{
                            case 1:
    							cout<<"Введите имя процесса:";
    							cin>>raboch[ID].name;
    							cout<<"Введите размер выделяемой памяти в байтах:";
    							cin>>raboch[ID].size;
    							razmer=raboch[ID].size;
    							raboch[ID].nach=tekadr;
    							for(i=tekadr; razmer>0;razmer--) {c[i]=raboch[ID].name[0]; i++; }
    							tekadr+=raboch[ID].size;
    							ID++;
    							realproc=ID;
    							break;;
    						case 2:
                                cout<<"Введите ID убиваемого процесса:";
    							cin>>zap;
    							razmer=raboch[zap].size;
    							for(i=raboch[zap].nach;razmer>0;razmer--) { c[i]='0'; i++;}
    							raboch[zap].name[0]='0';
    							raboch[zap].size=0;
    							tekadr=raboch[zap].nach;
    							realproc--;
    							ID--;
    							index=realproc;
    							break;;
    						case 3:
    					        zap=1;
    							paz=0;
    							   for(i=0;i<=102;i++)
    							     {
    									 if(c[i]!='0')
    									  {  
    									  }
    									 else
    								      {   tekad=i;
    											while(k>0)
    											{
    												  zap++;
    												  if(c[raboch[zap].nach]!='0')
    												   {  paz=raboch[zap].size;
    														for(vhod=raboch[zap].nach;paz>0;paz--) {c[tekad]=c[vhod]; c[vhod]='0'; tekad++; vhod++; }
    														int num;
    														for(num=0;num<100;num++) { if(raboch[num].name[0]=='0') { paz=num; num=100;} else{} }
    															if (raboch[zap].name[0]!=' ') { realproc--;
    																							tekadr=tekad;
    																							raboch[paz].size=raboch[zap].size;
    																							raboch[zap].size=0;
    																							raboch[zap].nach=0;
    																							raboch[paz].name[0]=raboch[zap].name[0];
    																							raboch[zap].name[0]=' ';}
    														else {}	 }
    												  if (raboch[zap].name[0]==' ') { if (realproc>=0) {k=1;} else { k=0;} }
    												  else  { }  }}}   
    							break;;
    						case 4:
    					      for(zap=ID-1;zap>=0;zap--)
    								{cout<<"Имя блока:";cout<<raboch[zap].name;cout<<"\n";
    									cout<<"Размер блока:";cout<<raboch[zap].size;cout<<"\n";
    									cout<<"Начальный адресс:";cout<<raboch[zap].nach;cout<<"\n";}
    							break;;
    						case 5:
    					        cout<<"Введите начальный адресс памяти:";
    							cin>>zap;
    							cout<<"Введите конечный адресс памяти:";
    							cin>>paz;
    							for(i=zap;paz!=i;i++) {cout<<c[i];}
    							cout<<"\n";
    							break;;
    						case 6: p=0;
    								continue;}}}

    Лаба по моделированию работы с памятью. Растягиваем буфер в голове))))

    Horror89, 26 Августа 2011

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

    +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
    void cmps_genslave(prog src[progs], char slave, char look){	// заполнение списков нелокальных имен
    	int s=0,m=0,l=0;
    	while( src[s].name[0]!=0 && src[s].name[0]!=slave && s<progs)s++;
    	if(!src[s].master) return;
    	if(look==slave){ if(src[s].nonlnum) return; l=s; }else
    		while( src[l].name[0]!=0 && src[l].name[0]!=look && l<progs)l++;
    	if(!src[l].master) return;
    	while(src[m+1].name[0]!=0 && src[l].master==src[m+1].name[0] && m+1<progs)m++;
    	strcpy(src[s].nonlocals+strlen(src[s].nonlocals),src[m].locals);
    	src[s].nonlnum+=src[m].lnum;
    	if(src[m].master) cmps_genslave(src,slave,src[m].name[0]);
    }

    курсовик по проге на втором курсе, изобретаем области видимости

    Venomous, 26 Августа 2011

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

    +146

    1. 1
    2. 2
    3. 3
    4. 4
    #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27)
     kill_proc(1,SIGTERM,1);
     #else
    ...

    Оригинальный способ проверить версию ядра линукса...
    Где-то в сырцах реалтековского драйвера для GPIO...

    Necromant, 25 Августа 2011

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

    +139

    1. 1
    2. 2
    3. 3
    4. 4
    char *reg = data;
    char *temp = "blahblah is ";
    
    strcat(temp,(const char*)"reg[4]");

    Как оказывается на Си можно конкатенировать строки

    Kortez, 15 Августа 2011

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

    +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
    66. 66
    67. 67
    68. 68
    69. 69
    /* gcc -static -Os -W -nostartfiles -fno-stack-protector -U_FORTIFY_SOURCE glibc_preinstall.c */
    
    #include <unistd.h>
    #include <signal.h>
    #include <sys/utsname.h>
    
    #ifndef MIN_KERNEL_VERSION
    # error "MIN_KERNEL_VERSION not defined"
    #endif
    #define PRINT_MSG(msg) write(2, (msg), sizeof(msg) - 1)
    #define FATAL(msg) do {PRINT_MSG(msg); kill_parent(); _exit(1);} while(0)
    
    static void kill_parent(void)
    {
    	pid_t pid = getppid();
    	if (pid < 100)
    		return;
    
    	PRINT_MSG("Sending SIGSTOP signal to parent process.\n");
    	(void) kill(pid, SIGSTOP);
    }
    
    static int is_digit(char c)
    {
    	return c >= '0' && c <= '9';
    }
    
    static int
    parse_release(const char *p)
    {
    	unsigned int i, osversion = 0;
    
    	for (i = 0; i < 3 && *p; i++, ++p)
    	{
    		unsigned int d = 0;
    
    		for (; is_digit(*p); ++p)
    			d = d * 10 + (*p - '0');
    
    		if (d == 0 || d >= 255 || (i < 2 && *p && *p != '.'))
    		{
    			osversion = 0;
    			break;
    		}
    		osversion |= d << (16 - 8 * i);
    	}
    	return osversion;
    }
    
    static void
    check_kernel_version(void)
    {
    	struct utsname name;
    
    	if (uname(&name) < 0)
    		FATAL("kernel version check failed: uname syscall failed.\n");
    
    	if (parse_release(name.release) < parse_release(MIN_KERNEL_VERSION))
    		FATAL("kernel version check failed: KERNEL TOO OLD, "
    		      "minimal version supported by glibc is " MIN_KERNEL_VERSION
    		      ".\n");
    }
    
    void
    _start(void)
    {
    	check_kernel_version();
    	_exit(0);
    }

    Скрипт на языке Си, проверяющий, что загружено ядро версии не меньшей чем MIN_KERNEL_VERSION (2.6.18 на момент написания). Очень красиво взрывается на ядре 3.0.

    raorn, 11 Августа 2011

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

    +106

    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
    if (fFisWaitAccept)
        {
            if (++countB > 2)
            {
                countB = 0;
                TRACE("ERROR TIMER B\n");
                Reinit_ATS_Connection();
                fFisWaitAccept = false;
                set_timer_b(tmB);
                return;
            }
        }
        else
            countB = 0;
        SendFrameToATS(buf, 4);        //visilaem neskolko raz
        SendFrameToATS(buf, 4);        //FW dlia bolshej uverennosti
        SendFrameToATS(buf, 4);        //ibo esli etot paket nedojdiot sviazi pizdec
        fFisWaitAccept = true;
        set_timer_b(tmB);

    Фрагмент кода управляющей программы для некоей АТС.

    b10876198, 09 Августа 2011

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

    +147

    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
    {
        //-----------------------------------------
        // Declare and initialize variables
        WSADATA wsaData;
        int iResult = 0;
    
        int iError = 0;
        INT iNuminfo = 0;
    
        int i;
    
        // Allocate a 16K buffer to retrieve all the protocol providers
        DWORD dwBufferLen = 16384;
    
        LPWSAPROTOCOL_INFO lpProtocolInfo = NULL;
    
        // variables needed for converting provider GUID to a string
        int iRet = 0;
        WCHAR GuidString[40] = { 0 };
    
        // Initialize Winsock
        iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
        if (iResult != 0) {
            wprintf(L"WSAStartup failed: %d\n", iResult);
            return 1;
        }
    
        lpProtocolInfo = (LPWSAPROTOCOL_INFO) MALLOC(dwBufferLen);
        if (lpProtocolInfo == NULL) {
            wprintf(L"Memory allocation for providers buffer failed\n");
            WSACleanup();
            return 1;
        }
    
        iNuminfo = WSAEnumProtocols(NULL, lpProtocolInfo, &dwBufferLen);
        if (iNuminfo == SOCKET_ERROR) {
            iError = WSAGetLastError();
            if (iError != WSAENOBUFS) {
                wprintf(L"WSAEnumProtocols failed with error: %d\n", iError);
                if (lpProtocolInfo) {
                    FREE(lpProtocolInfo);
                    lpProtocolInfo = NULL;
                }
                WSACleanup();
                return 1;
            } else {
                wprintf(L"WSAEnumProtocols failed with error: WSAENOBUFS (%d)\n",
                        iError);
                wprintf(L"  Increasing buffer size to %d\n\n", dwBufferLen);
                if (lpProtocolInfo) {
                    FREE(lpProtocolInfo);
                    lpProtocolInfo = NULL;
                }
                lpProtocolInfo = (LPWSAPROTOCOL_INFO) MALLOC(dwBufferLen);
                if (lpProtocolInfo == NULL) {
                    wprintf(L"Memory allocation increase for buffer failed\n");
                    WSACleanup();
                    return 1;
                }
                iNuminfo = WSAEnumProtocols(NULL, lpProtocolInfo, &dwBufferLen);
                if (iNuminfo == SOCKET_ERROR) {
                    iError = WSAGetLastError();
                    wprintf(L"WSAEnumProtocols failed with error: %d\n", iError);
                    if (lpProtocolInfo) {
                        FREE(lpProtocolInfo);
                        lpProtocolInfo = NULL;
                    }
                    WSACleanup();
                    return 1;
                }
    
            }
        }
    
        wprintf(L"WSAEnumProtocols succeeded with protocol count = %d\n\n",
                iNuminfo);
        for (i = 0; i < iNuminfo; i++) {
            wprintf(L"Winsock Catalog Provider Entry #%d\n", i);
    
    --- skipped ---
    
            wprintf(L"\n");
        }
    
        if (lpProtocolInfo) {
            FREE(lpProtocolInfo);
            lpProtocolInfo = NULL;
        }
        WSACleanup();
    
        return 0;
    }

    http://msdn.microsoft.com/en-us/library/ms741574(v=VS.85).aspx

    Я считаю это говнокодом, т.к. автор данного примера страдает сильнейшие паранойей. Всем переменным он присваивает нолики, например перед return строки 87, 52 и т.д. ... Даже iResult, lpProtocolInfo и т.д. в начале...

    fddpro, 04 Августа 2011

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

    +136

    1. 1
    2. 2
    3. 3
    4. 4
    inline int getMaximumIterations() // НЕ: MAX_ITERATIONS = 25 
    {
        return 25;
    }

    правила использования глобальных переменных ))) прочитанные в доках одной софтовой компании

    gentoonofb, 02 Августа 2011

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

    +109

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    int rnd() {
      srand( rand()*rand() );
      int r = 0;
      for (int i=0;i<=10;i++)
        r=rand();
      srand( ++r - time(NULL) );
      return rand()/r;
    }

    NEED MOAR RANDOM NUMBERS!!!

    Fai, 29 Июля 2011

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