25 #include "sigrok-internal.h"
54 sr_err(
"ds: %s: ds was NULL", __func__);
59 sr_err(
"ds: %s: unitsize was %d, but it must be >= 1",
64 if (!(*ds = g_try_malloc(
sizeof(
struct sr_datastore)))) {
65 sr_err(
"ds: %s: ds malloc failed", __func__);
69 (*ds)->ds_unitsize = unitsize;
71 (*ds)->chunklist = NULL;
91 sr_err(
"ds: %s: ds was NULL", __func__);
95 for (chunk = ds->
chunklist; chunk; chunk = chunk->next)
131 unsigned int length,
int in_unitsize,
const int *probelist)
134 int capacity, size, num_chunks, chunk_bytes_free, chunk_offset;
138 sr_err(
"ds: %s: ds was NULL", __func__);
144 sr_err(
"ds: %s: ds->ds_unitsize was 0", __func__);
149 sr_err(
"ds: %s: data was NULL", __func__);
153 if (in_unitsize < 1) {
154 sr_err(
"ds: %s: in_unitsize was %d, but it must be >= 1",
155 __func__, in_unitsize);
160 sr_err(
"ds: %s: probelist was NULL", __func__);
166 if (!(chunk = new_chunk(&ds))) {
167 sr_err(
"ds: %s: couldn't allocate new chunk", __func__);
171 chunk = g_slist_last(ds->
chunklist)->data;
175 num_chunks = g_slist_length(ds->
chunklist);
176 capacity = (num_chunks * DATASTORE_CHUNKSIZE);
178 chunk_offset = capacity - (DATASTORE_CHUNKSIZE * (num_chunks - 1))
182 while (stored < length) {
184 if (chunk_bytes_free == 0) {
185 if (!(chunk = new_chunk(&ds))) {
186 sr_err(
"ds: %s: couldn't allocate new chunk",
190 chunk_bytes_free = DATASTORE_CHUNKSIZE;
194 if (length - stored > (
unsigned int)chunk_bytes_free)
195 size = chunk_bytes_free;
198 size = length - stored;
200 memcpy(chunk + chunk_offset, data + stored, size);
201 chunk_bytes_free -= size;
233 chunk = g_try_malloc0(DATASTORE_CHUNKSIZE * (*ds)->ds_unitsize);
235 sr_err(
"ds: %s: chunk malloc failed", __func__);
239 (*ds)->chunklist = g_slist_append((*ds)->chunklist, chunk);