- 1
- 2
- 3
if (access(path, aflag) && mkfifo(path, mode) {
exit(-1);
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+133
if (access(path, aflag) && mkfifo(path, mode) {
exit(-1);
}
Весьма интуитивная запись условия
+140
http://yadi.sk/d/4HDnPUi2MCCRa
Мисато и говнокод.
Здесь мы видим пять прототипов WinMain'а подряд, а шестой, который чуть пониже, использует вывод типов сишкофичу int-по-умолчанию...
P.S. Скорее всего этот пост заминусуют за оффтоп и передачу по ссылке, но я просто не мог не выложить этот снимок ;)
+131
int main(void)
{
printf ("NIGGA0");
int pipeKey, pipeText, i,test;
char key[BUFSIZEKEY];
char *p;
char buf;
pipeKey = open(PATHKEY, O_RDONLY);
//for (p = key; read(pipeKey, p, 1); p++);
for (i=0; i<BUFSIZEKEY; i++)
{
read(pipeKey, &key[i], 1);
}
close(pipeKey);
pipeKey = open(PATHTEXT, O_RDONLY);
printf ("NIGGA1");
//for (i=1; read(pipeText, &buf, 1); i++)
for (i=1; i<=20; i++)
{
printf ("nigersonly");
printf ("\n-----\n i= %d test= %c \n-----\n", i, buf);
Чувак минут 20 не мог понять, почему у него buf всегда 0 в последней строчке из приведённых. printf'ы тоже норм =)
+133
#ifndef ORDER32_H
#define ORDER32_H
#include <limits.h>
#include <stdint.h>
#if CHAR_BIT != 8
#error "unsupported char size"
#endif
enum
{
O32_LITTLE_ENDIAN = 0x03020100ul,
O32_BIG_ENDIAN = 0x00010203ul,
O32_PDP_ENDIAN = 0x01000302ul
};
static const union { unsigned char bytes[4]; uint32_t value; } o32_host_order =
{ { 0, 1, 2, 3 } };
#define O32_HOST_ORDER (o32_host_order.value)
#endif
Говнокод из http://stackoverflow.com/questions/2100331/c-macro-definition-to-determine-big-endian-or-little-endian-machine
Мало того, что писать в один тип из юниона и потом читать из другого это UB, так еще компилятор (в случае GCC) из
int main(void)
{return O32_HOST_ORDER == O32_LITTLE_ENDIAN;}
main:
xor eax, eax
cmp DWORD PTR o32_host_order[rip], 50462976
sete al
ret
o32_host_order:
.byte 0
.byte 1
.byte 2
.byte 3
+131
/*
=====================
Q_acos
the msvc acos doesn't always return a value between -PI and PI:
int i;
i = 1065353246;
acos(*(float*) &i) == -1.#IND0
This should go in q_math but it is too late to add new traps
to game and ui
=====================
*/
Астрологи объявили неделю Деда Лайна - количество говнокода и костылей увеличилось вдвое.
+134
/* A C statement or statements which output an assembler instruction
opcode to the stdio stream STREAM. The macro-operand PTR is a
variable of type `char *' which points to the opcode name in its
"internal" form--the form that is written in the machine description.
GAS version 1.38.1 doesn't understand the `repz' opcode mnemonic.
So use `repe' instead. */
#undef ASM_OUTPUT_OPCODE
#define ASM_OUTPUT_OPCODE(STREAM, PTR) \
{ \
if ((PTR)[0] == 'r' \
&& (PTR)[1] == 'e' \
&& (PTR)[2] == 'p') \
{ \
if ((PTR)[3] == 'z') \
{ \
fputs ("repe", (STREAM)); \
(PTR) += 4; \
} \
else if ((PTR)[3] == 'n' && (PTR)[4] == 'z') \
{ \
fputs ("repne", (STREAM)); \
(PTR) += 5; \
} \
} \
else \
ASM_OUTPUT_AVX_PREFIX ((STREAM), (PTR)); \
}
Костыль из GCC. Ассемблер GAS версии 1.38.1 не переваривает мнемоники repz и repnz. Эта макрохрень перекодирует их в repe и repne соответственно
https://github.com/mirrors/gcc/blob/master/gcc/config/i386/gas.h#L81
+136
#include <stdio.h>
#include <inttypes.h>
inline uint8_t mid_ch (uint8_t a, uint8_t b, uint8_t res)
{
if (b == 0){ if (a >= 2) return mid_ch (a-2, b , res+1); else return res;}
if (a == 0){ if (b >= 2) return mid_ch (a , b-2, res+1); else return res;}
return mid_ch (a-1, b-1, res+1);
}
uint64_t mid_0_ch (uint64_t a, uint64_t b)
{
return mid_ch(a, b, 0);
}
int main(void)
{
printf("%u %u", mid_0_ch (253, 123), (253+123)/2);
return 0;
}
Нахождение среднего арифметического двух чисел через рекурсию. Сначала сделал для uint64_t чтобы это имело смысл, ведь сложение двух 64-битных чисел с записью результата в третье может привести к целочисленному переполнению (для 64-битных чисел, сложение которых может привести к переполнению, этот код работал чрезвычайно медленно, поэтому я ограничился 8-битными). При таком наркоманско-рекурсивном алгоритме этого переполнения не будет. 128-битные типы есть только как нестандартное расширение, но тогда еще возникает вопрос, как найди среднее арифметическое двух таких 128-битных чисел? А если есть 256-битные, то как тогда их них находить среднеарифметическое... ну и так далее.
Можно эту проблему еще решать через битовые маски т.е. убрать из обеих чисел самые старшие биты (предварительно сохранив их), сложить эти два числа, поделить на два, потом уже эти сохраненные биты вида 10000... или 0000... оба поделить на 2(сдвинуть на один разряд) и прибавить. Наркоманство какое-то.
Почему бы не сделать в С некий особый целочисленный тип, в котором любая фигня влезет, но который бы использовался только временно для промежуточных вычислений, чтобы не делать бэкапы битиков всяких?
+129
int minus(int ch)
{
if (ch < 0)
{
char buf[255];
char *chs = itoa(ch);
char *chsn = (char*)calloc(1, strlen(chs)+1];
memset(chsn, 0, strlen(chs)+1);
chsn[0] = '-';
for (int i = 1, int j = 0; j < strlen(chs); i++, j++)
{
chsn[i] = chs[j];
}
int ret = atoi(chsn);
return ret;
}
else
{
char buf[255];
char *chs = itoa(ch);
char *chsn = (char*)calloc(1, strlen(chs)+1];
memset(chsn, 0, strlen(chs)+1);
for (int i = 1, int j = 0; i < strlen(chs); i++, j++)
{
chsn[j] = chs[i];
}
int ret = atoi(chsn);
return ret;
}
}
+133
FRebuildSubdocPlcpcd(pdsr, ddsr, edcDrp)
struct DSR *pdsr;
int ddsr;
int edcDrp;
{
/* we pull some tricks here because the normal editing situation doesn't cover
what we're trying to do:
1. We don't disturb the old chEop at the end of the subdoc until after
we have replaced the old pieces with the new one; then we delete it
surgically (we know it has either a different fn or noncontiguous
fc from the new stuff -- so just subtract ccpEop from cpMac and
remove the last pcd entry)
2. The plcfnd/plchdd needn't take part in the editing, since the CP
bounds will be the same after as they were before, and in fact
AdjustCp doesn't know how to handle editing the subdoc data -- so
we hide the plc from the editing
*/
int doc = pdsr->doc;
int docSubdoc;
int ipcd;
CP ccpSubdoc;
struct DOD *pdod;
struct PLC **hplcfnd;
struct PLC **hplcfld;
struct DRP *pdrp;
struct CA ca1, ca2;
struct PLC **hplcpcd, **hplcpcdSub;
CP *pccpSubdoc;
struct PCD pcd;
/* momentarily break link to subdoc doc in dod so that ReplaceCps
doesn't get confused. */
pdrp = ((int *)PdodDoc(doc)) + edcDrp;
docSubdoc = pdrp->doc;
pccpSubdoc = ((int *)pdsr) + ddsr;
ccpSubdoc = *pccpSubdoc;
pdrp->doc = docNil;
if (docSubdoc != docNil && ccpSubdoc != cp0)
{
/* hide the subdoc plcfnd */
pdod = PdodDoc(docSubdoc);
hplcfnd = pdod->hplcfnd;
hplcfld = pdod->hplcfld;
pdod->hplcfnd = hNil;
pdod->hplcfld = hNil;
/* replace original piece table for subdoc with new --
note that we leave the chEop at end temporarily */
ccpSubdoc -= ccpEop;
if (!FReplaceCps(PcaSet(&ca1, docSubdoc, cp0, ccpSubdoc),
PcaSet(&ca2, doc, pdsr->ccpText, pdsr->ccpText + ccpSubdoc)))
return fFalse;
/* now replace the PCD for the chEop left over from olden times;
unfortunately, the editing routines can't do this for us */
hplcpcd = PdodDoc(doc)->hplcpcd;
if ((ipcd = IpcdSplit(hplcpcd, pdsr->ccpText + ccpSubdoc)) == iNil)
return fFalse;
GetPlc(hplcpcd, ipcd, &pcd);
hplcpcdSub = PdodDoc(docSubdoc)->hplcpcd;
PutPlc(hplcpcdSub, IMacPlc(hplcpcdSub) - 1, &pcd);
if ((ipcd = IpcdSplit(hplcpcdSub, ccpSubdoc+ccpEop)) == iNil)
return fFalse;
PutPlc(hplcpcdSub, ipcd-1, &pcd);
/* eliminate the footnote/header text from the main doc */
ca2.cpLim += ccpEop;
if (!FDelete(&ca2))
return fFalse;
pdod = PdodDoc(docSubdoc);
/* restore plcfnd */
pdod->hplcfnd = hplcfnd;
pdod->hplcfld = hplcfld;
pdod->fDirty = fFalse;
TruncateAllSels(docSubdoc, pdod->cpMac);
}
/* restore docFtn/docHdr */
pdrp = ((int *)PdodDoc(doc)) + edcDrp;
pdrp->doc = docSubdoc;
return fTrue;
}
Word for Windows 1.1a. 17 мегабайт отборного говнокода.
http://habrahabr.ru/post/217081/
+131
#ifndef _AVRECORD_H__INCLUDED_
#define _AVRECORD_H__INCLUDED_
#include
//! Структура сигнатуры
typedef struct SAVSignature{
SAVSignature(){
this->Offset = 0;
this->Lenght = 0;
memset(this->Hash, 0, sizeof(this->Hash));
}
DWORD Offset; // - Смещение файле
DWORD Hash[4]; // - MD5 хэш
DWORD Lenght; // - Размер данных
} * PSAVSignature;
//! Структура записи о зловреде
typedef struct SAVRecord{
SAVRecord(){
this->Name = NULL;
this->NameLen = 0;
}
~SAVRecord(){
if(this->Name != NULL) this->Name;
}
//! Выделение памяти под имя
void allocName(BYTE NameLen){
if(this->Name == NULL){
this->NameLen = NameLen;
this->Name = new CHAR[this->NameLen + 1];
memset(this->Name, 0, this->NameLen + 1);
}
}
PSTR Name; // - Имя
BYTE NameLen; // - Размер имени
SAVSignature Signature; // - Сигнатура
} * PSAVRecord;
#endif
Пишем антивирус на аццкой помеси Си, ООП-стайла, говнокода и синтаксических ошибок.
http://hack-academy.ru/programming/system/361-pishem-svoj-antivirus-na-c.html