- 1
- 2
- 3
- 4
/* My favorite names for boolean values */
#define No 0
#define Yes 1
#define Maybe 2 /* tri-state boolean, actually */
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+136
/* My favorite names for boolean values */
#define No 0
#define Yes 1
#define Maybe 2 /* tri-state boolean, actually */
Исходный код юниксовой утилиты top. Файл boolean.h.
+135
const int volume=100;
int index=0;
struct memo
{ int nach;
int size;
char name[1];
}raboch[volume];
void main()
{ setlocale(LC_ALL, "rus");
int switc=0;
int i,r;
int p=1;
int tekadr=0;
int ID=0;
int razmer;
int zap;
int paz;
int realproc=0;
int vhod=0;
int tekad;
char c[1024];
for(i=1023;i>=0;i--) { c[i]='0';}
for(i=99;i>=0;i--) { raboch[i].name[0]=' ';}
while(p>0) {
cout<<"Выберите действие: 1-Выделить память 2-Очистить 3-Дефрагментировать 4-состояние памяти 5-содежимое памяти 6-выход \n";
cin>>r;
int k=1;
switch(r)
{
case 1:
cout<<"Введите имя процесса:";
cin>>raboch[ID].name;
cout<<"Введите размер выделяемой памяти в байтах:";
cin>>raboch[ID].size;
razmer=raboch[ID].size;
raboch[ID].nach=tekadr;
for(i=tekadr; razmer>0;razmer--) {c[i]=raboch[ID].name[0]; i++; }
tekadr+=raboch[ID].size;
ID++;
realproc=ID;
break;;
case 2:
cout<<"Введите ID убиваемого процесса:";
cin>>zap;
razmer=raboch[zap].size;
for(i=raboch[zap].nach;razmer>0;razmer--) { c[i]='0'; i++;}
raboch[zap].name[0]='0';
raboch[zap].size=0;
tekadr=raboch[zap].nach;
realproc--;
ID--;
index=realproc;
break;;
case 3:
zap=1;
paz=0;
for(i=0;i<=102;i++)
{
if(c[i]!='0')
{
}
else
{ tekad=i;
while(k>0)
{
zap++;
if(c[raboch[zap].nach]!='0')
{ paz=raboch[zap].size;
for(vhod=raboch[zap].nach;paz>0;paz--) {c[tekad]=c[vhod]; c[vhod]='0'; tekad++; vhod++; }
int num;
for(num=0;num<100;num++) { if(raboch[num].name[0]=='0') { paz=num; num=100;} else{} }
if (raboch[zap].name[0]!=' ') { realproc--;
tekadr=tekad;
raboch[paz].size=raboch[zap].size;
raboch[zap].size=0;
raboch[zap].nach=0;
raboch[paz].name[0]=raboch[zap].name[0];
raboch[zap].name[0]=' ';}
else {} }
if (raboch[zap].name[0]==' ') { if (realproc>=0) {k=1;} else { k=0;} }
else { } }}}
break;;
case 4:
for(zap=ID-1;zap>=0;zap--)
{cout<<"Имя блока:";cout<<raboch[zap].name;cout<<"\n";
cout<<"Размер блока:";cout<<raboch[zap].size;cout<<"\n";
cout<<"Начальный адресс:";cout<<raboch[zap].nach;cout<<"\n";}
break;;
case 5:
cout<<"Введите начальный адресс памяти:";
cin>>zap;
cout<<"Введите конечный адресс памяти:";
cin>>paz;
for(i=zap;paz!=i;i++) {cout<<c[i];}
cout<<"\n";
break;;
case 6: p=0;
continue;}}}
Лаба по моделированию работы с памятью. Растягиваем буфер в голове))))
+134
void cmps_genslave(prog src[progs], char slave, char look){ // заполнение списков нелокальных имен
int s=0,m=0,l=0;
while( src[s].name[0]!=0 && src[s].name[0]!=slave && s<progs)s++;
if(!src[s].master) return;
if(look==slave){ if(src[s].nonlnum) return; l=s; }else
while( src[l].name[0]!=0 && src[l].name[0]!=look && l<progs)l++;
if(!src[l].master) return;
while(src[m+1].name[0]!=0 && src[l].master==src[m+1].name[0] && m+1<progs)m++;
strcpy(src[s].nonlocals+strlen(src[s].nonlocals),src[m].locals);
src[s].nonlnum+=src[m].lnum;
if(src[m].master) cmps_genslave(src,slave,src[m].name[0]);
}
курсовик по проге на втором курсе, изобретаем области видимости
+146
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27)
kill_proc(1,SIGTERM,1);
#else
...
Оригинальный способ проверить версию ядра линукса...
Где-то в сырцах реалтековского драйвера для GPIO...
+139
char *reg = data;
char *temp = "blahblah is ";
strcat(temp,(const char*)"reg[4]");
Как оказывается на Си можно конкатенировать строки
+142
/* gcc -static -Os -W -nostartfiles -fno-stack-protector -U_FORTIFY_SOURCE glibc_preinstall.c */
#include <unistd.h>
#include <signal.h>
#include <sys/utsname.h>
#ifndef MIN_KERNEL_VERSION
# error "MIN_KERNEL_VERSION not defined"
#endif
#define PRINT_MSG(msg) write(2, (msg), sizeof(msg) - 1)
#define FATAL(msg) do {PRINT_MSG(msg); kill_parent(); _exit(1);} while(0)
static void kill_parent(void)
{
pid_t pid = getppid();
if (pid < 100)
return;
PRINT_MSG("Sending SIGSTOP signal to parent process.\n");
(void) kill(pid, SIGSTOP);
}
static int is_digit(char c)
{
return c >= '0' && c <= '9';
}
static int
parse_release(const char *p)
{
unsigned int i, osversion = 0;
for (i = 0; i < 3 && *p; i++, ++p)
{
unsigned int d = 0;
for (; is_digit(*p); ++p)
d = d * 10 + (*p - '0');
if (d == 0 || d >= 255 || (i < 2 && *p && *p != '.'))
{
osversion = 0;
break;
}
osversion |= d << (16 - 8 * i);
}
return osversion;
}
static void
check_kernel_version(void)
{
struct utsname name;
if (uname(&name) < 0)
FATAL("kernel version check failed: uname syscall failed.\n");
if (parse_release(name.release) < parse_release(MIN_KERNEL_VERSION))
FATAL("kernel version check failed: KERNEL TOO OLD, "
"minimal version supported by glibc is " MIN_KERNEL_VERSION
".\n");
}
void
_start(void)
{
check_kernel_version();
_exit(0);
}
Скрипт на языке Си, проверяющий, что загружено ядро версии не меньшей чем MIN_KERNEL_VERSION (2.6.18 на момент написания). Очень красиво взрывается на ядре 3.0.
+106
if (fFisWaitAccept)
{
if (++countB > 2)
{
countB = 0;
TRACE("ERROR TIMER B\n");
Reinit_ATS_Connection();
fFisWaitAccept = false;
set_timer_b(tmB);
return;
}
}
else
countB = 0;
SendFrameToATS(buf, 4); //visilaem neskolko raz
SendFrameToATS(buf, 4); //FW dlia bolshej uverennosti
SendFrameToATS(buf, 4); //ibo esli etot paket nedojdiot sviazi pizdec
fFisWaitAccept = true;
set_timer_b(tmB);
Фрагмент кода управляющей программы для некоей АТС.
+147
{
//-----------------------------------------
// Declare and initialize variables
WSADATA wsaData;
int iResult = 0;
int iError = 0;
INT iNuminfo = 0;
int i;
// Allocate a 16K buffer to retrieve all the protocol providers
DWORD dwBufferLen = 16384;
LPWSAPROTOCOL_INFO lpProtocolInfo = NULL;
// variables needed for converting provider GUID to a string
int iRet = 0;
WCHAR GuidString[40] = { 0 };
// Initialize Winsock
iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
if (iResult != 0) {
wprintf(L"WSAStartup failed: %d\n", iResult);
return 1;
}
lpProtocolInfo = (LPWSAPROTOCOL_INFO) MALLOC(dwBufferLen);
if (lpProtocolInfo == NULL) {
wprintf(L"Memory allocation for providers buffer failed\n");
WSACleanup();
return 1;
}
iNuminfo = WSAEnumProtocols(NULL, lpProtocolInfo, &dwBufferLen);
if (iNuminfo == SOCKET_ERROR) {
iError = WSAGetLastError();
if (iError != WSAENOBUFS) {
wprintf(L"WSAEnumProtocols failed with error: %d\n", iError);
if (lpProtocolInfo) {
FREE(lpProtocolInfo);
lpProtocolInfo = NULL;
}
WSACleanup();
return 1;
} else {
wprintf(L"WSAEnumProtocols failed with error: WSAENOBUFS (%d)\n",
iError);
wprintf(L" Increasing buffer size to %d\n\n", dwBufferLen);
if (lpProtocolInfo) {
FREE(lpProtocolInfo);
lpProtocolInfo = NULL;
}
lpProtocolInfo = (LPWSAPROTOCOL_INFO) MALLOC(dwBufferLen);
if (lpProtocolInfo == NULL) {
wprintf(L"Memory allocation increase for buffer failed\n");
WSACleanup();
return 1;
}
iNuminfo = WSAEnumProtocols(NULL, lpProtocolInfo, &dwBufferLen);
if (iNuminfo == SOCKET_ERROR) {
iError = WSAGetLastError();
wprintf(L"WSAEnumProtocols failed with error: %d\n", iError);
if (lpProtocolInfo) {
FREE(lpProtocolInfo);
lpProtocolInfo = NULL;
}
WSACleanup();
return 1;
}
}
}
wprintf(L"WSAEnumProtocols succeeded with protocol count = %d\n\n",
iNuminfo);
for (i = 0; i < iNuminfo; i++) {
wprintf(L"Winsock Catalog Provider Entry #%d\n", i);
--- skipped ---
wprintf(L"\n");
}
if (lpProtocolInfo) {
FREE(lpProtocolInfo);
lpProtocolInfo = NULL;
}
WSACleanup();
return 0;
}
http://msdn.microsoft.com/en-us/library/ms741574(v=VS.85).aspx
Я считаю это говнокодом, т.к. автор данного примера страдает сильнейшие паранойей. Всем переменным он присваивает нолики, например перед return строки 87, 52 и т.д. ... Даже iResult, lpProtocolInfo и т.д. в начале...
+136
inline int getMaximumIterations() // НЕ: MAX_ITERATIONS = 25
{
return 25;
}
правила использования глобальных переменных ))) прочитанные в доках одной софтовой компании
+109
int rnd() {
srand( rand()*rand() );
int r = 0;
for (int i=0;i<=10;i++)
r=rand();
srand( ++r - time(NULL) );
return rand()/r;
}
NEED MOAR RANDOM NUMBERS!!!