451 lines
9.2 KiB
C++
451 lines
9.2 KiB
C++
|
#include <tchar.h>
|
||
|
#include <stdio.h>
|
||
|
#include <io.h>
|
||
|
#include <objbase.h>
|
||
|
|
||
|
#include "sfstr.h"
|
||
|
|
||
|
#include "dbg.h"
|
||
|
|
||
|
#define ARRAYSIZE(a) (sizeof((a))/sizeof((a)[0]))
|
||
|
|
||
|
const WCHAR szOne[] = TEXT("0");
|
||
|
const WCHAR szTwo[] = TEXT("01");
|
||
|
const WCHAR szThree[] = TEXT("012");
|
||
|
const WCHAR szFour[] = TEXT("0123");
|
||
|
const WCHAR szFive[] = TEXT("01234");
|
||
|
|
||
|
int DoTest(int , wchar_t* [])
|
||
|
{
|
||
|
HRESULT hresTest = S_OK;
|
||
|
|
||
|
// For all fcts call
|
||
|
HRESULT hres;
|
||
|
|
||
|
WCHAR szDestTwo[2];
|
||
|
WCHAR szDestThree[3];
|
||
|
WCHAR szDestFour[4];
|
||
|
WCHAR szDestFive[5];
|
||
|
WCHAR szDestSix[6];
|
||
|
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// SafeStrCxxN
|
||
|
///////////////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// (1)
|
||
|
if (SUCCEEDED(hresTest))
|
||
|
{
|
||
|
hres = SafeStrCpyN(szDestFour, szThree, ARRAYSIZE(szDestFour));
|
||
|
|
||
|
if (FAILED(hres))
|
||
|
{
|
||
|
hresTest = E_FAIL;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// (2)
|
||
|
if (SUCCEEDED(hresTest))
|
||
|
{
|
||
|
hres = SafeStrCpyN(szDestThree, szThree, ARRAYSIZE(szDestThree));
|
||
|
|
||
|
if (SUCCEEDED(hres))
|
||
|
{
|
||
|
hresTest = E_FAIL;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// (3)
|
||
|
if (SUCCEEDED(hresTest))
|
||
|
{
|
||
|
hres = SafeStrCpyN(szDestFive, szThree, ARRAYSIZE(szDestFive));
|
||
|
|
||
|
if (FAILED(hres))
|
||
|
{
|
||
|
hresTest = E_FAIL;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
///////////////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// (1)
|
||
|
if (SUCCEEDED(hresTest))
|
||
|
{
|
||
|
hres = SafeStrCpyN(szDestSix, szThree, ARRAYSIZE(szDestSix));
|
||
|
|
||
|
if (FAILED(hres))
|
||
|
{
|
||
|
hresTest = E_FAIL;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (SUCCEEDED(hresTest))
|
||
|
{
|
||
|
hres = SafeStrCatN(szDestSix, szTwo, ARRAYSIZE(szDestSix));
|
||
|
|
||
|
if (FAILED(hres))
|
||
|
{
|
||
|
hresTest = E_FAIL;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// (2)
|
||
|
if (SUCCEEDED(hresTest))
|
||
|
{
|
||
|
hres = SafeStrCpyN(szDestSix, szThree, ARRAYSIZE(szDestSix));
|
||
|
|
||
|
if (FAILED(hres))
|
||
|
{
|
||
|
hresTest = E_FAIL;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (SUCCEEDED(hresTest))
|
||
|
{
|
||
|
hres = SafeStrCatN(szDestSix, szThree, ARRAYSIZE(szDestSix));
|
||
|
|
||
|
if (SUCCEEDED(hres))
|
||
|
{
|
||
|
hresTest = E_FAIL;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// (3)
|
||
|
if (SUCCEEDED(hresTest))
|
||
|
{
|
||
|
hres = SafeStrCpyN(szDestSix, szTwo, ARRAYSIZE(szDestSix));
|
||
|
|
||
|
if (FAILED(hres))
|
||
|
{
|
||
|
hresTest = E_FAIL;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (SUCCEEDED(hresTest))
|
||
|
{
|
||
|
hres = SafeStrCatN(szDestSix, szTwo, ARRAYSIZE(szDestSix));
|
||
|
|
||
|
if (FAILED(hres))
|
||
|
{
|
||
|
hresTest = E_FAIL;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// SafeStrCxxNEx
|
||
|
///////////////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// (1)
|
||
|
LPWSTR pszNext = 0;
|
||
|
DWORD cchLeft = 0;
|
||
|
|
||
|
if (SUCCEEDED(hresTest))
|
||
|
{
|
||
|
hres = SafeStrCpyNEx(szDestFour, szThree, ARRAYSIZE(szDestFour), &pszNext,
|
||
|
&cchLeft);
|
||
|
|
||
|
if (FAILED(hres) || (1 != cchLeft))
|
||
|
{
|
||
|
hresTest = E_FAIL;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// (2)
|
||
|
if (SUCCEEDED(hresTest))
|
||
|
{
|
||
|
hres = SafeStrCpyNEx(szDestThree, szThree, ARRAYSIZE(szDestThree),
|
||
|
&pszNext, &cchLeft);
|
||
|
|
||
|
if (SUCCEEDED(hres))
|
||
|
{
|
||
|
hresTest = E_FAIL;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// (3)
|
||
|
if (SUCCEEDED(hresTest))
|
||
|
{
|
||
|
hres = SafeStrCpyNEx(szDestFive, szThree, ARRAYSIZE(szDestFive), &pszNext,
|
||
|
&cchLeft);
|
||
|
|
||
|
if (FAILED(hres) || (2 != cchLeft))
|
||
|
{
|
||
|
hresTest = E_FAIL;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
///////////////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// (1)
|
||
|
if (SUCCEEDED(hresTest))
|
||
|
{
|
||
|
hres = SafeStrCpyNEx(szDestSix, szThree, ARRAYSIZE(szDestSix), &pszNext,
|
||
|
&cchLeft);
|
||
|
|
||
|
if (FAILED(hres) || (3 != cchLeft))
|
||
|
{
|
||
|
hresTest = E_FAIL;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (SUCCEEDED(hresTest))
|
||
|
{
|
||
|
hres = SafeStrCpyN(pszNext, szTwo, cchLeft);
|
||
|
|
||
|
if (FAILED(hres))
|
||
|
{
|
||
|
hresTest = E_FAIL;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// (2)
|
||
|
if (SUCCEEDED(hresTest))
|
||
|
{
|
||
|
hres = SafeStrCpyNEx(szDestSix, szThree, ARRAYSIZE(szDestSix), &pszNext,
|
||
|
&cchLeft);
|
||
|
|
||
|
if (FAILED(hres) || (3 != cchLeft))
|
||
|
{
|
||
|
hresTest = E_FAIL;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (SUCCEEDED(hresTest))
|
||
|
{
|
||
|
hres = SafeStrCpyN(pszNext, szThree, cchLeft);
|
||
|
|
||
|
if (SUCCEEDED(hres))
|
||
|
{
|
||
|
hresTest = E_FAIL;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// (3)
|
||
|
if (SUCCEEDED(hresTest))
|
||
|
{
|
||
|
hres = SafeStrCpyNEx(szDestSix, szTwo, ARRAYSIZE(szDestSix), &pszNext,
|
||
|
&cchLeft);
|
||
|
|
||
|
if (FAILED(hres) || (4 != cchLeft))
|
||
|
{
|
||
|
hresTest = E_FAIL;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (SUCCEEDED(hresTest))
|
||
|
{
|
||
|
hres = SafeStrCpyN(pszNext, szTwo, cchLeft);
|
||
|
|
||
|
if (FAILED(hres))
|
||
|
{
|
||
|
hresTest = E_FAIL;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
///////////////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// (1)
|
||
|
if (SUCCEEDED(hresTest))
|
||
|
{
|
||
|
hres = SafeStrCpyN(szDestSix, szThree, ARRAYSIZE(szDestSix));
|
||
|
|
||
|
if (FAILED(hres))
|
||
|
{
|
||
|
hresTest = E_FAIL;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (SUCCEEDED(hresTest))
|
||
|
{
|
||
|
hres = SafeStrCatNEx(szDestSix, szTwo, ARRAYSIZE(szDestSix), &pszNext,
|
||
|
&cchLeft);
|
||
|
|
||
|
if (FAILED(hres) || (1 != cchLeft))
|
||
|
{
|
||
|
hresTest = E_FAIL;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// (2)
|
||
|
if (SUCCEEDED(hresTest))
|
||
|
{
|
||
|
hres = SafeStrCpyN(szDestSix, szThree, ARRAYSIZE(szDestSix));
|
||
|
|
||
|
if (FAILED(hres))
|
||
|
{
|
||
|
hresTest = E_FAIL;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (SUCCEEDED(hresTest))
|
||
|
{
|
||
|
hres = SafeStrCatNEx(szDestSix, szThree, ARRAYSIZE(szDestSix), &pszNext,
|
||
|
&cchLeft);
|
||
|
|
||
|
if (SUCCEEDED(hres))
|
||
|
{
|
||
|
hresTest = E_FAIL;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// (3)
|
||
|
if (SUCCEEDED(hresTest))
|
||
|
{
|
||
|
hres = SafeStrCpyN(szDestSix, szTwo, ARRAYSIZE(szDestSix));
|
||
|
|
||
|
if (FAILED(hres))
|
||
|
{
|
||
|
hresTest = E_FAIL;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (SUCCEEDED(hresTest))
|
||
|
{
|
||
|
hres = SafeStrCatNEx(szDestSix, szTwo, ARRAYSIZE(szDestSix), &pszNext,
|
||
|
&cchLeft);
|
||
|
|
||
|
if (FAILED(hres) || (2 != cchLeft))
|
||
|
{
|
||
|
hresTest = E_FAIL;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// SafeStrCpyNExact
|
||
|
///////////////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// (1)
|
||
|
if (SUCCEEDED(hresTest))
|
||
|
{
|
||
|
hres = SafeStrCpyNExact(szDestFour, szThree, ARRAYSIZE(szDestFour), 1);
|
||
|
|
||
|
if (FAILED(hres))
|
||
|
{
|
||
|
hresTest = E_FAIL;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//
|
||
|
if (SUCCEEDED(hresTest))
|
||
|
{
|
||
|
hres = SafeStrCpyNExact(szDestFour, szThree, ARRAYSIZE(szDestFour), 2);
|
||
|
|
||
|
if (FAILED(hres))
|
||
|
{
|
||
|
hresTest = E_FAIL;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//
|
||
|
if (SUCCEEDED(hresTest))
|
||
|
{
|
||
|
hres = SafeStrCpyNExact(szDestFour, szThree, ARRAYSIZE(szDestFour), 3);
|
||
|
|
||
|
if (FAILED(hres))
|
||
|
{
|
||
|
hresTest = E_FAIL;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//
|
||
|
if (SUCCEEDED(hresTest))
|
||
|
{
|
||
|
hres = SafeStrCpyNExact(szDestFour, szThree, ARRAYSIZE(szDestFour), 4);
|
||
|
|
||
|
if (FAILED(hres))
|
||
|
{
|
||
|
hresTest = E_FAIL;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//
|
||
|
if (SUCCEEDED(hresTest))
|
||
|
{
|
||
|
hres = SafeStrCpyNExact(szDestFour, szThree, ARRAYSIZE(szDestFour), 5);
|
||
|
|
||
|
if (SUCCEEDED(hres) || (E_SOURCEBUFFERTOOSMALL != hres))
|
||
|
{
|
||
|
hresTest = E_FAIL;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//
|
||
|
if (SUCCEEDED(hresTest))
|
||
|
{
|
||
|
hres = SafeStrCpyNExact(szDestTwo, szThree, ARRAYSIZE(szDestTwo), 5);
|
||
|
|
||
|
if (SUCCEEDED(hres) || (E_BUFFERTOOSMALL != hres))
|
||
|
{
|
||
|
hresTest = E_FAIL;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// SafeStrCpyNExactEx
|
||
|
///////////////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// (1)
|
||
|
if (SUCCEEDED(hresTest))
|
||
|
{
|
||
|
hres = SafeStrCpyNExactEx(szDestFour, szThree, ARRAYSIZE(szDestFour), 1,
|
||
|
&pszNext, &cchLeft);
|
||
|
|
||
|
if (FAILED(hres) || (4 != cchLeft))
|
||
|
{
|
||
|
hresTest = E_FAIL;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//
|
||
|
if (SUCCEEDED(hresTest))
|
||
|
{
|
||
|
hres = SafeStrCpyNExactEx(szDestFour, szThree, ARRAYSIZE(szDestFour), 2,
|
||
|
&pszNext, &cchLeft);
|
||
|
|
||
|
if (FAILED(hres) || (3 != cchLeft))
|
||
|
{
|
||
|
hresTest = E_FAIL;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//
|
||
|
if (SUCCEEDED(hresTest))
|
||
|
{
|
||
|
hres = SafeStrCpyNExactEx(szDestFour, szThree, ARRAYSIZE(szDestFour), 3,
|
||
|
&pszNext, &cchLeft);
|
||
|
|
||
|
if (FAILED(hres) || (2 != cchLeft))
|
||
|
{
|
||
|
hresTest = E_FAIL;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//
|
||
|
if (SUCCEEDED(hresTest))
|
||
|
{
|
||
|
hres = SafeStrCpyNExactEx(szDestFour, szThree, ARRAYSIZE(szDestFour), 4,
|
||
|
&pszNext, &cchLeft);
|
||
|
|
||
|
if (FAILED(hres) || (1 != cchLeft))
|
||
|
{
|
||
|
hresTest = E_FAIL;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//
|
||
|
if (SUCCEEDED(hresTest))
|
||
|
{
|
||
|
hres = SafeStrCpyNExactEx(szDestFour, szThree, ARRAYSIZE(szDestFour), 5,
|
||
|
&pszNext, &cchLeft);
|
||
|
|
||
|
if (SUCCEEDED(hres))
|
||
|
{
|
||
|
hresTest = E_FAIL;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return SUCCEEDED(hresTest);
|
||
|
}
|