- 1
http://ithappens.ru/story/11670
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+130
http://ithappens.ru/story/11670
+139
// drivers/usb/serial/cp210x.c
static void cp210x_close(struct usb_serial_port *port)
{
usb_serial_generic_close(port);
cp210x_set_config_single(port, CP210X_IFC_ENABLE, UART_DISABLE);
}
Дело было так.
На прошлой неделе, по просьбе одного знакомого, я сел писать прошивку для attiny2313, которая должна принять по RS-232 строчку и исполнить соответствующую команду. Потратив несколько минут на раскур даташита, а именно главы, посвященной USART, я набросал тупейший код на сях, залил его на чип, и затестил через миником. Все работало нормально, ничто не предвещало беды...
Но когда я попробовал послать команду через echo, меня ждал облом. Она не выполнилась. На 10 раз проверил код - все ок, в миникоме пашет идеально, через echo - куй. Под виндой та же ересь. Чем отличается echo от миникома? Правильно, тем, что оно отправляет символы подряд, без пауз. Контроллер тактировался от внутренного генератора, поэтому я подумал, что оный хреново откалиброван, и что надо бы его настроить... Вечер ушел на написание прошивки для калибровки... Оказалось, что частота действительно уплыла на 2% от расчетной, что некритично. Ну да пофиг, откалибровался до +-0.5%. Запустил echo - куй. Послал все нахрен, и пошел спать...
(Продолжение в комменте ниже)
+135
static int
wl_iw_get_country(
struct net_device *dev,
struct iw_request_info *info,
union iwreq_data *wrqu,
char *extra
)
{
char *ccode;
int current_channels;
WL_TRACE(("%s\n", __FUNCTION__));
ccode = dhd_bus_country_get(dev);
if(ccode){
if(0 == strcmp(ccode, "Q2"))
current_channels = 11;
else if(0 == strcmp(ccode, "EU"))
current_channels = 13;
else if(0 == strcmp(ccode, "JP"))
current_channels = 14;
}
sprintf(extra, "Scan-Channels = %d", current_channels);
printk("Get Channels return %d,(country code = %s)\n",current_channels, ccode);
return 0;
}
На этот раз отличился броадком.
Подсказка: Пользователи с кантри-кодом RU должны СТРАДАТЬ!
+136
/*
* Just a wifi driver hooker.
*
* Yongle Lai @ 2009-05-10 @ Rockchip
*/
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
MODULE_LICENSE("Dual BSD/GPL");
#ifdef CONFIG_MODVERSIONS
#define MODVERSIONS
#include <linux/modversions.h>
#endif
//#define OLD_WIFI_IFACE
#ifdef OLD_WIFI_IFACE
extern int mv88w8686_if_sdio_init_module(void);
extern void mv88w8686_if_sdio_exit_module(void);
#else
extern int rockchip_wifi_init_module(void);
extern void rockchip_wifi_exit_module(void);
#endif
static int wifi_launcher_init(void)
{
int ret;
printk("=======================================================\n");
printk("==== Launching Wi-Fi driver! (Powered by Rockchip) ====\n");
printk("=======================================================\n");
#ifdef OLD_WIFI_IFACE
ret = mv88w8686_if_sdio_init_module();
if (ret) /* Try again */
ret = mv88w8686_if_sdio_init_module();
#else
ret = rockchip_wifi_init_module();
//if (ret) /* Try again */
// ret = rockchip_wifi_init_module();
#endif
return ret;
}
static void wifi_launcher_exit(void)
{
printk("=======================================================\n");
printk("== Dis-launching Wi-Fi driver! (Powered by Rockchip) ==\n");
printk("=======================================================\n");
#ifdef OLD_WIFI_IFACE
mv88w8686_if_sdio_exit_module();
#else
rockchip_wifi_exit_module();
#endif
}
module_init(wifi_launcher_init);
module_exit(wifi_launcher_exit);
Вот так вот, просто и незатейливо на RK3188 включается и выключается вайфай.
+136
int rkwifi_set_country_code(char *code)
{
sprintf(code, "%s", "EU");
return 0;
}
Где-то в сырцах драйвера вайфая от RK3188...
+115
#define TEN 10
#define TEEN 100
#define TEEEN 1000
+137
int memcmp (const void* v1, const void* v2, size_t n)
{
uint32_t *s1;
uint32_t *s2;
size_t i;
s1 = (uint32_t*) v1;
s2 = (uint32_t*) v2;
for (i = 0; i < n; i++) {
if (*s1 != *s2) {
return *(const uint32_t *)s1 >
*(const uint32_t *)s2 ? 1 : -1;
}
s1++;
s2++;
}
return 0;
}
Реализация memcmp в библиотеке одной малоизвестной "учебной" ОС реального времени. Учебной в том смысле, что по этой системе разве что доклады, презентации и статьи делали, где-то реально она вряд ли использовалась.
Для интересующихся http://pok.safety-critical.net/
+143
VariableValue *locVars;
locVars = new VariableValue;
locVars->variable = "r";
locVars->value = mTaskParameters.rNodes[0]; //x_low;
locVars->link = new VariableValue;
locVars->link->variable = "theta";
locVars->link->value = mTaskParameters.thetaNodes[0]; //y_low;
locVars->link->link = new VariableValue;
locVars->link->link->variable = "r_min";
locVars->link->link->value = mTaskParameters.rNodes[0]; //this->x_low;
locVars->link->link->link = new VariableValue;
locVars->link->link->link->variable = "r_max";
locVars->link->link->link->value = mTaskParameters.rNodes[mTaskParameters.rNodes.size()-1]; //this->x_high;
locVars->link->link->link->link = NULL;
Построение связного списка
+108
assert(buf=malloc(BUF_SIZ));
А в релизе мы сэкономим памяти
+134
int t, max, x;
scanf("%d", &x);
for(t=x%10; max!=t; max=t);
for(t=x%100/10; max<t; max=t);
for(t=x%1000/100; max<t; max=t);
for(t=x/1000; max<t; max=t);
printf("Max: %d\n", max);
Нахождение максимальной цифры в 4-значном числе. Одна из первых лаб по Си. Предполагалось использование if, но студенты не ищут лёгких путей. (Сдвиги они пока не учили, так что на вычисление цифры не обращайте внимания.)