| Return Type | Function name | Arguments |
|---|---|---|
| unsigned int | hzXbuf::Append | (const void*,unsigned int,) |
Declared in file: hzXbuf.h
Defined in file : hzXbuf.cpp
Function Logic:
Function body:
unsigned int hzXbuf::Append (const void* vpStr, unsigned int nBytes)
{
_hzfunc("hzXbuf::Append(1)") ;
_xblk* curBlk ;
_xblk* newBlk ;
const char* i ;
uint32_t nCan ;
uint32_t nWritten = 0;
if (!nBytes)
return nBytes ;
if (!mx)
mx = new _xbuf() ;
if (!mx->m_Begin)
mx->m_Begin = mx->m_End = _xblk_alloc() ;
curBlk = (_xblk*) mx->m_End ;
if (!curBlk)
Fatal("Chain %p has no end block\n", this) ;
i = (char*) vpStr ;
for (; nWritten < nBytes ;)
{
if (curBlk->xize == XBLKSIZE)
{
newBlk = _xblk_alloc() ;
if (!newBlk)
Fatal("No allocation (case 2)\n") ;
curBlk->Next(newBlk) ;
mx->m_End = newBlk ;
curBlk = newBlk ;
}
nCan = XBLKSIZE - curBlk->xize ;
if ((nWritten + nCan) > nBytes)
nCan = nBytes - nWritten ;
memcpy(curBlk->m_Data + curBlk->xize, i, nCan) ;
curBlk->xize += nCan ;
i += nCan ;
mx->m_nSize += nCan ;
nWritten += nCan ;
}
return nWritten ;
}