- 1
- 2
- 3
- 4
- 5
- 6
// for cdio:
#include <cdio.h>
#include <cdio_unconfig.h> # remove *all* symbols libcdio defines
// Add back in the ones you want your program
#include <config.h>
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+133
// for cdio:
#include <cdio.h>
#include <cdio_unconfig.h> # remove *all* symbols libcdio defines
// Add back in the ones you want your program
#include <config.h>
But now what about the problem that there are common preprocessor symbols in config_cdio.h that an application may want to define in a different manner, like PACKAGE_NAME?
For this, there is yet another header, <cdio/cdio_unconfig.h>.
+127
typedef struct _xjmp_stru {
unsigned long Ebp;
unsigned long Ebx;
unsigned long Edi;
unsigned long Esi;
unsigned long Esp;
unsigned long Eip;
} xjmp_stru;
typedef int xjmp_buf[6];
__declspec(naked)
int __cdecl xsetjmp(xjmp_buf)
{
__asm
{
mov edx, [esp+4]
mov [edx], ebp
mov [edx+4], ebx
mov [edx+8], edi
mov [edx+12], esi
mov [edx+16], esp
mov eax, [esp]
mov [edx+20], eax
xor eax, eax
ret
}
}
__declspec(naked, noreturn)
void __cdecl xlongjmp(xjmp_buf, int)
{
__asm
{
mov edx, [esp+4]
mov ebp, [edx]
mov ebx, [edx+4]
mov edi, [edx+8]
mov esi, [edx+12]
mov eax, [esp+8]
test eax, eax
jne __
inc eax
__:
mov esp, [edx+16]
add esp, 4
mov edx, [edx+20]
jmp edx
}
}
int dummy(xjmp_buf jbuf)
{
volatile int jk = 8;
if (jk)
xlongjmp(jbuf, 2);
else
return 7;
}
int main()
{
xjmp_buf jbuf;
if (xsetjmp(jbuf))
{
puts("excpt");
return -1;
}
dummy(jbuf);
puts("great work");
return 0;
}
экая хренотень
+125
#include <stdio.h>
#define MAXLINE 1000 /* максимальная длина строки в потоке */
int getline(char line[], int maxline);
main()
{
int len; /* длина текущей строки */
char line[MAXLINE]; /* текущая введённая строка */
while((len = getline(line, MAXLINE)) != (-1))
printf("%s", line);
system("PAUSE");
return 0;
}
/* getline: считывает строку в s, удаляет пробелы и знаки табуляции в конце строки, возвращает её длину. Удаляет полностью пустые строки */
getline(char s[], int lim)
{
int c, i;
for(i = 0; i < lim - 1 && (c = getchar()) != EOF && c != '\n'; ++i)
s[i] = c;
if (c == EOF)
return (-1); /* конец ввода */
else if (c == '\n') {
while(s[i-1] == ' ' || s[i-1] == '\t') /* "удаление" пробелов и знаков табуляции в конце строки */
--i;
if (i > 0) { /* если строка непустая */
s[i] = '\n';
++i;
}
s[i] = '\0';
return i;
}
}
Задача: убирать в конце каждой строки лишние пробелы и знаки табуляции, удалять полностью пустые строки.
Решение: при считывании строки вида "abc_____\n" на выходе получаем массив символов "abc\n\0___" (пробелы в конце). Печатаем строки по мере поступления, профит.
Говнокод или нормально?
+137
if (p)
free(p);
/* ... */
if (p)
q = realloc(p, size);
else
q = malloc(size);
немного классики.
из сырцов pdftohtml.
+142
#include <dos.h>
#include <conio.h>
#include <graphics.h>
void pix(unsigned int x, unsigned int y, unsigned char c){
unsigned char nb, ms, bt; //nomerbit maska bite
unsigned int ofs; //sdvig
unsigned char *pb; //ukazatel na bit
ofs= x/8 + y*80;
nb=7-(x % 8);
pb=(unsigned char *)MK_FP(0xA000, ofs);
bt=*pb;
ms=1<<nb;
if( c !=0 ){
bt=bt | ms;
}else{
bt=bt&(~ms);
};
*pb=bt;
};
void main(){
int drDriver, grMode;
drDriver=VGA;
grMode=VGAHI;
initgraph(&drDriver, &grMode, "C:\\BORLANDC\\BGI");
pix(60,30,15);
getch();
};
13: где взял адрес
28,29: с чего ты решил, что для паскалевского драйвера подходят определения сишного драйвера?
30: почему драйвер паскалевский?
all: ебанный пиздец, кто ж так пишет...
+125
#define DV_ERR_13 (DV_ERR_BASE + 15)
There, i fixed it!
Нашел в зловонных недрах Video for Windows. Если кому интересно, значение ни разу не 13, а 16.
+132
for (int i=0;i<16;i++)
{
if ((rbuf[i+1]>>16)!=(1<<i))
{
break;
res=SOME_ERROR;
}
};
/* in another function */
DWORD * rbuf =new DWORD[Size];
...
if (rbuf!=NULL) free(rbuf);
Вот такими библиотеками пользуются клиенты некоторых фирм ;)
+104
#ifdef _DEBUG
if ( !
#endif
dt_time_sprintf_current( tbuf, sizeof(tbuf), false )
#ifdef _RELEASE
;
#else
)
{
fprintf( stderr, "-- unable to get current time\n" );
}
#endif
}
#ifdef _DEBUG
;(
+132
#define COMMAND_MARKER '\x1B'
#define COMMAND_SET '='
#define COMMAND_XOR '^'
#define COMMAND_OR '|'
#define COMMAND_AND '&'
void usbWriteOut(uchar *data, int len)
{
while(len--) {
uchar c = *data;
buf[0] = buf[1];
buf[1] = buf[2];
buf[2] = buf[3];
buf[3] = c;
if(buf[0] == COMMAND_MARKER) {
uint8_t val = (hex2u(buf[2]) << 4) | hex2u(buf[3]);
if(buf[1] == COMMAND_SET) {
colorData = val;
}
else if(buf[1] == COMMAND_XOR) {
colorData ^= val;
}
else if(buf[1] == COMMAND_OR) {
colorData |= val;
}
else if(buf[1] == COMMAND_AND) {
colorData &= ~val;
}
}
}
}
Простой баг оказался крайне подлым!
При тестировании девайса терминалкой и чепятании команды ручками, каждый символ уходил в отдельном пакете и создавалось впечатление, что всё работает.
После чего девайс был собран с применением большого количества термоклея, так что исправление бага оказалось совершенно непростым занятием >_<
+131
struct tm lpstTimeRecordRet;
struct tm lpstTimeRecord;
lpstTimeRecordRet = *localtime_r ( &potiUnixTime, &lpstTimeRecord);
*фейс палм*