src/buffer.c

changeset 1577
b5e6b91a98c3
parent 1576
7e19168d49d1
equal deleted inserted replaced
1576:7e19168d49d1 1577:b5e6b91a98c3
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,

mercurial