📄 dg_rtl.cpp
字号:
#include <string.h>
#include <stdio.h>
#include <malloc.h>
#include <windows.h>
#include <io.h>
#include "Lock.h"
#include "stdafx.h"
#define BUF_MAX 0x00010000 //64K
CMutex g_UsbMutex[8];
int dg_syserr (
const char* szFile, int nLine, // replace with INC_LINE or NON_LINE
int errno_save
)
{
char szSystemMsg[256];
char szLocation[256];
char szMsg[768];
//for snprintf
memset(szSystemMsg, 0, sizeof(szSystemMsg));
memset(szLocation, 0, sizeof(szLocation));
memset(szMsg, 0, sizeof(szMsg));
// get system error information
#ifdef WIN32
errno_save = errno_save;
LPVOID lpszBuf = NULL;
FormatMessage (
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
GetLastError(),
0,
(LPTSTR)&lpszBuf,
0,
NULL
);
_snprintf (szSystemMsg, sizeof(szSystemMsg)-1, "system msg: [error code %d]%s", GetLastError(), (char *)lpszBuf);
if (lpszBuf) LocalFree (lpszBuf);
#else
if (errno_save)
snprintf (szSystemMsg, sizeof(szSystemMsg)-1, "system msg: [error code %d]%s", errno_save, strerror(errno_save));
#endif
//int len = (int)strlen (szSystemMsg);
//for (int i = len - 2; i < len; i++){
// if (szSystemMsg[i] == '\n' || szSystemMsg[i] == '\r'){
// szSystemMsg[i] = '\0';
// }
//}
// get location of error occuring
if (szFile != NULL && nLine != -1)
{
#ifdef WIN32
_snprintf (szLocation, sizeof(szLocation)-1, " at line %d in %s", nLine, szFile);
#else
snprintf (szLocation, sizeof(szLocation)-1, " at line %d in %s", nLine, szFile);
#endif
}
// format and output the message
#ifdef WIN32
_snprintf(szMsg, sizeof(szMsg)-1, "system error occurs%s. system msg: %s\n", szLocation, szSystemMsg);
//MessageBox(NULL, szMsg, "Program Error Info", MB_OK|MB_ICONERROR);
#else
snprintf (szMsg, sizeof(szMsg)-1, "system error occurs%s. %s\n", szLocation, szSystemMsg);
syslog(LOG_USER|LOG_ERR, "DiagLog: %s", szMsg); //output to /var/log/messages
printf(szMsg); //output to console
#endif
return 0;
}
//memcpy must be replaced by the below format
//memcpy(buf, pbData, min(cbData,BUFFER_SIZE));
///////////////////////////////////////////////////////////////////////////
int dg_snprintf(
const char* szFile, int nLine, // replace with INC_LINE or NON_LINE
char *buffer,
size_t count,
const char* format, ...
)
{
int errno_save = 0;
if (count >0 &&
count <= BUF_MAX &&
buffer)
{
memset(buffer, 0, count);
va_list argptr;
va_start (argptr, format);
#ifdef WIN32
int num_write = _vsnprintf(buffer, count-1, format, argptr);
#else
int num_write = vsnprintf (buffer, count-1, format, argptr);
errno_save = errno;
#endif
va_end (argptr);
if (num_write >= 0 &&
num_write < (int)count)
return num_write; //successed
}
dg_syserr(szFile, nLine, errno_save);
return -1;
}
///////////////////////////////////////////////////////////////////////////
char *dg_strcpy(
const char* szFile, int nLine, // replace with INC_LINE or NON_LINE
char *strDest,
size_t count,
const char *strSource
)
{
int errno_save = 0;
if (count >0 &&
count <= BUF_MAX &&
strDest &&
strSource)
{
size_t srclen;
srclen = strlen(strSource);
if (srclen < count) //if (srclen + 1 <= count) //'\0'
{
return strcpy(strDest, strSource); //successed
}
}
dg_syserr(szFile, nLine, errno_save);
return NULL;
}
///////////////////////////////////////////////////////////////////////////
char *dg_strcat(
const char* szFile, int nLine, // replace with INC_LINE or NON_LINE
char *strDest,
size_t count,
const char *strSource
)
{
int errno_save = 0;
if (count >0 &&
count <= BUF_MAX &&
strDest &&
strSource)
{
size_t destlen, srclen;
destlen = strlen(strDest);
srclen = strlen(strSource);
if (destlen + srclen < count) //if (destlen + srclen + 1 <= count) //'\0'
{
return strcat(strDest, strSource); //successed
}
}
dg_syserr(szFile, nLine, errno_save);
return NULL;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -