- 1
enum {size = 10, timeout = 50};
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+142
enum {size = 10, timeout = 50};
+140
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, проверка пароля. Принимает за верный пароль любую подстроку пароля.
−157
uint16_t (*tArray16[20])[16];
uint16_t (*tArray64[5])[64];
//////
где-то в начале это malocaется
//////
for( i = 0; i < 25; i++ )
{ ....
free( h->tArray16[i] );
}
это работает. т.к. структуры идут в памяти последовательно
+136
#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 нигде не использовалась...
+137
/*
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)
*/
как обычно вместо того чтобы написать программу с нуля,был найден код на бейсике и начал безжалостно копипаститься в С
ну и сам код на бэйсике естественно тоже говно
+131
int newclient(var v, newconn oldconn) {
[...]
}
Ничего особенного, конечно. Просто порадовало "newconn oldconn".
+144
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... ...автор - лид-программист...
+139
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;
}
Определение максимальной цифры в восьмеричной записи числа.
Особенно радует вызов функции возведения в степень для двойки, да и сама функция тоже.
+141
#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;
}
Вот такое вот обнуление старшего бита
+136
#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 в институте. Оправдано такое написание или все же лучше пользоваться библиотечными функциями?