- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
int ftp_list (int sck, int verbose) {
/* ... */
list = fopen("LIST.txt", "w");
if (list == NULL) {
printf("Unable to open LIST file..\n");
free(buffer);
return -1;
}
/* ... */
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+138
int ftp_list (int sck, int verbose) {
/* ... */
list = fopen("LIST.txt", "w");
if (list == NULL) {
printf("Unable to open LIST file..\n");
free(buffer);
return -1;
}
/* ... */
}
Функция получения списка файлов в директории с FTP-сервера.
http://sourceforge.net/projects/libftp/
+140
printf("0x%02X", (int)( (((block[i << 1] >> ((15 - (j >> 4)) << 2)) & 15) << 4 ) | ((block[(i << 1) | 1] >> ((15 - (j & 15)) << 2)) & 15)));
Жертва жестокой оптимизации. При всем этом код исправно делал свое дело... пока не пришла пора в нем что-то изменить =)
+125
#line 411 "ext/standard/var_unserializer.c"
{
YYCTYPE yych;
if ((YYLIMIT - YYCURSOR) < 7) YYFILL(7);
yych = *YYCURSOR;
switch (yych) {
case 'C':
case 'O': goto yy13;
case 'N': goto yy5;
case 'R': goto yy2;
case 'S': goto yy10;
case 'a': goto yy11;
case 'b': goto yy6;
case 'd': goto yy8;
case 'i': goto yy7;
case 'o': goto yy12;
case 'r': goto yy4;
case 's': goto yy9;
case '}': goto yy14;
default: goto yy16;
}
yy2:
yych = *(YYMARKER = ++YYCURSOR);
switch (yych) {
case ':': goto yy95;
default: goto yy3;
}
yy3:
#line 733 "ext/standard/var_unserializer.re"
{ return 0; }
#line 442 "ext/standard/var_unserializer.c"
yy4:
yych = *(YYMARKER = ++YYCURSOR);
switch (yych) {
case ':': goto yy89;
default: goto yy3;
}
yy5:
yych = *++YYCURSOR;
switch (yych) {
case ';': goto yy87;
default: goto yy3;
}
yy6:
yych = *(YYMARKER = ++YYCURSOR);
switch (yych) {
case ':': goto yy83;
default: goto yy3;
}
yy7:
yych = *(YYMARKER = ++YYCURSOR);
switch (yych) {
case ':': goto yy77;
default: goto yy3;
}
yy8:
yych = *(YYMARKER = ++YYCURSOR);
switch (yych) {
case ':': goto yy53;
default: goto yy3;
}
yy9:
yych = *(YYMARKER = ++YYCURSOR);
switch (yych) {
case ':': goto yy46;
default: goto yy3;
}
yy10:
yych = *(YYMARKER = ++YYCURSOR);
switch (yych) {
case ':': goto yy39;
default: goto yy3;
}
yy11:
yych = *(YYMARKER = ++YYCURSOR);
switch (yych) {
case ':': goto yy32;
default: goto yy3;
}
yy12:
yych = *(YYMARKER = ++YYCURSOR);
switch (yych) {
case ':': goto yy25;
default: goto yy3;
}
yy13:
yych = *(YYMARKER = ++YYCURSOR);
switch (yych) {
case ':': goto yy17;
default: goto yy3;
}
yy14:
++YYCURSOR;
/* далее еще несколько похожих кусков кода чуть менее хардкорных */
http://svn.php.net/viewvc/php/php-src/trunk/ext/standard/var_unserializer.c?view=markup
Исходники функции unserialize в php, не зря она так медленно работает на больших массивах...
+135
//глубоко в коде
char output[1024];
//еще глубже
struct sockaddr_in outputa;
//...
if(sendto(s, output, 512, 0, (struct sockaddr *) &output, rsize) == SOCKET_ERROR) {
printf("Socket error: %i.\n", WSAGetLastError());
}
Долго-же я думал, почему оно вываливается с ошибкой 10047.
+142
#include <unistd.h>
#include <stdlib.h>
int main(int argc,char* argv[])
{
int fdp1[2],fdp2[2],fdp3[2],fdp4[2],fdp5[2];
pipe(fdp1);
pipe(fdp2);
pipe(fdp3);
pipe(fdp4);
pipe(fdp5);
if(fork()==0){
close(1);dup(fdp1[1]);close(fdp1[1]);close(fdp1[0]);
execl("/bin/cat","cat",argv[1],(char*)0);
exit(1);
}
if(fork()==0){
close(0);dup(fdp1[0]);close(fdp1[0]);close(fdp1[1]);
close(1);dup(fdp2[1]);close(fdp2[1]);
execl("/usr/bin/tr","tr","-cs","A-Za-z","\n",(char*)0);
exit(2);
}
if(fork()==0){
close(0);dup(fdp2[0]);close(fdp2[0]);close(fdp2[1]);
close(fdp1[0]);close(fdp1[1]);
close(1);dup(fdp3[1]);close(fdp3[1]);close(fdp3[0]);
execl("/usr/bin/sort","sort",(char*)0);
exit(3);
}
if(fork()==0){
close(0);dup(fdp3[0]);close(fdp3[0]);close(fdp3[1]);
close(fdp1[0]);close(fdp1[1]);
close(fdp2[0]);close(fdp2[1]);
close(1);dup(fdp4[1]);close(fdp4[1]);
execl("/usr/bin/uniq","uniq","-c",(char*)0);
exit(4);
}
if(fork()==0){
close(0);dup(fdp4[0]);close(fdp4[0]);close(fdp4[1]);
close(fdp1[0]);close(fdp1[1]);
close(fdp2[0]);close(fdp2[1]);
close(fdp3[0]);close(fdp3[1]);
close(1);dup(fdp5[1]);close(fdp5[1]);
execl("/usr/bin/sort","sort","-n",(char*)0);
exit(5);
}
if(fork()==0){
close(0);dup(fdp5[0]);close(fdp5[0]);close(fdp5[1]);
close(fdp1[0]);close(fdp1[1]);
close(fdp2[0]);close(fdp2[1]);
close(fdp3[0]);close(fdp3[1]);
close(fdp4[0]);close(fdp4[1]);
execl("/usr/bin/tail","tail","-n",argv[2],(char*)0);
exit(6);
}
close(fdp1[0]);close(fdp1[1]);
close(fdp2[0]);close(fdp2[1]);
close(fdp3[0]);close(fdp3[1]);
close(fdp4[0]);close(fdp4[1]);
close(fdp5[0]);close(fdp5[1]);
while(wait(0)!=(-1));
exit(0);
}
задача: подсчет повторяемости слов, и вывод слов указанной длины.
+138
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <ctime>
#include <signal.h>
#include <sys/time.h>
#include <fcntl.h>
#include <termios.h>
#include <time.h>
#include <iostream>
using namespace std;
struct termios savetty;
struct termios tty;
char num[]="0123456789QWERTYUIOPASDFGHJKLZXCVBNM";
char let[]="!\",#$%&'()*qwertyuiopasdfghjklzxcvbnm";
int t=1;
int tm=0;
int opnum=0;
char buffer[30];
char var[1000];
char out[1000];
struct timeval tv;
struct timeval tv2;
int main()
{
if ( !isatty(0) ) {
fprintf (stderr, "stdin not terminal\n");
exit (1);
};
tcgetattr (0, &tty);
savetty = tty;
tty.c_lflag &= ~(ICANON|ISIG);
tty.c_cc[VMIN] = 1;
tcsetattr (0, TCSAFLUSH, &tty);
srand(time(0));
int i=0;
bool c=true;
time_t curtime;
int passLen=200+rand()%400;
for(int i=0;i<=passLen;i++){
int s=rand()%2;
if(s==1){
out[i]=let[rand()%37];
} else {
out[i]=num[rand()%35];
};
if((i%5)==0 && i!=0)out[i]=' ';
};
out[passLen]='\0';
int tt=gettimeofday(&tv, NULL);
if(tt<0)exit(0);
printf("%s\n",out);
while(out[i]!='\0')
{
var[i]=getchar();
if(var[i]!=out[i]){
opnum++;
printf("Er%c",out[i]);
};
i++;
};
tt=gettimeofday(&tv2, NULL);
if(tt<0)exit(0);
int tm=tv2.tv_sec-tv.tv_sec;
int v=(passLen*60)/tm;
int min=tm/60;
tm%=60;
printf("Time %d min %d sec\n",min,tm);
cout<<"Num of errors "<<opnum<<" Speed "<<v<<endl;
tcsetattr (0, TCSAFLUSH, &savetty);
};
Клавиатурный тренажер
+109
while(1) {
:cycle
goto cycleCode;
}
// ...
:cycleCode
//код
goto cycle;
+105
#define C_WRONG -2000
....
int tttt_atoi(char* p_string){
int result = C_WRONG;
if ( *p_string < '0' || *p_string > '9' )
return C_WRONG;
result = atoi(p_string);
return result;
}
double tttt_atof(char* p_string){
double result = C_WRONG;
result = atof(p_string);
if (result!=0){
return result;
}
else{
if(strcmp(p_string,"0.0")==0 || strcmp(p_string,"0")==0 || strcmp(p_string,"0.")==0){
return result;
}
else{
return C_WRONG;
}
}
}
и вы посмейтесь. или facepalm'нитесь. синтакс оригинала.
+141
unsigned b;
unsigned char num;
b = ((b & ((1 << num) - 1)) << ((sizeof(b) << 3) - num)) | (b >> num);
Долго не мог понять, что оно делает.
+142
/*!
* \brief is Printable Character
* \param c Character
* \return true/false
*/
static int isPrintableChar(char c)
{
if ((c < 'A' || c > 'Z') && (c < 'a' || c > 'z')
&& (c < '0' || c > '9') && (c != ' ') && (c != '\'')
&& (c != '(') && (c != ')') && (c != '+') && (c != ',')
&& (c != '-') && (c != '.') && (c != '/') && (c != ':')
&& (c != '=') && (c != '?') && (c != '_') && (c != '\\')
&& (c != '@') && (c != '"') && (c != '%') && (c != '$')
&& (c != '&') && (c != '#') && (c != ';')
//&& (c != 'В_')
&& (c != '<') && (c != '>') && (c != ']') && (c != '{')
&& (c != '}') && (c != '*') && (c != '^')) {
return 0;
} else {
return 1;
}
}
из открытого проекта chan_sccp
даже не знаю почему не использовать стандартный макрос isprint
#define isprint(c) ((c) >= ' ' && (c) <= '~')