- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
if(true)
{
//Код
}
else
{
//Закомментированно, но компилируется. ^_^
};
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+138.2
if(true)
{
//Код
}
else
{
//Закомментированно, но компилируется. ^_^
};
Способ комментирования... O_o
+138.1
unsigned char SIM300_Reboot(void)
{
// проверим статус модема
if (!pinSTATUS) // если STATUS = 0 (модем выключен)
{
while (1) //если не включается-включаем до посинения
{
if (!(Modem_ON()))
return 0;
}
} else // если STATUS = 1 (модем включен)
{
while (1) //если не выключается - выключаем до посинения
{
if ((!Modem_OFF()) && (!Modem_ON()))
return 0;
}
}
}
тяжёлые будни программиста embedded-систем.
дополнительный аромат: упомянутые функции возвращают 0 в случае успешного выполнения, а не наоборот, как можно было бы подумать при виде if (!some_func(...))
+138.1
sprintf(cmd, "%supd_downloader -p upd_downloader\\bin %s %s -a %s",
#if defined(__unix__)
"./",
#else
"",
#endif
arg1,
option->arg2 ? arg2 : "",
#if defined(__i386__) || defined(_M_X86)
"i686"
#else
"x86_64"
#endif
);
res = run_command(cmd);
Обнаружил в коде. Типа портируемый код =) Да еще и sprintf() ...
+138
/*
Исходный код бутлоадера непонятными букафками
vk.com/wctstudio
*/
Lp BP hm // В регистр SI помещаем адрес сообщения
Pi AL aa // Вызываем функцию печати строки
Pl OP // Вечный цикл для корректной работы программы
/* Процедура печати символа (процедура 1) */
Le AP // Помещаем в регистр AH число AP (15). Объясняем БИОС-у то,
// что нам нужно вывести один символ на экран. В регистре AL
// хранится ASCII значение нашего сообщения
Lh AA // В регистр BH - 0, соответственно, это и есть номер страницы
Ld AH // Ну а в регистр BL - 7, это значит, что у нас будет выводиться
// светло-серый текст на черном фоне
Mn BA // Как только видим Mn - сразу вспоминаем, что это прерывание
// На данный момент это прерывание 16 (десятичная система)
// а в hex - знакомое нам прерывание 0x10.
// Это прерывание BIOS - видео сервис
Md // Выходим из процедуры
/* Процедура вывода строки на экран (процедура 2) */
// вывод символа (процедура 3)
Ik AE // Помещаем в регистр AL значение из SI
Eg // Инкренмент (увеличение на единицу) регистра SI
Ai MA // Если значение регистра AL - 0 (т.е. строка закончилась), то
He AF // заканчиваем выполнение программы (выполнение процедуры 4)
// - 5 байт вперед на команду Md (выход из программы)
Pi PN oo // Если же строка не закончилась, то выполняем процедуру 1
// т.е. выводим символ, который находится в AL
Pl OE // Берем следующий символ из строки (выполнение процедуры 3)
Md // Все, закругляемся и выходим из программы
FH GD HE CA // ASCII: Wct (пробел)
GO GP GF CA // one (пробел)
GM GO HG GF // love
Aa // Конец строки обязан заканчиваться нулем, т.е. Aa :)
/* У нас осталось свободное место, до 512 байт нам нужно написать недостающие Aa (0) */
Aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
aa aa aa aa aa aa aa
// До 512 байт нам не хватает всего двух байтов..
Ff KK // FF KK - подпись загрузчика, чтобы компьютер понял,
// что это загрузчик, и его необходимо загрузить в
// память. В windows есть подписи "MZ" & "PE", а тут
// такое вот дело.
Не многие поймут этот код. Вернее, не многие лишь поймут код сей. Зачем это? Отвечаю: для того, чтобы помять моск.
github.com/Mihip/Wct
+138
if(argc > 6){
for(arg = argv[6]; strlen((char *)arg) >= 17 &&
isdigit(arg[0]) &&
isdigit(arg[1]) &&
isdigit(arg[3]) &&
isdigit(arg[4]) &&
isdigit(arg[6]) &&
isdigit(arg[7]) &&
isdigit(arg[9]) &&
isdigit(arg[10]) &&
isdigit(arg[12]) &&
isdigit(arg[13]) &&
isdigit(arg[15]) &&
isdigit(arg[16])
; arg+=18){
int t1, t2;
struct period *sp;
t1 = (arg[0] - '0') * 10 + (arg[1] - '0');
t1 = (t1 * 60) + (arg[3] - '0') * 10 + (arg[4] - '0');
t1 = (t1 * 60) + (arg[6] - '0') * 10 + (arg[7] - '0');
t2 = (arg[9] - '0') * 10 + (arg[10] - '0');
t2 = (t2 * 60) + (arg[12] - '0') * 10 + (arg[13] - '0');
t2 = (t2 * 60) + (arg[15] - '0') * 10 + (arg[16] - '0');
if(t2 < t1) break;
sp = myalloc(sizeof(struct period));
if(sp){
sp->fromtime = t1;
sp->totime = t2;
sp->next = acl->periods;
acl->periods = sp;
}
if(arg[17]!=',') break;
}
}
Получение временных диапазонов, из https://github.com/z3APA3A/3proxy/blob/devel/src/3proxy.c#L1470
Основное говно в том, что нифига не проверяются входные данные т.е. секунд и минут может быть больше 59, а часов может быть больше 23. И проверку if(t2 < t1) лучше заменить на if(t2 <= t1)
А еще там в том исходнике в качестве отступов используются и пробелы и табы. Вообще там очень много говнокода
+138
#define poff acurp + curp * (nSQs+2) /*probs: offset*/
long psum() {return c(poff+ 1);} long pmax() {return c(poff+2);}
long pn (long n) {return c(poff+2+n); }
void setp (long n, long x){set (poff+2+n, x);} /*prob changes:*/
void setmax (long x){set (poff+2, x);} /*metasearching*/
void setsum (long x){set (poff+1, x);}
long get2ndmax() {long n= poff+2, x=pmax(), m=n, s=0,end=n+nSQs;
do {n++;} while (c(n) != x); /*find 2nd-highest <=pmax*/
do {m++; if (s < c(m) && m !=n) s= c(m);}/*jue tncheck?*/
while (s < x && m < end); return s;}
void addtoSQ(long i, long val) {long x; /*increase prob of ith SQ*/
if (val < 1 || i >nSQs || i<1) return; /*not possible!*/
x = psum()+val;if (x > maxint) return; /*has max normalizer*/
setsum (x); /*normalizer +*/ x = pn(i)+val; setp(i, x);
if (x > pmax()) setmax (x);} /*maximal SQprob has increased */
void subofSQ(long i, long val) {long x; /*decrease prob of ith SQ*/
if (val < 1 || i >nSQs || i<1) return; /*not possible!*/
x = pn(i)-val; if (x < 0) return;/*no neg probabilities!*/
setsum (psum()- val); setp(i,x);/*don't check if =0!*/
if (x + val == pmax()) setmax (get2ndmax());} /*change of max*/
void incSQ() {long i= top(); addtoSQ(i,1);} /*top, not pop!*/
void decSQ() {long i= top(), x,y,z; /*decrem prob of the SQ*/
if (i> nSQs || i< 1) return;/*no such search Q number known*/
x = pn(i); if (x==0) return; /*SQ: already 0*/
y = psum(); z = pmax();
if (x == 1 && y <= z+1) stop /*leave at least 2 SQs*/
if (x == z) setmax (get2ndmax()); /*change of max*/
setp(i, x-1); setsum (y-1);} /*normalizer -1*/
long upSQ; /*SQ probability:enumerator += upSQ: increase*/
void oldSQ() {long a=pop()+ndecl, n,i; if(a<0||a> oldp)stop/*bad*/
n=old[a].size; a=old[a].start;/*all SQs of old nondecl: +upSQ*/
tncheck n+=a; for(i=a;i<n;i++)addtoSQ(SQ[q[i].Q], upSQ);}
void setpat() {long i= pop(); /*instantiate my search pattern*/
if (i<0 || i > patp) stop /*no such search pattern exists*/
set (acurp,i);}/*next SQ-search defined via new probabilities!*/
void pupat() {long i = apatp; /*push search pattern*/
if (i>maxpat) stop i++; set(apatp,i); /*not too many?*/
cpabn (poff+1, acurp + 1 + i *(2+ nSQs), 2 + nSQs,
acurp + 1, aendpats); }
void popat() {long i= apatp; if(i==0) stop
set(apatp,i-1); push(i); } /*pop search pattern*/
Полный исходник http://www.idsia.ch/~juergen/oopscode.c
+138
void print_tetral(int i){
switch(i){
case 1:
printf(" January February March\n");
printf("Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su\n");
break;
case 2:
printf(" April May June\n");
printf("Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su\n");
break;
case 3:
printf(" July August September\n");
printf("Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su\n");
break;
case 4:
printf(" October November December\n");
printf("Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su\n");
break;
default:
break;
}
}
+138
typedef enum { SUCCESS = 0, NOTNUMBER = 1, BOUNDS = 2, EOFREACHED = 3 } rdstat_t;
int flush_line(FILE *stream) {
int ch;
do {
ch = fgetc(stream);
} while (ch != EOF && ch != '\n');
return ch;
}
/* enough to contain (1 + length of ASCII string of SIZE_MAX
decimal representation) characters */
#define SIZE_T_BUF_SIZE 100
/* reads until newline or EOF, writes (size_t *out) if success */
rdstat_t read_size_t(FILE *stream, size_t *out) {
char str_SIZE_MAX[SIZE_T_BUF_SIZE];
snprintf(str_SIZE_MAX, SIZE_T_BUF_SIZE, "%zu", SIZE_MAX);
char buf[SIZE_T_BUF_SIZE];
if (!fgets(buf, SIZE_T_BUF_SIZE, stream))
return EOFREACHED;
if (buf[strlen(buf) - 1] != '\n') {
flush_line(stream);
return NOTNUMBER;
}
buf[strlen(buf) - 1] = 0;
char *ch;
for (ch = buf; *ch; ++ch)
if (!isdigit(*ch))
return NOTNUMBER;
if (strlen(buf) == strlen(str_SIZE_MAX) && strcmp(buf, str_SIZE_MAX) > 0)
return BOUNDS;
sscanf(buf, "%zu", out);
return SUCCESS;
}
Наваял функцию для чтения size_t из файла с защитой от дурака (писал код будучи больным, чесслово).
Ничего умнее печати SIZE_MAX в строчку и лексикографического сравнения для проверки границ введенного числа не придумал %)
+138
if (r_ptr->flags1 & (RF1_FEMALE)) my_strcpy(desc, "себя", max);
else if (r_ptr->flags1 & (RF1_MALE)) my_strcpy(desc, "себя", max);
else my_strcpy(desc, "себя", max);
Может, я чего-то не понимаю?
+138
{
"result":
{
"session":"f759ca20-****-****-****-273ffc13a26d",
"version":"1.0"
},
"status":
{
"error":"ok",
"errorMessage":""
}
}
takoy vot error