X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;ds=inline;f=datastore.c;h=443ab1539d96c0bbf920f8da369488f9905cd684;hb=99c1fc59ed59785d44610ac07556143cb1617f01;hp=7f6f575a290f72592dfad04bd58be73c559e1411;hpb=a1bb33afbde769156ad4bef7a60579da64aebbb7;p=libsigrok.git diff --git a/datastore.c b/datastore.c index 7f6f575a..443ab153 100644 --- a/datastore.c +++ b/datastore.c @@ -21,12 +21,10 @@ #include #include #include -#include "sigrok.h" +#include static gpointer new_chunk(struct datastore **ds); - - struct datastore *datastore_new(int unitsize) { struct datastore *ds; @@ -39,54 +37,58 @@ struct datastore *datastore_new(int unitsize) return ds; } - void datastore_destroy(struct datastore *ds) { GSList *chunk; - for(chunk = ds->chunklist; chunk; chunk = chunk->next) + for (chunk = ds->chunklist; chunk; chunk = chunk->next) g_free(chunk->data); g_slist_free(ds->chunklist); g_free(ds); - } - -void datastore_put(struct datastore *ds, void *data, unsigned int length, int in_unitsize, int *probelist) +void datastore_put(struct datastore *ds, void *data, unsigned int length, + int in_unitsize, int *probelist) { - int capacity, stored, size, num_chunks, chunk_bytes_free, chunk_offset; + unsigned int stored; + int capacity, size, num_chunks, chunk_bytes_free, chunk_offset; gpointer chunk; - if(ds->chunklist == NULL) + /* QUICK HACK */ + in_unitsize = in_unitsize; + probelist = probelist; + + if (ds->chunklist == NULL) chunk = new_chunk(&ds); else chunk = g_slist_last(ds->chunklist)->data; + num_chunks = g_slist_length(ds->chunklist); capacity = (num_chunks * DATASTORE_CHUNKSIZE); chunk_bytes_free = capacity - (ds->ds_unitsize * ds->num_units); - chunk_offset = capacity - (DATASTORE_CHUNKSIZE * (num_chunks - 1)) - chunk_bytes_free; + chunk_offset = capacity - (DATASTORE_CHUNKSIZE * (num_chunks - 1)) + - chunk_bytes_free; stored = 0; - while(stored < length) { - if(chunk_bytes_free == 0) { + while (stored < length) { + if (chunk_bytes_free == 0) { chunk = new_chunk(&ds); chunk_bytes_free = DATASTORE_CHUNKSIZE; chunk_offset = 0; } - if(length - stored > chunk_bytes_free) + if (length - stored > (unsigned int)chunk_bytes_free) size = chunk_bytes_free; else - /* last part, won't fill up this chunk */ + /* Last part, won't fill up this chunk. */ size = length - stored; + memcpy(chunk + chunk_offset, data + stored, size); chunk_bytes_free -= size; stored += size; } ds->num_units += stored / ds->ds_unitsize; - } - static gpointer new_chunk(struct datastore **ds) { gpointer chunk; @@ -96,5 +98,3 @@ static gpointer new_chunk(struct datastore **ds) return chunk; } - -