- 1
assert(buf=malloc(BUF_SIZ));
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+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, но студенты не ищут лёгких путей. (Сдвиги они пока не учили, так что на вычисление цифры не обращайте внимания.)
+139
out[0] = str[0] > str[1] && str[0] > str[2] ? (out[1] = str[1] > str[2] ? (out[2] = str[2],str[1]) : (out[2] = str[1],str[2]) ,str[0]) : (str[1] > str[2] ? (out[1] = str[0] > str[2] ? (out[2] = str[2],str[0]): (out[2] = str[0],str[2]),str[1]) :(out[1] = str[0] > str[1] ? (out[2] = str[1],str[0]): (out[2] = str[0],str[1]),str[2]) );
Сортируем 3 символа.
+128
#include "unpacker.h"
Unpacker::Unpacker(char *name) {
_splitString = new char*[16];
_ctx = SDL_RWFromFile(name, "rb");
}
Unpacker::~Unpacker() {
delete _splitString;
SDL_RWclose(_ctx);
SDL_FreeRW(_ctx);
}
Dir *Unpacker::getDir(char *path) {;
int index = 1;
char pth[256];
char name[80];
char *str = "";
if (!path)
return NULL;
_split(path);
SDL_RWseek(_ctx, 2, SEEK_SET);
pth[0] = '/'; pth[1] = '\0';
while (_splitString[index]) {
Uint16 count;
Uint32 hash;
str = _splitString[index];
hash = _hash(str);
count = SDL_ReadLE16(_ctx);
for (int i=0; i<count; i++) {
Uint32 h;
Uint32 offset;
h = SDL_ReadLE32(_ctx);
offset = SDL_ReadLE32(_ctx);
if (hash == h) {
Uint8 size;
Uint32 curPos = SDL_RWtell(_ctx);
SDL_RWseek(_ctx, offset, SEEK_SET);
SDL_RWread(_ctx, &size, 1, 1);
SDL_RWread(_ctx, name, size, 1);
name[size] = '\0';
if (!strcmp(str, name)) {
if (_splitString[index+1]) {
strcat(pth, str);
strcat(pth, "/");
}
break;
} else {
if (i == count-1)
return NULL;
SDL_RWseek(_ctx, curPos, SEEK_SET);
}
}
}
index++;
}
Dir *dir = new Dir;
strcpy(dir->name, str);
strcpy(dir->path, pth);
dir->dirsCount = SDL_ReadLE16(_ctx);
dir->dirsOffset = SDL_RWtell(_ctx);
SDL_RWseek(_ctx, dir->dirsCount*8, SEEK_CUR);
dir->filesCount = SDL_ReadLE16(_ctx);;
dir->filesOffset = SDL_RWtell(_ctx);
return dir;
}
File *Unpacker::getFile(char *path) {
char pth[256];
char nm[80];
int index = 2;
_split(path);
if (!_splitString[1])
return NULL;
if (_splitString[2]) {
strcpy(pth, "/");
strcpy(pth, _splitString[1]);
strcat(pth, "/");
} else {
Dir *dir = getDir("/");
return getFile(dir, _splitString[1]);
}
while (1) {
if (_splitString[index+1]) {;
strcat(pth, _splitString[index]);
strcat(pth, "/");
} else {
strcpy(nm, _splitString[index]);
break;
}
index++;
}
Нашел у себя на диске - старое творенье, когда я был мал и глуп... Распаковщик архива на своего формата на основе zlib.
+139
for (normalize(); n > 0; scanf("%d", &temp, n--)){...}
Но ведь работает!
+129
#include <stdio.h>
#include <dlfcn.h>
#include <getopt.h>
#include <string.h>
#include <stdlib.h>
#define int64 long long
const char* help =
" -h,--help это сообщение\
-f,--func имя функции\
-n,--num количество аргументов функции\
-a,--arg1 первый аргумент\
-b,--arg2 второй аргумент";
struct option longopts[] ={
{"func",1,NULL,'f'},
{"help",1,NULL,'h'},
{"num", 1,NULL,'n'},
{"arg1",1,NULL,'a'},
{"arg2",1,NULL,'b'},
{0,0,0,0}
};
void strtoa(void** arg, char* optarg){
int tmp;
char* e;
tmp = strtol(optarg,&e,10);
if (e != optarg + strlen(optarg)){
*arg = malloc(strlen(optarg));
strcpy((char*)*arg,optarg);
} else *arg = (void*)tmp;
}
int64 main(int argc, char** argv){
int opt, num = 0;
void *a,*b;
char* e;
void* (*func2)(void*,void*),
(*func1)(void*),
(*func0)(), *func = 0;
while((opt = getopt_long(argc,argv,"f:h:n:a:b:",longopts,NULL)) != -1){
switch (opt){
case 'h':
fprintf(stderr,"%s",help);
exit(0);
case 'f':
func = dlsym(NULL,optarg);
break;
case 'n':
num = atoi(optarg);
if (num > 2) exit(1);
break;
case 'a':
strtoa(&a,optarg);
break;
case 'b':
strtoa(&b,optarg);
break;
}
}
if(func != 0){
switch (num){
case 0:
func0 = func;
(*func0)();
break;
case 1:
func1 = func;
(*func1)(a);
break;
case 2:
func2 = func;
(*func2)(a,b);
}
}
return 0;
}
Запускает любую функцию линукс, содержащую до 2-х аргументов. В хелпе все написано. Собирать так c флагом -dl.
Использовать так:
a.out -f sleep -n 1 -a 1 - sleep на 1 секунду
a.out -f printf -n 1 -a OK - выводит без конца строки
вдохновлен этим:
http://govnokod.ru/13763
Я, crastinus97, говорю вам: этого способа нет в man. Я его сам открыл.
+135
return ((((num & ~(0xFFFFFFFF << n)) >> (n - 0x1)) & 0x1) == 0x1) ? ((num & ~(0xFFFFFFFF << n)) ^ ~(0xFFFFFFFF << n)) + 0x1 : (num & ~(0xFFFFFFFF << n));
+135
char* getID(){
uint32_t id = calcuate_id(); // Непринципиально, сложные какие то вычисления
static char str[16] = {0};
sprintf(str, "%ud", id);
return str;
}
На самом деле кусок модуля к nginx. Вычисляетися целое число, преобразуется в десятичное представление....
+133
hq->rd_period = (i = hq->rd_period+1) != 0 ? i : 1;
что именно хотел сказать автор, неизвестно. предполагаю что `while (!++hq->rd_period);`
+124
bool getDimensionForKey( const char *key, unsigned int *value, config_file_t *config, unsigned int dimension_max, unsigned int object_size )
{
const char *val;
int size = 0;
int sum = 0;
bool negative = false;
bool percentage = false;
if (getValueForKey(key, &val, &size, config))
{
if ( size )
{
if (*val == '-')
{
negative = true;
val++;
size--;
}
if (val[size-1] == '%')
{
percentage = true;
size--;
}
// convert string to integer
for (sum = 0; size > 0; size--)
{
if (*val < '0' || *val > '9')
return false;
sum = (sum * 10) + (*val++ - '0');
}
if (percentage)
sum = ( dimension_max * sum ) / 100;
// calculate offset from opposite origin
if (negative)
sum = ( ( dimension_max - object_size ) - sum );
} else {
// null value calculate center
sum = ( dimension_max - object_size ) / 2;
}
*value = (uint16_t) sum;
return true;
}
// key not found
return false;
}
Cтригозаврус функодавус ...