Lines Matching refs:ring

377 SANE_Status eds_ring_init(ring_buffer *ring, SANE_Int size)
379 ring->ring = realloc(ring->ring, size);
380 if (!ring->ring) {
384 ring->size = size;
385 ring->fill = 0;
386 ring->end = ring->ring + size;
387 ring->wp = ring->rp = ring->ring;
392 SANE_Status eds_ring_write(ring_buffer *ring, SANE_Byte *buf, SANE_Int size)
396 if (size > (ring->size - ring->fill)) {
397 DBG(1, "ring buffer full, requested: %d, available: %d\n", size, ring->size - ring->fill);
401 tail = ring->end - ring->wp;
404 memcpy(ring->wp, buf, size);
406 ring->wp += size;
407 ring->fill += size;
411 memcpy(ring->wp, buf, tail);
414 ring->wp = ring->ring;
415 memcpy(ring->wp, buf + tail, size);
417 ring->wp += size;
418 ring->fill += (tail + size);
424 SANE_Int eds_ring_read(ring_buffer *ring, SANE_Byte *buf, SANE_Int size)
428 DBG(18, "reading from ring, %d bytes available\n", (int)ring->fill);
431 if (size > ring->fill) {
432 DBG(1, "not enough data in the ring, shouldn't happen\n");
433 size = ring->fill;
436 tail = ring->end - ring->rp;
439 memcpy(buf, ring->rp, size);
441 ring->rp += size;
442 ring->fill -= size;
448 memcpy(buf, ring->rp, tail);
451 ring->rp = ring->ring;
452 memcpy(buf + tail, ring->rp, size);
454 ring->rp += size;
455 ring->fill -= (size + tail);
461 SANE_Int eds_ring_skip(ring_buffer *ring, SANE_Int size)
465 if (size > ring->fill)
466 size = ring->fill;
468 tail = ring->end - ring->rp;
470 ring->rp += size;
473 ring->rp = ring->ring + (size - tail);
476 ring->fill -= size;
481 SANE_Int eds_ring_avail(ring_buffer *ring)
483 return ring->fill;
486 void eds_ring_flush(ring_buffer *ring)
488 eds_ring_skip(ring, ring->fill);
491 void eds_ring_destory(ring_buffer *ring)
493 if (ring->ring)
495 free(ring->ring);
496 ring->ring = NULL;