| 354 size_t size, |
354 size_t size, |
| 355 size_t nitems, |
355 size_t nitems, |
| 356 CxBuffer *buffer |
356 CxBuffer *buffer |
| 357 ) { |
357 ) { |
| 358 size_t pos = buffer->pos; |
358 size_t pos = buffer->pos; |
| 359 buffer->pos = buffer->size; |
359 size_t append_pos = buffer->size; |
| |
360 buffer->pos = append_pos; |
| 360 size_t written = cxBufferWrite(ptr, size, nitems, buffer); |
361 size_t written = cxBufferWrite(ptr, size, nitems, buffer); |
| 361 buffer->pos = pos; |
362 // the buffer might have been flushed |
| |
363 // we must compute a possible delta for the position |
| |
364 // expected: pos = append_pos + written |
| |
365 // -> if this is not the case, there is a delta |
| |
366 size_t delta = append_pos + written*size - buffer->pos; |
| |
367 if (delta > pos) { |
| |
368 buffer->pos = 0; |
| |
369 } else { |
| |
370 buffer->pos = pos - delta; |
| |
371 } |
| 362 return written; |
372 return written; |
| 363 } |
373 } |
| 364 |
374 |
| 365 int cxBufferPut( |
375 int cxBufferPut( |
| 366 CxBuffer *buffer, |
376 CxBuffer *buffer, |