194 lines
5.3 KiB
C
194 lines
5.3 KiB
C
|
|
#ifndef _SHAREUTIL_H_
|
|||
|
|
#define _SHAREUTIL_H_
|
|||
|
|
|
|||
|
|
#include <time.h>
|
|||
|
|
#include <stdarg.h>
|
|||
|
|
#include "os_def.h"
|
|||
|
|
|
|||
|
|
#ifndef STDCALL
|
|||
|
|
#ifdef _MSC_VER
|
|||
|
|
#define STDCALL __stdcall
|
|||
|
|
#else
|
|||
|
|
#define STDCALL
|
|||
|
|
#endif
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
#if defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7)))
|
|||
|
|
# define GCC_UNUSED __attribute__((unused))
|
|||
|
|
#else
|
|||
|
|
# define GCC_UNUSED
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
#define STATIC_ASSERT(Expr) typedef char UnName##__LINE__[(Expr) ? 1 : -1] GCC_UNUSED; // <20><>̬<EFBFBD><CCAC><EFBFBD><EFBFBD>
|
|||
|
|
#define COMPILE_ASSERT STATIC_ASSERT
|
|||
|
|
|
|||
|
|
//<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ر<EFBFBD><D8B1>߳<EFBFBD>
|
|||
|
|
#ifdef _MSC_VER
|
|||
|
|
#define CloseThread(ht) if ( ht ) { WaitForSingleObject( ht, INFINITE ); CloseHandle( ht ); (ht) = NULL; }
|
|||
|
|
#define itoa _itoa
|
|||
|
|
#define I64FMT "%I64d"
|
|||
|
|
#define os_assert assert
|
|||
|
|
#else
|
|||
|
|
#define itoa(n, s, x) sprintf(s, "%d", n)
|
|||
|
|
#define I64FMT "%lld"
|
|||
|
|
#define os_assert
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
#ifndef SafeDelete
|
|||
|
|
#define SafeDelete(p) if ( p ){ delete p; p = NULL; }
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD>鳤<EFBFBD><E9B3A4>
|
|||
|
|
#ifndef ArrayCount
|
|||
|
|
#define ArrayCount(a) (sizeof(a)/sizeof((a)[0]))
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
#ifdef _MSC_VER
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>飨֧<E9A3A8><D6A7>MBCS<43><53>UCS<43><53>
|
|||
|
|
#ifndef _asncpy
|
|||
|
|
#define _asncpy(dest, src) _tcsncpy(dest, src, sizeof(dest)/sizeof(TCHAR)-1)
|
|||
|
|
//#define strlcpy strncpy
|
|||
|
|
#endif
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>鲢<EFBFBD><E9B2A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>֧<EFBFBD><D6A7>MBCS<43><53>UCS<43><53>
|
|||
|
|
#ifndef _asncpyt
|
|||
|
|
#define _asncpyt(dest, src) { _tcsncpy(dest, src, sizeof(dest)/sizeof(TCHAR)-1); dest[sizeof(dest)/sizeof(TCHAR)-1] = 0;}
|
|||
|
|
#endif
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>MBCS<43>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>MBCS<43>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>鲢<EFBFBD><E9B2A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD>ַ<EFBFBD>
|
|||
|
|
#define _STRNCPY_S strlcpy
|
|||
|
|
#define _STRNCAT_S strlcat
|
|||
|
|
#define _STRNCPY_A(dest, src) {strlcpy((dest), (src), sizeof(dest));} // <20><><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD>NULL
|
|||
|
|
#define _STRNCAT_A(dest, src) {strlcat((dest), (src), sizeof(dest));}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
#ifndef STRNTERM
|
|||
|
|
#define STRNTERM(s, l) s[l] = 0;
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
//ȡ64λ<34><CEBB><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>32λ<32><CEBB><EFBFBD><EFBFBD>
|
|||
|
|
#ifndef LO_INT64
|
|||
|
|
#define LO_INT64(S) ((unsigned int)((uint64_t)(S) & 0xffffffff))
|
|||
|
|
#endif
|
|||
|
|
//ȡ64λ<34><CEBB><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD>32λ<32><CEBB><EFBFBD><EFBFBD>
|
|||
|
|
#ifndef HI_INT64
|
|||
|
|
#define HI_INT64(S) ((unsigned int)((uint64_t)(S) >> 32))
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
//ò<><C3B2>vc<76><63>û<EFBFBD><C3BB>snprintf<74><66><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C>ṩ<EFBFBD><E1B9A9>_snprintf<74><66><EFBFBD><EFBFBD>,<2C><>gcc<63><63>snprintf<74><66>_snprintf<74><66><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>в<EFBFBD><D0B2><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD>Ҫע<D2AA><D7A2>
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD>ij<EFBFBD><C4B3>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ṩ<EFBFBD><E1B9A9><EFBFBD>ֽڳ<D6BD><DAB3>ȣ<EFBFBD>_snprintf<74><66><EFBFBD><EFBFBD>-1<><31><EFBFBD><EFBFBD>snprintf<74>Ƿ<EFBFBD><C7B7><EFBFBD>ʵ<EFBFBD>ʵij<CAB5><C4B3><EFBFBD>
|
|||
|
|
#ifndef _MSC_VER
|
|||
|
|
#define SNPRINTF snprintf
|
|||
|
|
#define STRNCASECMP strncasecmp
|
|||
|
|
#else
|
|||
|
|
#define SNPRINTF _snprintf
|
|||
|
|
#define STRNCASECMP _strnicmp
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD>len,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>[0-len]<5D><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>snprintf<74><66><EFBFBD>س<EFBFBD><D8B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϵ<D0B6>ͳһ<CDB3><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
int SNPRINTFA(char *dst, int len, const char *format, ...);
|
|||
|
|
|
|||
|
|
int VSNPRINTFA(char *dst, int len, const char *format, va_list args);
|
|||
|
|
|
|||
|
|
size_t strlcpy(char *dst, const char *src, size_t siz);
|
|||
|
|
size_t strlcat(char *dst, const char *src, size_t siz);
|
|||
|
|
|
|||
|
|
//<2F>ַ<EFBFBD><D6B7><EFBFBD>hash<73><68><EFBFBD><EFBFBD>
|
|||
|
|
unsigned int hashstr(const char* str);
|
|||
|
|
//<2F>ַ<EFBFBD><D6B7><EFBFBD>hash<73><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ṩ<EFBFBD><E1B9A9><EFBFBD><EFBFBD>
|
|||
|
|
unsigned int hashlstr(const char* str, size_t len);
|
|||
|
|
|
|||
|
|
// struct SystemTime
|
|||
|
|
// {
|
|||
|
|
// int sec_; /* seconds after the minute - [0,59] */
|
|||
|
|
// int min_; /* minutes after the hour - [0,59] */
|
|||
|
|
// int hour_; /* hours since midnight - [0,23] */
|
|||
|
|
// int mday_; /* day of the month - [1,31] */
|
|||
|
|
// int mon_; /* months since January - [1,12] */
|
|||
|
|
// int year_; /* years */
|
|||
|
|
// int wday_; /* days since Sunday[0--6], Sunday:0, Monday:1 ...*/
|
|||
|
|
// };
|
|||
|
|
|
|||
|
|
struct SYSTEMTIME
|
|||
|
|
{
|
|||
|
|
unsigned short wYear;
|
|||
|
|
unsigned short wMonth;
|
|||
|
|
unsigned short wDayOfWeek;
|
|||
|
|
unsigned short wDay;
|
|||
|
|
unsigned short wHour;
|
|||
|
|
unsigned short wMinute;
|
|||
|
|
unsigned short wSecond;
|
|||
|
|
unsigned short wMilliseconds;
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
|
|||
|
|
void GetSystemTime(SYSTEMTIME& sysTime);
|
|||
|
|
|
|||
|
|
void GetSystemTimeFull(SYSTEMTIME& sysTime);
|
|||
|
|
typedef enum tagShareOutputMsgType
|
|||
|
|
{
|
|||
|
|
rmNormal = 0,
|
|||
|
|
rmWarning,
|
|||
|
|
rmTip,
|
|||
|
|
rmError,
|
|||
|
|
}SHAREOUTPUTMSGTYPE;
|
|||
|
|
|
|||
|
|
//<2F><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
typedef int (STDCALL *SHAREOUTPUTMSGFN) (SHAREOUTPUTMSGTYPE MsgType, const char * msg, int len);
|
|||
|
|
|
|||
|
|
|
|||
|
|
//ȫ<><C8AB><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
int STDCALL OutputMsg(SHAREOUTPUTMSGTYPE MsgType, const char * format, ...);
|
|||
|
|
//ȫ<>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
//ɾ<><C9BE><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ʽΪ<CABD><CEAA>sprintf(sFormat, ...) + <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> + <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
int STDCALL OutputError(const int errcode, const char * format, ...);
|
|||
|
|
//<2F><>ʼ<EFBFBD><CABC>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
|
|||
|
|
void STDCALL InitDefMsgOut();
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
|
|||
|
|
void STDCALL UninitDefMsgOut();
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>ص<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
SHAREOUTPUTMSGFN STDCALL SetOutputMsgFn(SHAREOUTPUTMSGFN fn);
|
|||
|
|
|
|||
|
|
#ifdef _MSC_VER
|
|||
|
|
|
|||
|
|
//Ĭ<>ϵ<EFBFBD><CFB5>쳣<EFBFBD><ECB3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
long WINAPI DefaultUnHandleExceptionFilter(struct _EXCEPTION_POINTERS *ExceptionInfo);
|
|||
|
|
//<2F><>ȡϵͳ<CFB5>ṩ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
const char * GetSysErrorMessage(const int ErrorCode, char* sBuffer, size_t dwBufferSize, size_t *dwBufferNeeded);
|
|||
|
|
void SetMiniDumpFlag(int nFlag, const char* dump_file);
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
|
|||
|
|
//<2F>ַ<EFBFBD><D6B7><EFBFBD>ת64λ<34><CEBB><EFBFBD><EFBFBD>
|
|||
|
|
long long int StrToInt64(const char * sText);
|
|||
|
|
//<2F>ַ<EFBFBD><D6B7><EFBFBD>ת32λ<32><CEBB><EFBFBD><EFBFBD>
|
|||
|
|
int StrToInt(const char * sText);
|
|||
|
|
|
|||
|
|
#define NOW_T time(NULL)
|
|||
|
|
#define TIME_CHECK(X,Y) (X) > (Y)
|
|||
|
|
#define TIME_CHECK_NOW(Y) TIME_CHECK((NOW_T),(Y))
|
|||
|
|
|
|||
|
|
bool CheckIdentity(const char *id, bool *enough18);
|
|||
|
|
|
|||
|
|
#define MAKEFOUR(ch0, ch1, ch2, ch3) \
|
|||
|
|
((unsigned int)(unsigned char)(ch0) | ((unsigned int)(unsigned char)(ch1) << 8) | \
|
|||
|
|
((unsigned int)(unsigned char)(ch2) << 16) | ((unsigned int)(unsigned char)(ch3) << 24 ))
|
|||
|
|
|
|||
|
|
#ifndef _MSC_VER
|
|||
|
|
void Fork();
|
|||
|
|
|
|||
|
|
#else
|
|||
|
|
|
|||
|
|
//#define _M_DBGFUNC_BEGIN { __try {
|
|||
|
|
//#define _M_DBGFUNC_END }__except (DefaultUnHandleExceptionFilter(GetExceptionInformation()),EXCEPTION_EXECUTE_HANDLER){OutputMsg( rmTip, ("abnormal output!!!") );}}
|
|||
|
|
|
|||
|
|
#endif
|
|||
|
|
#define _M_DBGFUNC_BEGIN
|
|||
|
|
#define _M_DBGFUNC_END
|
|||
|
|
|
|||
|
|
void OutputWatchFile(const char* str, const char* fn = NULL);
|
|||
|
|
|
|||
|
|
void CheckDate();
|
|||
|
|
#endif
|