- 1
- 2
- 3
- 4
- 5
void ps(const char *a)
{/*means putstring*/
for(; '\0' != *a; a++)
putchar(' ' != *a ? *a : (putchar('\n'),'\t'));
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+136
void ps(const char *a)
{/*means putstring*/
for(; '\0' != *a; a++)
putchar(' ' != *a ? *a : (putchar('\n'),'\t'));
}
Как-то ночью, в час унылый, в голове собрав все силы,
Разум темный, как могила, начал свой хромой закон.
Начиная выражаться, а точнее проявляться,
В мир безбрежный и зеленый, зло построило свой ход:
Пальцы тонкие и злые, подчиняясь темной силе,
Выхватив перо в чернилах, вывели сей говногод.
+131
////выполнение полного сброса, конфигурирования и проверки того что записано в регистрах
////0 - проверка неудачная
////1 - все нормально
BYTE ADE7758::Full_Check(void)
{
OS_DI();
if(Check())//проверка состояний регистров
return 1;//все нормально
else
{
Configure();
OS_Delay(1);//ждем пока нестабильность пройдет
if(Check())//проверка состояний регистров
return 1;//все нормально
else //после переконфигурации не все нормально - значит делаем ресет
{
OS_Delay(100);//ждем пока нестабильность пройдет
Reset(); //полный сброс
OS_Delay(10);//ждем еще чуть-чуть для завершения пересброса (на всякий случай)
Configure();//переконфигурация
//OS_Delay(500);//ждем пока нестабильность пройдет
if(Check())//снова проверка состояний регистров
return 1;//после пересброса все нормально
else
{
OS_Delay(500);//ждем пока нестабильность пройдет
Reset(); //полный сброс
Configure();//переконфигурация
OS_Delay(500);//ждем пока нестабильность пройдет
if(Check())//снова проверка состояний регистров
{
return 1;//после пересброса все нормально
}
else
{
return 0;//все проверки неудачные - выход с ошибкой
}
}
}
}
}
"Нельзя доверять никому. Совсем никому. Даже самому себе."
Разумеется это вызывается в прерывании 200 раз в секунду.
1 тик OS_Delay() = 10мс.
Разрешение прерываний после сделает "дядя Вася".
Зато знаем классы и умеем их писать.
+133
void DUR_check()
{
DUR_tick[DUR_link]=DUR_tmp_tick;
DUR_tmp_tick=0;
DUR_link++;
if(DUR_link > 9) DUR_link=0;
S32 tmp3 = DUR_tick[0] + DUR_tick[1] + DUR_tick[2] + DUR_tick[3] + DUR_tick[4] + DUR_tick[5] + DUR_tick[6] + DUR_tick[7] + DUR_tick[8] + DUR_tick[9];
//tmp3=((tmp3-HZ_MIN)*100)/(HZ_MAX-HZ_MIN);
tmp3=(tmp3/10)-50;
if(tmp3<0)tmp3=0;
if(tmp3>100)tmp3=100;
DUR_level=tmp3;
}
Первый блин, возможно комом.
Один из проектов, который был передан мне.
Это расчет процента заполнения ёмкости по частотному датчику.
DUR_tmp_tick - количество прерываний от датчика,
DUR_level - это и есть рассчитанные проценты.
Все переменные глобальные, фильтр организован.
Вызывается функция в другом прерывании, от таймера.
Впрочем, всё остальное тоже вызывается в прерывании от таймера.
+138
typedef struct {
UInt8 byte0;
UInt8 byte1;
UInt8 byte2;
UInt8 byte3;
UInt8 byte4;
UInt8 byte5;
UInt8 byte6;
UInt8 byte7;
UInt8 byte8;
UInt8 byte9;
UInt8 byte10;
UInt8 byte11;
UInt8 byte12;
UInt8 byte13;
UInt8 byte14;
UInt8 byte15;
} CFUUIDBytes;
http://developer.apple.com/library/ios/documentation/CoreFoundation/Reference/CFUUIDRef/Reference/reference.html
Nuff said.
+136
uint16_t min_id, next_id, id;
if (id - min_id < next_id - min_id) {
// ...
}
Сегодня обнаружил в своем, не покрытом тестами, говнокоде этот эпик-фейл.
Окрестосишкоблядился, что называется, по полной программе.
Условие должно было проверять, лежит ли id в диапазоне [min_id; next_id) с учетом перехода через 0.
Например min_id = 0xFFFE, next_id = 0x0003, id = 0x0002 должно вернуть true, а min_id = 43, next_id = 44, id = 42 - false.
+132
static volatile int rotatelog=0;
void daemonize();
void *receive_thread(void *ptr);
void *write_thread(void *ptr);
void sighup_hdl(int signal);
FILE *hfl_log;
int main(){
daemonize();
hfl_log=fopen(HM_LOGFILE, "a");
setlinebuf(hfl_log);
signal(SIGHUP,sighup_hdl);
receive_thread(NULL);
return 0;
}
void daemonize(){
int devnullfd = -1;
umask(~0700);
devnullfd = open("/dev/null", 0);
dup2(devnullfd, STDIN_FILENO);
dup2(devnullfd, STDOUT_FILENO);
close(devnullfd);
switch(fork()) {
case -1:
perror("fork");
exit(1);
break;
case 0:
break;
default:
exit(0);
break;
}
}
void *receive_thread(void *ptr){
int udpsock, i;
struct _peventmsg *pmsg;
struct sockaddr_in serv;
socklen_t servlen;
ssize_t len;
time_t tm;
char sign1[SHA_DIGEST_LENGTH], sign2[SHA_DIGEST_LENGTH];
udpsock=socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (udpsock==-1)
return NULL;
i=32*1024*1024;
setsockopt(udpsock, SOL_SOCKET, SO_RCVBUFFORCE, (void*)&i, sizeof(i));
memset(&serv, 0, sizeof(serv));
serv.sin_family = AF_INET;
serv.sin_port = htons(TSPORT);
serv.sin_addr.s_addr = inet_addr(TSIP);
if (bind(udpsock, (struct sockaddr *)&serv, sizeof(struct sockaddr_in))){
close(udpsock);
return NULL;
}
while (1){
if (rotatelog){
rotatelog=0;
//fflush(hfl_log); fclose() should be enough
fclose(hfl_log);
hfl_log=fopen(HM_LOGFILE, "a");
//do we really tail -f that much on this log that we need it line buffered? It requires 1 write per incoming packet
setlinebuf(hfl_log);
}
pmsg=(struct _peventmsg *)malloc(sizeof(struct _peventmsg));
servlen=sizeof(serv);
len=recvfrom(udpsock, &pmsg->msg, sizeof(pmsg->msg), 0, (struct sockaddr *)&serv, &servlen);
if (len!=sizeof(pmsg->msg)){
free(pmsg);
continue;
}
time(&tm);
if (pmsg->msg.tm+20<tm || pmsg->msg.tm-20>tm){
free(pmsg);
continue;
}
memcpy(sign1, pmsg->msg.sign, sizeof(sign1));
memset(pmsg->msg.sign, 0, sizeof(pmsg->msg.sign));
strcpy(pmsg->msg.sign, SECRET);
SHA1((unsigned char *)&pmsg->msg, sizeof(pmsg->msg), (unsigned char *)sign2);
if (memcmp(sign1, sign2, sizeof(sign1))){
free(pmsg);
continue;
}
strcpy(pmsg->ip, inet_ntoa(serv.sin_addr));
fprintf(hfl_log, "%ld %s %lu %u %u %u %u %s\n",
le64toh(pmsg->msg.tm), pmsg->msg.ip, le64toh(pmsg->msg.bytessent), le32toh(pmsg->msg.seconds),
le32toh(pmsg->msg.ttype), le32toh(pmsg->msg.tcpi_total_retrans), le32toh(pmsg->msg.tcpi_snd_mss), pmsg->ip);
free(pmsg);
}
}
Traffic analysis tool: http://vasil.ludost.net/blog/?p=3029
+140
static inline uint64_t parse_hex_uint64(const char *s) {
const uint64_t m1 = 0x4040404040404040ll;
const uint64_t m2 = 0x000F000F000F000Fll;
const uint64_t m3 = 0x0F000F000F000F00ll;
const uint64_t *p = (const uint64_t*)s;
int64_t a = p[0], b = p[1];
a += ((a & m1) >> 6) * 9;
b += ((b & m1) >> 6) * 9;
a = (a & m2) << 12 | (a & m3);
b = (b & m2) << 12 | (b & m3);
a |= a >> 24;
b = b >> 8 | b << 16;
return (a & 0x0000FFFF00000000ll) | (a & 0xFFFF) << 48 | b >> 48 | (b & 0xFFFF0000);
}
По мотивам http://govnokod.ru/12800#comment173346.
Байтоёбский парсинг шестнадцатеричного числа. Версия для 64 битного проца.
https://ideone.com/IFG0fH
+142
void free_transaction(p_transaction_t trans) {
p_transaction_t next = trans->next;
while (next) {
trans->next = next->next;
free_transaction(next);
next = trans->next;
}
xfree(trans);
}
Освобождение списка.
+102
if (sscanf(buf, "%d-%d-%d %d:%d:%d %d.%d.%d.%d %s %d.%d.%d.%d %llu %llu %llu %llu %d %d %d",
&r->year,&r->month,&r->day,&r->hour,&t5,&t6,&s1,&s2,&s3,&s4,&r->iface,&d1,&d2,&d3,&d4,
&r->packets_out,&r->bytes_out,&r->packets_in,&r->bytes_in,&r->proto,&r->sport,&r->dport)<22) {
printf("Syntax error at line %u\n", t->count + 1);
/* ... some cleanup ...*/
return 0;
}
Вот так я читал строку из текстового файла в моем первом боевом проекте.
+135
// где-то в коде нашлось
PRIVATE IdxArray* idx_array_append_val_dyn(IdxArray* arr, PlmIndex idx)
// private.h
#ifdef PLM_TEST
#define PRIVATE extern
#else
#define PRIVATE static
#endif
внезапно...