- 1
- 2
if (in)
goto out;
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+145
if (in)
goto out;
Найдено на просторах ядра (fsl_esai.c кому интересно). Не ГК само по себе но читается замечательно.
+142
if (false == very_long_function(arg1, arg2, ...))
{
if (false == very_long_other_function(even_more_args)
{
do_something();
}
else
{
do_something_else();
}
}
И вот такими многоэтажками забит весь проект.
+140
void GetPublicKey(char *destination, int len)
{
GetPrivateKey(destination, len);
}
+137
static const uint32_t frequencies[] = {
#include "frequencies.h"
};
+142
#include <inttypes.h>
#include <stdio.h>
typedef union
{
struct
{
#define BITG(n) uint8_t bit##n : 1
BITG(0);
BITG(1);
BITG(2);
BITG(3);
BITG(4);
BITG(5);
BITG(6);
BITG(7);
#undef BITG
} bits;
uint8_t value;
}getbit;
uint8_t bit_sum(uint8_t, uint8_t);
uint8_t bit_sum(uint8_t a, uint8_t b)
{
getbit op1, op2, opr;
uint8_t carry;
op1.value=a; op2.value=b;
#define OP1(n) op1.bits.bit##n
#define OP2(n) op2.bits.bit##n
#define OPR(n) opr.bits.bit##n
#define XOR(a,b) ((a)^(b))
#define AND(a,b) ((a)&(b))
OPR(0) = XOR(OP1(0), OP2(0));
carry = AND(OP1(0), OP2(0));
#define SETBIT(n) \
OPR(n) = XOR \
( \
carry, \
XOR(OP1(n), OP2(n)) \
);
#define CARRYBIT(n) \
carry = XOR \
( \
AND(OP1(n), OP2(n)), \
AND \
( \
XOR(OP1(n), OP2(n)), \
carry \
) \
);
SETBIT(1);
CARRYBIT(1);
SETBIT(2);
CARRYBIT(2);
SETBIT(3);
CARRYBIT(3);
SETBIT(4);
CARRYBIT(4);
SETBIT(5);
CARRYBIT(5);
SETBIT(6);
CARRYBIT(6);
SETBIT(7);
return opr.value;
#undef SETBIT
#undef CARRYBIT
#undef OP1
#undef OP2
#undef OPR
#undef XOR
#undef AND
}
int main (int argc, char *argv[], char *envp[])
{
uint8_t a, b, c;
scanf ("%"SCNu8"%"SCNu8, &a, &b);
c = bit_sum(a,b);
printf("%"PRIu8"\n", c);
return 0;
}
Побитовое сложение двух 8-битных чисел по схеме двоичного сумматора
+105
x = x + exp(ln(2)*i);
Встретил в коде опроса датчика, не сразу понял, что это делает.
Когда понял, понял что лучше бы не понимал.
+132
struct ass {
void (*func)(const char *, void *);
void *data;
} asses[] = {
{ NULL, NULL },
/* Тут типа scanf */
{ NULL, NULL },
};
while (getopt_long_only(argc, argv, "", long_options, &option_index) != -1) {
if (option_index < 0)
return 1;
struct ass *derp = &asses[option_index];
if (derp->func != NULL)
derp->func(optarg, derp->data);
}
Правим код начальника.
+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)
А еще там в том исходнике в качестве отступов используются и пробелы и табы. Вообще там очень много говнокода
+139
...
// GRAY SCALE:
#define ER_COLOR_BLACK_DEEP3 ccc3(0, 0, 0)
#define ER_COLOR_BLACK_DEEP4 ccc4(0, 0, 0, 255)
#define ER_COLOR_BLACK3 ccc3(38, 38, 38)
#define ER_COLOR_BLACK4 ccc4(38, 38, 38, 255)
#define ER_COLOR_SIDEMENU_SELECTED3 ccc3(47, 47, 47)
#define ER_COLOR_LETTER_VIEW3 ccc3(51, 51, 51)
#define ER_COLOR_SIDEBAR_BG3 ccc3(58, 58, 58)
#define ER_COLOR_SIDEBAR_BG4 ccc4(58, 58, 58, 255)
#define ER_COLOR_BAR_BG_GRAY3 ccc3(82, 82, 82)
#define ER_COLOR_AUTHOR_NAME3 ccc3(103, 103, 103)
#define ER_COLOR_SIDE_WIDGET3 ccc3(255, 255, 255)
#define ER_COLOR_SIDE_WIDGET4 ccc4(255, 255, 255, 255)
#define ER_COLOR_GRAY_TUT3 ccc3(115, 115, 115)
#define ER_COLOR_GRAY3 ccc3(130, 130, 130)
#define ER_COLOR_PULL_LABEL3 ccc3(142, 142, 142)
#define ER_COLOR_SEND_BG4 ccc4(158, 158, 158, 255)
#define ER_COLOR_SEND_BG3 ccc3(158, 158, 158)
#define ER_COLOR_BADGE_GRAY3 ccc3(149, 149, 149)
#define ER_COLOR_BADGE_GRAY4 ccc4(149, 149, 149, 255)
#define ER_COLOR_SEPARATOR3 ccc3(195, 195, 195)
#define ER_COLOR_LABELS_GRAY3 ccc3(170, 170, 170)
#define ER_COLOR_AUTHOR_CAPTION3 ccc3(173, 173, 173)
#define ER_COLOR_SAFE_EXIT_BG4 ccc4(189, 189, 189, 255)
#define ER_COLOR_SAFE_EXIT_BG3 ccc3(189, 189, 189)
#define ER_COLOR_MENU_GRAY_ONE3 ccc3(204, 204, 204)
#define ER_COLOR_PUSHED_ELEMENT3 ccc3(205, 205, 205)
#define ER_COLOR_GRAY_208_3 ccc3(208, 208, 208)
#define ER_COLOR_GRAY_208_4 ccc4(208, 208, 208, 255)
#define ER_COLOR_MENU_GRAY_TWO3 ccc3(216, 216, 216)
#define ER_COLOR_NEW_GAME_BACK3 ccc3(216, 216, 216)
#define ER_COLOR_NEW_GAME_BACK4 ccc4(216, 216, 216, 255)
#define ER_COLOR_WHITE_222_3 ccc3(222, 222, 222)
#define ER_COLOR_WHITE_232_3 ccc3(232, 232, 232)
#define ER_COLOR_WHITE_MY_PLATE3 ccc3(243, 243, 243)
#define ER_COLOR_WHITE_INTRO4 ccc4(232, 232, 232, 255)
#define ER_COLOR_WHITE3 ccc3(255, 255, 255)
#define ER_COLOR_WHITE4 ccc4(255, 255, 255, 255)
50 оттенков серого в нашем приложении.
+137
for (i = 1; i < argc; i++) {
p = argv[i];
if ((*p != '-') && (*p != '/'))
{
printf("Unknown option %s\n", p);
return 1;
}
p++;
if (strncmp(p, "pcir=", 5) == 0)
{
sscanf(p+5, "%lli", &pci_raddr);
opt |= 1;
}
if (strncmp(p, "pciw=", 5) == 0)
{
sscanf(p+5, "%lli", &pci_waddr);
opt |= 2;
}
if (strncmp(p, "rwlen=", 6) == 0)
sscanf(p+6, "%i", &rwlen);
if (strncmp(p, "count=", 6) == 0)
sscanf(p+6, "%i", &count);
if (strncmp(p, "ch=", 3) == 0)
channel = p+3;
if (strncmp(p, "poll", 4) == 0)
poll = 1;
if (strncmp(p, "fpga_read=", 10) == 0)
{
sscanf(p+10, "%i", &offset);
fpga_read_flag = 1;
}
if (strncmp(p, "fpga_write=", 11) == 0)
{
sscanf(p+11, "%i", &offset);
fpga_write_flag = 1;
}
if (strncmp(p, "data=", 5) == 0)
{
sscanf(p+5, "%i", &data);
data_valid = 1;
}
if (strncmp(p, "dump_to_file=", 13) == 0)
{
filename = p+13;
dump_to_file = 1;
}
if (strncmp(p, "loadnios", 8) == 0)
{
filename = p+8;
load_nios = 1;
}
if (strncmp(p, "DUMP", 4) == 0) // -DUMP
dump = 1;
if (strncmp(p, "flash_read", 10) == 0) // -flash_read
{
flash_read_flag = 1;
}
if (strncmp(p, "file_to_flash", 13) == 0) // -file_to_flash
file_to_flash = 1;
if (strncmp(p, "file=", 5) == 0) // -file
{
fname = p+5;
}
if (strncmp(p, "base=", 5) == 0) // -base
{
sscanf(p+5, "%i", &base);
basevalid = 1;
}
if (strncmp(p, "card=", 5) == 0) // -crd
sscanf(p+5, "%i", &card);
if (strncmp(p, "ver", 3) == 0)
ver = 1;
if (strncmp(p, "dev=", 4) == 0) // -deм
dev = p+4;
}
"А я напишу свой собственный комманд лайн парсер, с хуитой и говном"