windows-nt/Source/XPSP1/NT/ds/security/protocols/schannel/spbase/protutil.c

62 lines
1.5 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
#include <stdlib.h>
#include <spbase.h>
#include <wincrypt.h>
SP_STATUS SPAllocOutMem(DWORD cbMessage, PSPBuffer pCommOutput)
{
SP_BEGIN("SPAllocOutMem");
pCommOutput->cbData = cbMessage;
DebugLog((DEB_TRACE, "Output buffer size %x\n", cbMessage));
/* are we allocating our own memory? */
if(pCommOutput->pvBuffer == NULL)
{
pCommOutput->pvBuffer = SPExternalAlloc(pCommOutput->cbData);
if (NULL == pCommOutput->pvBuffer)
{
SP_RETURN(SP_LOG_RESULT(SEC_E_INSUFFICIENT_MEMORY));
}
pCommOutput->cbBuffer = pCommOutput->cbData;
}
if(pCommOutput->cbData > pCommOutput->cbBuffer)
{
// Required buffer size returned in pCommOutput->cbData.
SP_RETURN(PCT_INT_BUFF_TOO_SMALL);
}
SP_RETURN(PCT_ERR_OK);
}
//Make sure that we have cbMessage in the buffer, if not allocate,
//if more leave it alone
SP_STATUS SPAllocOutMemChk(DWORD cbMessage, PSPBuffer pOut)
{
SP_STATUS pctRet = PCT_ERR_OK;
if(pOut->cbBuffer < cbMessage)
{
SPBuffer spbufT;
spbufT.cbData = spbufT.cbBuffer = 0;
spbufT.pvBuffer = NULL;
pctRet = SPAllocOutMem(cbMessage, &spbufT);
if(PCT_ERR_OK == pctRet)
{
CopyMemory((PBYTE)spbufT.pvBuffer, (PBYTE)pOut->pvBuffer, pOut->cbData);
SPExternalFree(pOut->pvBuffer);
pOut->pvBuffer = spbufT.pvBuffer;
pOut->cbBuffer = cbMessage;
}
}
return(pctRet);
}