- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
const char * strtime(const time_t * t){
tm tt;
const int dt_len = 60;
char str_dt[dt_len];
localtime_r(t, &tt);
strftime(str_dt, dt_len, "%d.%m.%Y %H:%M:%S", &tt);
std::string str(str_dt);
return str.c_str();
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+174
const char * strtime(const time_t * t){
tm tt;
const int dt_len = 60;
char str_dt[dt_len];
localtime_r(t, &tt);
strftime(str_dt, dt_len, "%d.%m.%Y %H:%M:%S", &tt);
std::string str(str_dt);
return str.c_str();
}
Код, как ни странно, работал несколько лет, пока проект не трогали и байты не сместились. Неудивительно, что код вместо времени стал возвращать имя функции, из которого вызывался.
+168
#define TPLM Tuple(TPLMOVE) +
#define TPLC Tuple(TPLCOPY) +
#define TPL Tuple() +
//#define GTPL Tuple() +
#define TPLERROR(t) { memcpy(0, 0, 1); }
#define TPLMOVE 1 // copy to tuple, memset 0 original. = destruct dest, copy to dest.
#define TPLCOPY 2 // copy constructor = destruct dest, copy to dest
#define TPLGET 3 // destruct all values :)
#include <memory.h>
#include <math.h>
#include <stdio.h>
#include <typeinfo>
#include <string.h>
#define max(a, b) (((a) > (b)) ? (a) : (b))
#define min(a, b) (((a) < (b)) ? (a) : (b))
unsigned int mcrc(char* name, unsigned int sz){
unsigned int ret=0; if(!sz) sz=(unsigned int)strlen(name);
char*t=name+sz; int p=0;
while(name<t){
*(((char*)&ret)+p)+=*name; p++;
if(p>=4) p=0; name++;
}
return ret;
}
struct Tupled{ unsigned int sz, type; void *v; char data[0]; };
class Tuple{
int count, set, dusz, dasz;
unsigned char *data;
int type; int adel;
public:
Tuple(){ count=0; set=0; type=0; dusz=0; dasz=0; data=0; adel=0; }
Tuple(int t){ type=t; }
~Tuple(){ if(count!=set) TPLERROR("~Tuple"); delete data; }
Tuple(Tuple &t){
count=t.count; set=t.set; dusz=t.dusz; dasz=t.dasz; data=t.data;
t.count=0; t.set=0; t.data=0; adel=1;
}
template <class T>
Tuple& operator+(T &t){ if(!adel) Add(&t, sizeof(t), t); else Del(&t, sizeof(t), t); return *this; }
template <class T>
Tuple& operator-(T &t){ if(!adel) Add(&t, sizeof(t), t); else Del(&t, sizeof(t), t); return *this; }
/* Операторы '*', '/', ',', '>', '<' код идентичен */
template <class T>
void Add(void *v, int s, T &t){
if(dasz-dusz<s+4+(int)sizeof(void*)){
unsigned char *ldata=data;
data=new unsigned char[dasz+max(128, s+4)];
memcpy(data, ldata, dasz);
dasz+=max(128, s);
delete [] ldata;
}
Tupled &d=*(Tupled*)(data+dusz);
d.sz=s;
memcpy(&d.v, v, sizeof(void*));
if(type==TPLCOPY){ *(T*)d.data=t; } else memcpy(d.data, v, s);
if(type==TPLMOVE) t.~T();
d.type=mcrc((char*)typeid(t).name(), 0);
dusz+=sizeof(Tupled)+s; count++;
}
template <class T>
void Del(void *v, int s, T &t){
if(set>=count){ TPLERROR("Tuple::Set"); return ; }
unsigned char *p=GetData(set);
if(!p){ TPLERROR("Tuple::NoData"); return ; }
Tupled &d=*(Tupled*)p;
unsigned int tp=mcrc((char*)typeid(t).name(), 0);
if(tp!=d.type){ TPLERROR("Tuple::TYPE"); return ;}
t.~T();
if(d.sz!=s){ TPLERROR("Tuple::SIZE"); return ;}
memcpy(v, d.data, d.sz);
set++;
}
unsigned char* GetData(int c){
if(c>=count) return 0;
unsigned char *p=data;
for(int i=0; i<c; i++){
p+=sizeof(Tupled)+*(int*)p;
}
return p;
}
};
Очередной самобытный велосипед от микеля.
http://rsdn.ru/forum/src/4218954.aspx
+159
HMODULE nt=LoadLibrary("Ntdll.dll");
PROCESS_BASIC_INFORMATION pbi={0};
ZWQUERYINFORMATIONPROCESS _ZwQueryInformationProcess;
_ZwQueryInformationProcess = (ZWQUERYINFORMATIONPROCESS)GetProcAddress(nt, "ZwQueryInformationProcess");
DWORD rlg;
SetLastError(0);
_ZwQueryInformationProcess(divine,0,&pbi,sizeof(pbi),&rlg);
printf("%d",GetLastError());
источник: http://www.wasm.ru/forum/viewtopic.php?pid=426270#p426270
+162
QString SomeClass::newzipname (const QString serial) {
QDateTime dt=QDateTime::currentDateTime();
return serial
+QString("%1%2%3%4%5%6")
.arg (QString::number (dt.date().year()-2000), 2, '0')
.arg (QString::number (dt.date().month()), 2, '0')
.arg (QString::number (dt.date().day()), 2, '0')
.arg (QString::number (dt.time().hour()), 2, '0')
.arg (QString::number (dt.time().minute()), 2, '0')
.arg (QString::number (dt.time().second()), 2, '0')
+".zip";
}
+160
private:
private:
friend class boost::iterator_core_access;
Никому не покажу своего друга-буста
+159
enum EPlayerStat { ... };
typedef std::pair<EPlayerStat, int> StatDelta;
...
void GameClassT::showTooltipStats(const float2& pos, const std::vector<StatDelta>& statDeltas)
{
//...
if (statDeltas.empty())
return;
// Выбираем тип баббла в зависимости от количества статов, которые в нём нужно отобразить.
// Баббл с последним статом "wish chance" выглядит немного не так, как остальные,
// но возможен (пока что) только для варианта с тремя статами.
Bubble* const bubblesNormal[] =
{
&m_bubbleTooltipStats1SE,
&m_bubbleTooltipStats2SE,
&m_bubbleTooltipStats3SE,
&m_bubbleTooltipStats4SE
};
Bubble* const bubblesWish[] =
{
nullptr,
nullptr,
&m_bubbleTooltipStats3SE_Wish,
nullptr
};
Bubble* const* const bubbles = (statDeltas.end() == std::find_if(statDeltas.begin(), statDeltas.end(),
[](const StatDelta& delta) -> bool { return delta.first == PS_WishChance; }))
? bubblesNormal : bubblesWish;
Bubble& bubble = *bubbles[(statDeltas.size() <= ARRAY_SIZE(bubbles)) ? (statDeltas.size() - 1) : (ARRAY_SIZE(bubbles) - 1)];
if (&bubble == nullptr)
{
RZT_LOG_WARNING("Bubble with %d stats with wish chance is not supported!", statDeltas.size());
return;
}
// Настраиваем выбранный баббл.
//... (здесь вызываются всякие методы через ссылку bubble)
}
Внезапные изменения в спецификации такие внезапные.
Мне всегда становится страшно, когда из-за них я начинаю рожать что-то подобное.
+158
std::string get(const std::string& name) {
NamedPropertyMap::iterator it = properties.find(name);
if (it == properties.end())
return false;
std::string ret;
it->second->Get(ret);
return ret;
}
return false; компилится на ура в VS2008
+159
m_hSemaphore = CreateSemaphore( NULL, 1, 1, NULL );
....
void CTestGUIDlg::OnBnClickedButtonStartStream()
{
WaitForSingleObject(m_hSemaphore, INFINITE);
if(m_ThreadHandle)
{
AfxMessageBox("Stop running stream!", MB_ICONEXCLAMATION);
return;
};
m_ThreadHandle = NULL;
m_StreamType = 1;
m_ThreadHandle = (HANDLE)_beginthreadex(NULL,
0,
streamProcedure,
static_cast<LPVOID>( this ),
0,
NULL);
if(!m_ThreadHandle)
{
m_StreamType = 0;
}
UpdateButtons();
ReleaseSemaphore(m_hSemaphore, 1, NULL);
}
классика жанра
+161
class SomeClass
{
public:
__declspec(dllexport) SomeClass(UINT i_Width, UINT i_Height, UINT i_Lines, float i_Result, bool i_bAutoFill = false, и т.д. еще штук 5);
__declspec(dllexport) SomeClass::~SomeClass();
__declspec(dllexport) void setCallbackFunction(void (*i_pCallbackFunction)(SomeClass* i_pSomeClass)) { m_pCallbackFunction = i_pCallbackFunction; };
__declspec(dllexport) bool isFinished() { return m_bIsFinished; };
__declspec(dllexport) void clear() { m_ResultData.clear(); };
__declspec(dllexport) bool save(const char* i_sFilename);
...
private:
bool createThread();
void initWork();
void loopWork();
void stepWork();
void exitWork();
static UINT WINAPI workProc(LPVOID lpContext);
inline bool someInlineFunction(UINT i_Index);
...
private:
HANDLE m_ThreadHandle;
bool m_bIsFinished;
bool m_bThreadStopped;
bool m_bThreadClosed;
vector<SomeType> m_a...;
string m_sFilename;
void (*m_pCallbackFunction)(SomeClass* i_pSomeClass);
...
};
Это краткий пересказ того, что шло вместе с DLL, только длиннее и с комментариями к каждой строке и доксигеновской докой!
+161
/////////////////////////////////////////////////////////////////////////////
#define TWAIT(_WAIT_EXPR_, _TIMEOUT_) TWAIT_EX(_WAIT_EXPR_, _TIMEOUT_, 0)
#define TWAIT_(_WAIT_EXPR_, _TIMEOUT_) TWAIT_EX_(_WAIT_EXPR_, _TIMEOUT_, 0)
/////////////////////////////////////////////////////////////////////////////
#define TWAIT_DECL_VARS \
DWORD TWAIT_START = GetTickCount(); \
bool TWAIT_RET = true;
/////////////////////////////////////////////////////////////////////////////
#define TWAIT_EX(_WAIT_EXPR_, _TIMEOUT_, _ABORT_) \
DWORD TWAIT_START = GetTickCount(); \
bool TWAIT_RET = true; \
do {ProcessMessage(1); \
TWAIT_RET = GetTickCount() - TWAIT_START < (DWORD)(_TIMEOUT_); \
if( !TWAIT_RET ) break; \
if( _ABORT_ != 0 ) { TWAIT_RET = false; break; } \
} while( (_WAIT_EXPR_) == 0 );
/////////////////////////////////////////////////////////////////////////////
#define TWAIT_EX_(_WAIT_EXPR_, _TIMEOUT_, _ABORT_) \
TWAIT_START = GetTickCount(); \
TWAIT_RET = true; \
do {ProcessMessage(1); \
TWAIT_RET = GetTickCount() - TWAIT_START < (DWORD)(_TIMEOUT_); \
if( !TWAIT_RET ) break; \
if( _ABORT_ != 0 ) { TWAIT_RET = false; break; } \
} while( (_WAIT_EXPR_) == 0 );
lambdas, functors... макрос - это наше все... а ProcessMessage(1) тоже радует.