⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dg_rtl.cpp

📁 该模块基于USB FX2开发板
💻 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 + -