Files
mir_server/Gateway/srvlib/include/share_util.h

194 lines
5.3 KiB
C
Raw Normal View History

2025-01-09 17:45:40 +08:00
#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