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

    +142

    1. 1
    enum {size = 10, timeout = 50};

    vovochka, 30 Июня 2010

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

    +140

    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
    int 
    grub_auth_strcmp (const char *user_input, const char *template) 
    { 
      int ok = 1; 
      const char *ptr1, *ptr2; 
      for (ptr1 = user_input, ptr2 = template; *ptr1; ptr1++) 
        if (*ptr1 == (ptr2 ? *ptr2 : ptr1[1]) && ok && ptr2 != NULL) 
          ptr2++; 
        else 
          ok = 0; 
     
      return !ok; 
    }

    Несвежий говнокод (давно пропатчено) и, возможно, кто-то скажет "баян", однако оставлю это здесь.
    Код из загрузчика grub 1.97, проверка пароля. Принимает за верный пароль любую подстроку пароля.

    cfdev, 27 Июня 2010

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

    −157

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    uint16_t (*tArray16[20])[16]; 
    uint16_t (*tArray64[5])[64]; 
    //////
    где-то в начале это malocaется
    //////
    for( i = 0; i < 25; i++ )
    { ....
        free( h->tArray16[i] );
    }

    это работает. т.к. структуры идут в памяти последовательно

    3.14159265, 18 Июня 2010

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

    +136

    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
    #if 0
    
    // memory allocator
    // Type: Best Fit with block sorting
    
    #else
    
    static char* last = (char*)KERNEL_HEAP_BEGIN;
    
    void* alloc( size_t size )
    {
    	void * mem = last;
    	last += size;
    	return mem;
    }
    
    void free( void* mem )
    {
    	(void)mem;
    }
    
    #endif

    Менеджер памяти.
    такую заглушку пришлось делать за пару ночей до сдачи диплома, так как не хватало времени на написание записки.
    зато самый быстрый алокатор. сложность О(1)...
    нужен был для выделения памяти для данных 2 потоков и 1 процесса... функция free нигде не использовалась...

    pushkoff, 17 Июня 2010

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

    +137

    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
    /*
    sub iterm(i,ne(2),na(2),x(2),xx(2),d(2),p(2),mp,np,ii,im)
    shared nkp
    fl = 0
    FOR k = 1 TO na(0, i): ma = na(k, i): me = ne(k, i)
    FOR j = 1 TO mp
    x=x(j,ma): d=x(j,me)-x: x=x+p(1,i)*d: x(j,ma)=x: ad=ABS(d)
    IF ad > ABS(p(2, i) * x) AND it<im THEN fl = 1
    NEXT j, k: it=it+1: IF fl = 1 THEN ii = p(nkp, i) - 1 else it=0
     end sub: REM ИТЕР-БЛОК (мод.)
    */
    
     void iterm(int i, int ne[4][7],int na[3][7], float x[3][6],
    float d, float p[3][7], int mp, int np, int ii, int im)
    {extern int nkp; float xx,ad; static int it=0;
    int fl = 0, k, j, ma, me;
    for (k = 1; k<=na[0][ i];++k)
    { ma = na[k][ i]; me = ne[k][ i];
    for( j = 1;j<= mp;++j)
    {xx=x[j][ma]; d=x[j][me]-xx; xx=xx+p[1][i]*d; x[j][ma]=xx; ad=fabs(d);
    if( ad > fabs(p[2][ i] * xx) && it<im) fl = 1;
    }} it=it+1; if( fl == 1)  ii = p[nkp][ i] - 1; else it=0;
    } // ИТЕР-БЛОК (мод.)
    
    /*
    cls
    ? fnpr$;  REM ПОДГОТОВКА ДАННЫХ
    REM ОРГАНИЗУЮЩАЯ ПОДПРОГРАММА
    call op(ne(),na(),x(),s(),pr(),md(),n,mp,np,p(),mk,ki,im)
    ?: ?"Общее число итераций ="ki". Жми пробел.": S$=input$(1)
    */

    как обычно вместо того чтобы написать программу с нуля,был найден код на бейсике и начал безжалостно копипаститься в С
    ну и сам код на бэйсике естественно тоже говно

    tz-lom, 14 Июня 2010

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

    +131

    1. 1
    2. 2
    3. 3
    int newclient(var v, newconn oldconn) {
            [...]
    }

    Ничего особенного, конечно. Просто порадовало "newconn oldconn".

    xaionaro, 14 Июня 2010

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

    +144

    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
    typedef signed int s32;
    
    //...
    
    void SomeStruct::SomeFunc(const char* ipImageName /*, ... */ )
    {
    	// ...
    
    	s32 imageNameSize = strlen(ipImageName) * sizeof(char) + 1;
    	this->mpImageName = new char[imageNameSize];
    	strcpy(this->mpImageName, ipImageName);
    	
    	// ...
    }

    А теперь представим, что вместо char будет wchar_t... ...автор - лид-программист...

    Kirinyale, 13 Июня 2010

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

    +139

    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
    int main() {
      unsigned long oct;
      int m,n,i,j;	
      int max=0;
      
      scanf("%d",&oct);
      for(i=0;i<=32/3;i++) {
        m=0;
        for(j=0;j<=2;j++) {
          n=oct & 1;
          if(n==1)
            m=m | power(2,j);
          oct=oct >> 1;  
        } 
      if(m>max)
        max=m;                   
      }
      printf("%d",max);  
      return 0;
    }
    
    int power(int x, int a) {
      int i;
      int t=x;
      if(a==0)
        t=1;
      else {  
      for(i=1;i<a;i++)
        t*=x; 
      }
      return t;  
    }

    Определение максимальной цифры в восьмеричной записи числа.
    Особенно радует вызов функции возведения в степень для двойки, да и сама функция тоже.

    movaxbx, 11 Июня 2010

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

    +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
    #include <stdio.h>
    
    int main() {
    	unsigned d,t,k;
    	scanf("%d",&d);
    	t=d;
    	for(k=0;t!=0;k++) //определяем кол-во значащих битов
    		t>>=1;
    	//обнуляем старший значащий бит
    	d<<=sizeof(d)*8-k+1; 
    	d>>=sizeof(d)*8-k+1; 
    	return 0;
    }

    Вот такое вот обнуление старшего бита

    movaxbx, 11 Июня 2010

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

    +136

    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
    #include <stdio.h>
    #include <string.h>
    int reg (char str[])
    {
    	int i;
    	int n=strlen(str);
    	for (i=0; i<n; i++)
    	if (str[i]<91) str[i]=str[i]+32;
    	return str[i];
    }
    int main ()
    {
    	char str[100]="OlololOlolOloLolOlooLololOlOllllOOOloLoloOlO";
    	int a=reg(str);
    	int i,n=strlen(str);
    	reg(str);
    	printf("%s",str);
    	return 0;
    }

    Программа собственно переводит в нижний регистр. Но как-то жестко написана. Очень сокрушаюсь, что нас еще не научили strwlr и strupr в институте. Оправдано такое написание или все же лучше пользоваться библиотечными функциями?

    ForEveR, 09 Июня 2010

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