#include <string.h>
#include <glib.h>
#include <sigrok.h>
+#include <sigrok-internal.h>
-static gpointer new_chunk(struct datastore **ds);
+static gpointer new_chunk(struct sr_datastore **ds);
-struct datastore *datastore_new(int unitsize)
+int sr_datastore_new(int unitsize, struct sr_datastore **ds)
{
- struct datastore *ds;
+ if (!ds)
+ return SR_ERR;
- ds = g_malloc(sizeof(struct datastore));
- ds->ds_unitsize = unitsize;
- ds->num_units = 0;
- ds->chunklist = NULL;
+ if (unitsize <= 0)
+ return SR_ERR; /* TODO: Different error? */
- return ds;
+ if (!(*ds = g_malloc(sizeof(struct sr_datastore))))
+ return SR_ERR_MALLOC;
+
+ (*ds)->ds_unitsize = unitsize;
+ (*ds)->num_units = 0;
+ (*ds)->chunklist = NULL;
+
+ return SR_OK;
}
-void datastore_destroy(struct datastore *ds)
+int sr_datastore_destroy(struct sr_datastore *ds)
{
GSList *chunk;
+ if (!ds)
+ return SR_ERR;
+
for (chunk = ds->chunklist; chunk; chunk = chunk->next)
g_free(chunk->data);
g_slist_free(ds->chunklist);
g_free(ds);
+
+ return SR_OK;
}
-void datastore_put(struct datastore *ds, void *data, unsigned int length,
- int in_unitsize, int *probelist)
+void sr_datastore_put(struct sr_datastore *ds, void *data, unsigned int length,
+ int in_unitsize, int *probelist)
{
unsigned int stored;
int capacity, size, num_chunks, chunk_bytes_free, chunk_offset;
gpointer chunk;
- /* QUICK HACK */
+ /* Avoid compiler warnings. */
in_unitsize = in_unitsize;
probelist = probelist;
ds->num_units += stored / ds->ds_unitsize;
}
-static gpointer new_chunk(struct datastore **ds)
+static gpointer new_chunk(struct sr_datastore **ds)
{
gpointer chunk;
- chunk = g_malloc(DATASTORE_CHUNKSIZE * (*ds)->ds_unitsize);
+ if (!(chunk = malloc(DATASTORE_CHUNKSIZE * (*ds)->ds_unitsize)))
+ return NULL;
+
(*ds)->chunklist = g_slist_append((*ds)->chunklist, chunk);
return chunk;