int count; //!< number of packets we read from this file.
+ size_t leftover;
+ uint8_t *leftover_buffer;
+
size_t last_search; //!< where we last searched in the buffer
//!< MUST be offset, as the buffers can change.
fr_dlist_remove(&track->entry);
+ /*
+ * Don't over-write "leftover" bytes!
+ */
+ if (*leftover) {
+ rad_assert(inst->leftover == 0);
+ if (!inst->leftover_buffer) MEM(inst->leftover_buffer = talloc_array(inst, uint8_t, buffer_len));
+
+ memcpy(inst->leftover_buffer, buffer, *leftover);
+ inst->leftover = *leftover;
+ *leftover = 0;
+ }
+
rad_assert(buffer_len >= track->packet_len);
memcpy(buffer, track->packet, track->packet_len);
return 0;
}
+ /*
+ * If we've cached leftover data from the ring buffer,
+ * copy it back.
+ */
+ if (inst->leftover) {
+ rad_assert(*leftover == 0);
+ rad_assert(inst->leftover < buffer_len);
+
+ memcpy(buffer, inst->leftover_buffer, inst->leftover);
+ *leftover = inst->leftover;
+ }
+
/*
* Seek to the current read offset.
*/