]> sigrok.org Git - libsigrok.git/blobdiff - datastore.c
libsigrok: Introduce sr_dbg/sr_info/sr_warn/sr_err.
[libsigrok.git] / datastore.c
index 443ab1539d96c0bbf920f8da369488f9905cd684..7f35ee5aae5b343101d579be4d6ea1ef03169e73 100644 (file)
 #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;
 
@@ -89,11 +101,13 @@ void datastore_put(struct datastore *ds, void *data, unsigned int length,
        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;