示例#1
0
int RageFile::Seek( int offset )
{
	if( !IsOpen() )
		RageException::Throw("\"%s\" is not open.", GetPath().c_str());

	if( !(m_Mode&READ) )
		RageException::Throw("\"%s\" is not open for reading; can't seek", GetPath().c_str());

	m_EOF = false;

	ResetBuf();
	
	if( offset == 0 )
	{
		m_File->Rewind();
		m_FilePos = 0;
		return 0;
	}

	int pos = m_File->Seek( offset );
	if( pos == -1 )
		return -1;

	m_FilePos = pos;
	return pos;
}
void CStrSafeTester::test_StringCchPrintf()
{
    HRESULT hr = E_FAIL;
    TCHAR bufMin[MIN_BUFFER_SIZE] = {0};
    ResetBuf(bufMin,_countof(bufMin));

    hr = StringCchPrintf(bufMin,_countof(bufMin),TEXT("%s"),TEST_STRING);
    CPPUNIT_ASSERT(hr == STRSAFE_E_INSUFFICIENT_BUFFER);
    CPPUNIT_ASSERT(_tcscmp(bufMin,TEXT("abcd")) == 0);
    CPPUNIT_ASSERT(bufMin[MIN_BUFFER_SIZE - 1] == 0);
}
示例#3
0
RageFileObj::RageFileObj()
{
	m_pBuffer = NULL;

	ResetBuf();

	m_iBufAvail = 0;
	m_bEOF = false;
	m_iFilePos = 0;
	m_bCRC32Enabled = false;
	m_iCRC32 = 0;
}
示例#4
0
void CEgIStream::Assign( CEgIStream* inSource, long inBytes ) {


	if ( inSource ) {
		Dim( inBytes );
		if ( long(length()) < inBytes )
			inBytes = length();
		inSource -> GetBlock( getCStr(), inBytes );
	}

	ResetBuf();
}
void CTCharTester::test_tcscpy()
{
    TCHAR bufMin[MIN_BUFFER_SIZE] = {0};
    errno_t eRet = 0;
    TCHAR* pChatRet = NULL;

    //注意:本语句会造成程序崩溃 -- 而且无法用异常机制捕获
    //  调试版本弹出对话框 -- "Buffer is too small"
    //ResetBuf(bufMin,_countof(bufMin));
    // _tcscpy_s(bufMin, _countof(bufMin) , TEST_STRING);

    //"abc\0" -- Buf足够大,完整拷贝字符串,而且返回0表示正确
    ResetBuf(bufMin,_countof(bufMin));
    eRet = _tcsncpy_s(bufMin, _countof(bufMin), SHORT_TEST_STRING, _TRUNCATE);
    CPPUNIT_ASSERT(0 == eRet);
    CPPUNIT_ASSERT(_tcscmp(bufMin,TEXT("abc")) == 0);
    CPPUNIT_ASSERT(bufMin[MIN_BUFFER_SIZE - 1] == TEXT('*'));  //超过范围的字符不会变

    
    //"abcd\0" -- _tcsncpy_s 自动填充结束NULL
    ResetBuf(bufMin,_countof(bufMin));
    eRet = _tcsncpy_s(bufMin,_countof(bufMin),TEST_STRING,_TRUNCATE);
    CPPUNIT_ASSERT(STRUNCATE == eRet);
    CPPUNIT_ASSERT(_tcscmp(bufMin,TEXT("abcd")) == 0);
    CPPUNIT_ASSERT(bufMin[MIN_BUFFER_SIZE - 1] == TEXT('\0'));


    //"abcd*" -- _tcsncpy 不会自动填充结束NULL
    ResetBuf(bufMin,_countof(bufMin));
    pChatRet = _tcsncpy(bufMin,TEST_STRING,_countof(bufMin) - 1);
    CPPUNIT_ASSERT(pChatRet == bufMin);     //返回目的字符串的地址
    CPPUNIT_ASSERT(_tcsncmp(bufMin,TEXT("abcd"), MIN_BUFFER_SIZE - 1) == 0);
    CPPUNIT_ASSERT(bufMin[MIN_BUFFER_SIZE - 1] == TEXT('*'));  //没有自动填充最后的NULL
    bufMin[MIN_BUFFER_SIZE - 1]  = 0;  //需要手工填充确保结束NULL
    CPPUNIT_ASSERT(bufMin[MIN_BUFFER_SIZE - 1] == TEXT('\0'));
}
示例#6
0
RageFile::RageFile( const RageFile &cpy )
{
	ResetBuf();

	/* This will copy the file driver, including its internal file pointer. */
	m_File = FILEMAN->CopyFileObj( cpy.m_File, *this );
	m_Path = cpy.m_Path;
	m_Mode = cpy.m_Mode;
	m_Error = cpy.m_Error;
	m_EOF = cpy.m_EOF;
	m_FilePos = cpy.m_FilePos;
	memcpy( this->m_Buffer, cpy.m_Buffer, sizeof(m_Buffer) );
	m_pBuf = m_Buffer + (cpy.m_pBuf-cpy.m_Buffer);

	m_BufAvail = cpy.m_BufAvail;
}
void CStrSafeTester::test_StringCchCopy()
{
    HRESULT hr = E_FAIL;
    TCHAR bufMin[MIN_BUFFER_SIZE] = {0};
    ResetBuf(bufMin,_countof(bufMin));

    hr = StringCchCopy(bufMin,_countof(bufMin) - 1,TEST_STRING);//注意,这是错误写法,函数内部会考虑最后的 NULL 空间
    CPPUNIT_ASSERT(hr == STRSAFE_E_INSUFFICIENT_BUFFER);
    CPPUNIT_ASSERT(_tcscmp(bufMin,TEXT("abc")) == 0);
    CPPUNIT_ASSERT(bufMin[MIN_BUFFER_SIZE - 2] == 0);
    CPPUNIT_ASSERT(bufMin[MIN_BUFFER_SIZE - 1] == TEXT('*'));   //最后还有一个字符空间没有使用

    hr = StringCchCopy(bufMin,_countof(bufMin),TEST_STRING);
    CPPUNIT_ASSERT(hr == STRSAFE_E_INSUFFICIENT_BUFFER);
    CPPUNIT_ASSERT(_tcscmp(bufMin,TEXT("abcd")) == 0);
    CPPUNIT_ASSERT(bufMin[MIN_BUFFER_SIZE - 1] == 0);

}
示例#8
0
int RageFileObj::Seek( int iOffset )
{
	/* If we're already at the requested position, short circuit and don't flush
	 * our buffer. */
	if( iOffset == m_iFilePos )
		return m_iFilePos;

	m_bEOF = false;

	/* If we're calculating a CRC32, disable it. */
	m_bCRC32Enabled = false;

	ResetBuf();

	int iPos = SeekInternal( iOffset );
	if( iPos != -1 )
	        m_iFilePos = iPos;
	return iPos;
}
示例#9
0
bool RageFile::Open( const CString& path, int mode )
{
	ASSERT( FILEMAN );
	Close();

	m_Path = path;
	FixSlashesInPlace(m_Path);

	m_Mode = mode;
	m_EOF = false;
	m_FilePos = 0;
	ResetBuf();

	if( (m_Mode&READ) && (m_Mode&WRITE) )
	{
		SetError( "Reading and writing are mutually exclusive" );
		return false;
	}

	if( !(m_Mode&READ) && !(m_Mode&WRITE) )
	{
		SetError( "Neither reading nor writing specified" );
		return false;
	}

	int error;
	m_File = FILEMAN->Open( path, mode, *this, error );

	if( m_File == NULL )
	{
		SetError( strerror(error) );
		return false;
	}

    return true;
}
示例#10
0
void LoadCtrl::ChangeDirectory ()
{
	::SetCurrentDirectory (GetBuffer ());
	ResetBuf ();
	_listBox.ListDirectory (GetWindow (), GetBuffer (), IDC_STATICPATH);
}
示例#11
0
int CPlayer::ReStartMonitor()
{
	m_comSocket.Close();
	m_streamParser.ClearBuf();//清除缓冲
	memset(&m_rcRenderRect, 0, sizeof(RECT));
	if( m_comSocket.Connect(m_clientInfo.connInfo.ip, m_clientInfo.connInfo.port) < 0 )
    {
        m_comSocket.Close();
        return HHV_ERROR_CONNECT;
    }
	int	streamHeaderSize = 4*1024;
	memset( m_streamHeader, 0x00, sizeof(m_streamHeader) );

    int ret = MonitorStartCmdMT(m_comSocket.m_hSocket, &m_clientInfo, m_streamHeader, streamHeaderSize);
    if( ret < 0 )
    {
        m_comSocket.Close();
        return ret;
    }

	PlayM4_Stop(m_index);
	PlayM4_CloseStream( m_index);
	ResetBuf();

	//mode- 流模式(1-实时流/2-文件流)
	int nErr = 0;
	m_playType = STREAME_REALTIME;
	BOOL  bret =  PlayM4_SetStreamOpenMode(m_index, m_playType);
    bret =  PlayM4_OpenStream( m_index, (BYTE*)m_streamHeader, streamHeaderSize, 600*1024);
	if (!bret)
	{
		m_comSocket.Close();
		nErr =  PlayM4_GetLastError(m_index);

		return -nErr;
	}

	m_disconnection = false;
	if( ! PlayM4_RigisterDrawFun( m_index, MP4SDKDrawFun, (DWORD)this) )
	{
		m_comSocket.Close();
		nErr =  PlayM4_GetLastError(m_index);
		//TRACE_SDK_ERROR("执行 CHKSeries::RegisterDrawFun 中  PlayM4_RigisterDrawFun 函数 Fail nErr = %d strErr = %s\r\n\r\n", nErr, strErr.c_str() );
		return -nErr;
	}

	bret =  PlayM4_Play(m_index, m_hWnd);
	if (!bret)
	{
		nErr =  PlayM4_GetLastError(m_index);
		//string strErr = GetPlayMp4LastErrorStr( nErr );
		//TRACE_SDK_ERROR("执行 CHKSeries::OpenStream 中  PlayM4_Play 函数 Fail nErr = %d strErr = %s\r\n\r\n", nErr, strErr.c_str() );
		return -nErr;
	}

	m_hRenderWnd = m_hWnd;
	ResizeMonitorWindow();

    //memcpy(&m_clientInfo, clientInfo, sizeof(UNISDK_CLIENT_INFO));
    //开启线程, 接收视频流
    m_exit = false;
    UINT threadid(0);
    m_Thread = (HANDLE)_beginthreadex( NULL, 4*1024*1024, DecoderRoutine, this, 0, &threadid ); 
    if(m_Thread <= 0)
    {
        TRACE(_T("(MTVideo)!!!!!!开辟接受数据线程失败!m_Thread:%d errno:%d _doserrno:%d \r\n"),
            m_Thread, errno, _doserrno);
        SetEvent( m_hExitEvent );
    }
	
    CloseHandle( m_Thread );
  //
  //  TRACE(_T("(MTVideo)监视成功结束 m_PlayHandle = %d dvrIP = %s channel = %d\r\n"),
		//m_PlayHandle, m_clientInfo.connInfo.ip, clientInfo->channel);
    return m_index;
}
void CStrSafeTester::test_StringCchPrintfEx()
{
    HRESULT hr = E_FAIL;
    LPTSTR pszDestEnd = NULL;
    size_t cchRemaining = 0;    //包括结束符在内,未使用的字符数
    DWORD dwFlags;              //各种各样的参数

    /////////////////////////////                  测试缓冲区不足时的情况           /////////////////////////////////
    TCHAR bufMin[MIN_BUFFER_SIZE] = {0};

    dwFlags = 0;                            //"abcd\0"  -- 失败时和 StringCchPrintf 一样
    ResetBuf(bufMin,_countof(bufMin));
    hr = StringCchPrintfEx(bufMin,_countof(bufMin),&pszDestEnd,&cchRemaining,dwFlags,TEXT("%s"),TEST_STRING);
    CPPUNIT_ASSERT(hr == STRSAFE_E_INSUFFICIENT_BUFFER);
    CPPUNIT_ASSERT(_tcscmp(bufMin,TEXT("abcd")) == 0);
    CPPUNIT_ASSERT(bufMin[MIN_BUFFER_SIZE - 1] == 0);
    CPPUNIT_ASSERT(pszDestEnd == &bufMin[MIN_BUFFER_SIZE - 1]);
    CPPUNIT_ASSERT(cchRemaining == 1); 

    dwFlags = STRSAFE_FILL_BEHIND_NULL;     //"abcd\0"  -- 失败时和 StringCchPrintf 一样
    ResetBuf(bufMin,_countof(bufMin));
    hr = StringCchPrintfEx(bufMin,_countof(bufMin),&pszDestEnd,&cchRemaining,dwFlags,TEXT("%s"),TEST_STRING);
    CPPUNIT_ASSERT(hr == STRSAFE_E_INSUFFICIENT_BUFFER);
    CPPUNIT_ASSERT(_tcscmp(bufMin,TEXT("abcd")) == 0);
    CPPUNIT_ASSERT(bufMin[MIN_BUFFER_SIZE - 1] == 0);
    CPPUNIT_ASSERT(pszDestEnd == &bufMin[MIN_BUFFER_SIZE - 1]);
    CPPUNIT_ASSERT(cchRemaining == 1); 

    dwFlags = STRSAFE_IGNORE_NULLS;         //"abcd\0"  -- 失败时和 StringCchPrintf 一样
    ResetBuf(bufMin,_countof(bufMin));
    hr = StringCchPrintfEx(bufMin,_countof(bufMin),&pszDestEnd,&cchRemaining,dwFlags,TEXT("%s"),TEST_STRING);
    CPPUNIT_ASSERT(hr == STRSAFE_E_INSUFFICIENT_BUFFER);
    CPPUNIT_ASSERT(_tcscmp(bufMin,TEXT("abcd")) == 0);
    CPPUNIT_ASSERT(bufMin[MIN_BUFFER_SIZE - 1] == 0);
    CPPUNIT_ASSERT(pszDestEnd == &bufMin[MIN_BUFFER_SIZE - 1]);
    CPPUNIT_ASSERT(cchRemaining == 1); 

    dwFlags = STRSAFE_FILL_ON_FAILURE;      //"\0\0\0\0\0",失败时全部填充为 NULL
    ResetBuf(bufMin,_countof(bufMin));
    hr = StringCchPrintfEx(bufMin,_countof(bufMin),&pszDestEnd,&cchRemaining,dwFlags,TEXT("%s"),TEST_STRING);
    CPPUNIT_ASSERT(hr == STRSAFE_E_INSUFFICIENT_BUFFER);
    for (INT i = 0; i < _countof(bufMin); i++)
    {
        CPPUNIT_ASSERT(bufMin[i] == 0);
    }
    CPPUNIT_ASSERT(pszDestEnd == &bufMin[0]);
    CPPUNIT_ASSERT(cchRemaining == 5);

    dwFlags = STRSAFE_NULL_ON_FAILURE;      //"\0bcd\0",失败时和 StringCchPrintf 一样填充后,将首字母变为NULL
    ResetBuf(bufMin,_countof(bufMin));
    hr = StringCchPrintfEx(bufMin,_countof(bufMin),&pszDestEnd,&cchRemaining,dwFlags,TEXT("%s"),TEST_STRING);
    CPPUNIT_ASSERT(hr == STRSAFE_E_INSUFFICIENT_BUFFER);
    CPPUNIT_ASSERT(bufMin[0] == 0);
    CPPUNIT_ASSERT(_tcslen(bufMin) == 0);
    CPPUNIT_ASSERT(_tcscmp(&bufMin[1],TEXT("bcd")) == 0);
    CPPUNIT_ASSERT(pszDestEnd == &bufMin[0]);
    CPPUNIT_ASSERT(cchRemaining == 5);

    dwFlags = STRSAFE_NO_TRUNCATION;        //"\0bcd\0",失败时和 StringCchPrintf 一样填充后,将首字母变为NULL
    ResetBuf(bufMin,_countof(bufMin));
    hr = StringCchPrintfEx(bufMin,_countof(bufMin),&pszDestEnd,&cchRemaining,dwFlags,TEXT("%s"),TEST_STRING);
    CPPUNIT_ASSERT(hr == STRSAFE_E_INSUFFICIENT_BUFFER);
    CPPUNIT_ASSERT(_tcslen(bufMin) == 0);
    CPPUNIT_ASSERT(_tcscmp(&bufMin[1],TEXT("bcd")) == 0);
    CPPUNIT_ASSERT(bufMin[MIN_BUFFER_SIZE - 1] == 0);
    CPPUNIT_ASSERT(pszDestEnd == &bufMin[0]);
    CPPUNIT_ASSERT(cchRemaining == 5); 


    dwFlags = STRSAFE_FAILURE_BYTE('?');         //Unicode 时:0x3F3F 0x3F3F 0x3F3F 0x3F3F '\0',失败时前面填充为 0x3F,最后为NULL
    ResetBuf(bufMin,_countof(bufMin));
    hr = StringCchPrintfEx(bufMin,_countof(bufMin),&pszDestEnd,&cchRemaining,dwFlags,TEXT("%s"),TEST_STRING);
    CPPUNIT_ASSERT(hr == STRSAFE_E_INSUFFICIENT_BUFFER);
    CPPUNIT_ASSERT(bufMin[MIN_BUFFER_SIZE-1] == 0);

    for (INT i = 0; i < _countof(bufMin) - 1; i++)
    {
#ifdef UNICODE
        CPPUNIT_ASSERT(bufMin[i] == 0x3F3F);
#else
        CPPUNIT_ASSERT(bufMin[i] == 0x3F);
#endif
    }
    CPPUNIT_ASSERT(pszDestEnd == &bufMin[MIN_BUFFER_SIZE-1]);
    CPPUNIT_ASSERT(cchRemaining == 1);




    /////////////////////////////                  测试缓冲区足够长的情况           /////////////////////////////////
    TCHAR bufMax[MAX_BUFFER_SIZE] = {0};

    dwFlags = 0;                            //"abcde12345\0****"
    ResetBuf(bufMax,_countof(bufMax));
    hr = StringCchPrintfEx(bufMax,_countof(bufMax),&pszDestEnd,&cchRemaining,dwFlags,TEXT("%s"),TEST_STRING);
    CPPUNIT_ASSERT(hr == S_OK);
    CPPUNIT_ASSERT(_tcscmp(bufMax,TEXT("abcde12345")) == 0);
    CPPUNIT_ASSERT(_tcslen(bufMax) == TEST_STRING_LENGTH);
    CPPUNIT_ASSERT(bufMax[TEST_STRING_LENGTH] == 0);
#ifndef UNICODE
    //for (INT i = TEST_STRING_LENGTH + 1; i < MAX_BUFFER_SIZE; i++)
    //{
    //    CPPUNIT_ASSERT(bufMax[i] == TEXT('*'));
    //}
#endif
    CPPUNIT_ASSERT(pszDestEnd == &bufMax[TEST_STRING_LENGTH]);
    CPPUNIT_ASSERT(cchRemaining == MAX_BUFFER_SIZE - TEST_STRING_LENGTH); 

    dwFlags = STRSAFE_FILL_BEHIND_NULL;     //"abcde12345\0\0\0\0\0"
    ResetBuf(bufMax,_countof(bufMax));
    hr = StringCchPrintfEx(bufMax,_countof(bufMax),&pszDestEnd,&cchRemaining,dwFlags,TEXT("%s"),TEST_STRING);
    CPPUNIT_ASSERT(hr == S_OK);
    CPPUNIT_ASSERT(_tcscmp(bufMax,TEXT("abcde12345")) == 0);
    CPPUNIT_ASSERT(_tcslen(bufMax) == TEST_STRING_LENGTH);
    CPPUNIT_ASSERT(bufMax[TEST_STRING_LENGTH] == 0);
    for (INT i = TEST_STRING_LENGTH + 1; i < MAX_BUFFER_SIZE; i++)
    {
        CPPUNIT_ASSERT(bufMax[i] == 0);
    }
    CPPUNIT_ASSERT(pszDestEnd == &bufMax[TEST_STRING_LENGTH]);
    CPPUNIT_ASSERT(cchRemaining == MAX_BUFFER_SIZE - TEST_STRING_LENGTH); 


    dwFlags = STRSAFE_IGNORE_NULLS;         //"abcde12345\0****"
    ResetBuf(bufMax,_countof(bufMax));
    hr = StringCchPrintfEx(bufMax,_countof(bufMax),&pszDestEnd,&cchRemaining,dwFlags,TEXT("%s"),TEST_STRING);
    CPPUNIT_ASSERT(hr == S_OK);
    CPPUNIT_ASSERT(_tcscmp(bufMax,TEXT("abcde12345")) == 0);
    CPPUNIT_ASSERT(_tcslen(bufMax) == TEST_STRING_LENGTH);
    CPPUNIT_ASSERT(bufMax[TEST_STRING_LENGTH] == 0);
#ifndef UNICODE
    //for (INT i = TEST_STRING_LENGTH + 1; i < MAX_BUFFER_SIZE; i++)
    //{
    //    CPPUNIT_ASSERT(bufMax[i] == TEXT('*'));
    //}
#endif
    CPPUNIT_ASSERT(pszDestEnd == &bufMax[TEST_STRING_LENGTH]);
    CPPUNIT_ASSERT(cchRemaining == MAX_BUFFER_SIZE - TEST_STRING_LENGTH); 

    dwFlags = STRSAFE_FILL_ON_FAILURE;      //"abcde12345\0****"
    ResetBuf(bufMax,_countof(bufMax));
    hr = StringCchPrintfEx(bufMax,_countof(bufMax),&pszDestEnd,&cchRemaining,dwFlags,TEXT("%s"),TEST_STRING);
    CPPUNIT_ASSERT(hr == S_OK);
    CPPUNIT_ASSERT(_tcscmp(bufMax,TEXT("abcde12345")) == 0);
    CPPUNIT_ASSERT(_tcslen(bufMax) == TEST_STRING_LENGTH);
    CPPUNIT_ASSERT(bufMax[TEST_STRING_LENGTH] == 0);
#ifndef UNICODE
    //for (INT i = TEST_STRING_LENGTH + 1; i < MAX_BUFFER_SIZE; i++)
    //{
    //    CPPUNIT_ASSERT(bufMax[i] == TEXT('*'));
    //}
#endif
    CPPUNIT_ASSERT(pszDestEnd == &bufMax[TEST_STRING_LENGTH]);
    CPPUNIT_ASSERT(cchRemaining == MAX_BUFFER_SIZE - TEST_STRING_LENGTH); 

    dwFlags = STRSAFE_NULL_ON_FAILURE;      //"abcde12345\0****"
    ResetBuf(bufMax,_countof(bufMax));
    hr = StringCchPrintfEx(bufMax,_countof(bufMax),&pszDestEnd,&cchRemaining,dwFlags,TEXT("%s"),TEST_STRING);
    CPPUNIT_ASSERT(hr == S_OK);
    CPPUNIT_ASSERT(_tcscmp(bufMax,TEXT("abcde12345")) == 0);
    CPPUNIT_ASSERT(_tcslen(bufMax) == TEST_STRING_LENGTH);
    CPPUNIT_ASSERT(bufMax[TEST_STRING_LENGTH] == 0);
#ifndef UNICODE
    //for (INT i = TEST_STRING_LENGTH + 1; i < MAX_BUFFER_SIZE; i++)
    //{
    //    CPPUNIT_ASSERT(bufMax[i] == TEXT('*'));
    //}
#endif
    CPPUNIT_ASSERT(pszDestEnd == &bufMax[TEST_STRING_LENGTH]);
    CPPUNIT_ASSERT(cchRemaining == MAX_BUFFER_SIZE - TEST_STRING_LENGTH); 

    dwFlags = STRSAFE_NO_TRUNCATION;        //"abcde12345\0****"
    ResetBuf(bufMax,_countof(bufMax));
    hr = StringCchPrintfEx(bufMax,_countof(bufMax),&pszDestEnd,&cchRemaining,dwFlags,TEXT("%s"),TEST_STRING);
    CPPUNIT_ASSERT(hr == S_OK);
    CPPUNIT_ASSERT(_tcscmp(bufMax,TEXT("abcde12345")) == 0);
    CPPUNIT_ASSERT(_tcslen(bufMax) == TEST_STRING_LENGTH);
    CPPUNIT_ASSERT(bufMax[TEST_STRING_LENGTH] == 0);
#ifndef UNICODE
    //for (INT i = TEST_STRING_LENGTH + 1; i < MAX_BUFFER_SIZE; i++)
    //{
    //    CPPUNIT_ASSERT(bufMax[i] == TEXT('*'));
    //}
#endif
    CPPUNIT_ASSERT(pszDestEnd == &bufMax[TEST_STRING_LENGTH]);
    CPPUNIT_ASSERT(cchRemaining == MAX_BUFFER_SIZE - TEST_STRING_LENGTH); 


    //使用填充字符 -- '?' 对应 0x3F, 默认的填充字符为 NULL
    dwFlags = STRSAFE_FILL_BYTE('?');       //"abcde12345\0\" 0x3F3F 0x3F3F 0x3F3F 0x3F3F
    ResetBuf(bufMax,_countof(bufMax));
    hr = StringCchPrintfEx(bufMax,_countof(bufMax),&pszDestEnd,&cchRemaining,dwFlags,TEXT("%s"),TEST_STRING);
    CPPUNIT_ASSERT(hr == S_OK);
    CPPUNIT_ASSERT(_tcscmp(bufMax,TEXT("abcde12345")) == 0);
    CPPUNIT_ASSERT(_tcslen(bufMax) == TEST_STRING_LENGTH);
    CPPUNIT_ASSERT(bufMax[TEST_STRING_LENGTH] == 0);
    for (INT i = TEST_STRING_LENGTH + 1; i < MAX_BUFFER_SIZE; i++)
    {
#ifdef UNICODE
        CPPUNIT_ASSERT(bufMax[i] == 0x3F3F);
#else
        CPPUNIT_ASSERT(bufMax[i] == 0x3F);
#endif
    }
    CPPUNIT_ASSERT(pszDestEnd == &bufMax[TEST_STRING_LENGTH]);
    CPPUNIT_ASSERT(cchRemaining == MAX_BUFFER_SIZE - TEST_STRING_LENGTH); 

}
示例#13
0
void CEgIStream::Assign( void* inSource, long inBytes ) {
	UtilStr::Assign( inSource, inBytes );
	ResetBuf();
}