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