| 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, |