Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

451 lines
9.2 KiB

#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);
}