341
341
RTDECL(size_t) RTSgBufSegArrayCreate(PRTSGBUF pSgBuf, PRTSGSEG paSeg, unsigned *pcSeg, size_t cbData)
343
343
AssertPtrReturn(pSgBuf, 0);
344
AssertPtrReturn(paSeg, 0);
345
344
AssertPtrReturn(pcSeg, 0);
353
size_t cbThisSeg = cbData;
356
pvSeg = sgBufGet(pSgBuf, &cbThisSeg);
364
AssertMsg(cbThisSeg <= cbData, ("Impossible!\n"));
366
paSeg[cSeg].cbSeg = cbThisSeg;
367
paSeg[cSeg].pvSeg = pvSeg;
351
if (pSgBuf->cbSegLeft > 0)
353
size_t idx = pSgBuf->idxSeg;
356
cb += RT_MIN(pSgBuf->cbSegLeft, cbData);
357
cbData -= RT_MIN(pSgBuf->cbSegLeft, cbData);
360
&& idx < pSgBuf->cSegs - 1)
364
cb += RT_MIN(pSgBuf->paSegs[idx].cbSeg, cbData);
365
cbData -= RT_MIN(pSgBuf->paSegs[idx].cbSeg, cbData);
374
size_t cbThisSeg = cbData;
377
pvSeg = sgBufGet(pSgBuf, &cbThisSeg);
385
AssertMsg(cbThisSeg <= cbData, ("Impossible!\n"));
387
paSeg[cSeg].cbSeg = cbThisSeg;
388
paSeg[cSeg].pvSeg = pvSeg;