| 368 CxBuffer *buffer |
368 CxBuffer *buffer |
| 369 ) { |
369 ) { |
| 370 // trivial case |
370 // trivial case |
| 371 if (size == 0 || nitems == 0) return 0; |
371 if (size == 0 || nitems == 0) return 0; |
| 372 |
372 |
| 373 size_t pos = buffer->pos; |
373 const size_t pos = buffer->pos; |
| 374 size_t append_pos = buffer->size; |
374 buffer->pos = buffer->size; |
| 375 buffer->pos = append_pos; |
375 const size_t written = cxBufferWrite(ptr, size, nitems, buffer); |
| 376 size_t written = cxBufferWrite(ptr, size, nitems, buffer); |
376 buffer->pos = pos; |
| 377 // the buffer might have been flushed |
|
| 378 // we must compute a possible delta for the position |
|
| 379 // expected: pos = append_pos + written |
|
| 380 // -> if this is not the case, there is a delta |
|
| 381 size_t delta = append_pos + written*size - buffer->pos; |
|
| 382 if (delta > pos) { |
|
| 383 buffer->pos = 0; |
|
| 384 } else { |
|
| 385 buffer->pos = pos - delta; |
|
| 386 } |
|
| 387 return written; |
377 return written; |
| 388 } |
378 } |
| 389 |
379 |
| 390 int cxBufferPut( |
380 int cxBufferPut( |
| 391 CxBuffer *buffer, |
381 CxBuffer *buffer, |