]> sigrok.org Git - libsigrok.git/commitdiff
Datastore: More error checking.
authorUwe Hermann <redacted>
Sun, 9 May 2010 11:25:03 +0000 (13:25 +0200)
committerUwe Hermann <redacted>
Sun, 9 May 2010 20:06:27 +0000 (22:06 +0200)
datastore.c
sigrok.h

index 443ab1539d96c0bbf920f8da369488f9905cd684..bb59fd587cbe5cf3d5cdd5a8e7025d3378ff3e43 100644 (file)
 
 static gpointer new_chunk(struct datastore **ds);
 
+/* TODO: Return int as error status, and the struct as param. */
 struct datastore *datastore_new(int unitsize)
 {
        struct datastore *ds;
 
-       ds = g_malloc(sizeof(struct datastore));
+       if (unitsize <= 0)
+               // return SIGROK_ERR;
+               return NULL; /* FIXME */
+
+       if (!(ds = g_malloc(sizeof(struct datastore))))
+               // return SIGROK_ERR_MALLOC;
+               return NULL; /* FIXME */
+
        ds->ds_unitsize = unitsize;
        ds->num_units = 0;
        ds->chunklist = NULL;
@@ -37,14 +45,19 @@ struct datastore *datastore_new(int unitsize)
        return ds;
 }
 
-void datastore_destroy(struct datastore *ds)
+int datastore_destroy(struct datastore *ds)
 {
        GSList *chunk;
 
+       if (!ds)
+               return SIGROK_ERR;
+       
        for (chunk = ds->chunklist; chunk; chunk = chunk->next)
                g_free(chunk->data);
        g_slist_free(ds->chunklist);
        g_free(ds);
+
+       return SIGROK_OK;
 }
 
 void datastore_put(struct datastore *ds, void *data, unsigned int length,
@@ -93,7 +106,9 @@ static gpointer new_chunk(struct 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;
index 6525fa843b9af460987bdcd9aa3cd009123289dd..bd1e89095d8e6613d7be25a489aaa9a566212dea 100644 (file)
--- a/sigrok.h
+++ b/sigrok.h
@@ -178,12 +178,12 @@ void sigrok_cleanup(void);
 struct datastore {
        /* Size in bytes of the number of units stored in this datastore */
        int ds_unitsize;
-       unsigned int num_units;
+       unsigned int num_units; /* TODO: uint64_t */
        GSList *chunklist;
 };
 
 struct datastore *datastore_new(int unitsize);
-void datastore_destroy(struct datastore *ds);
+int datastore_destroy(struct datastore *ds);
 void datastore_put(struct datastore *ds, void *data, unsigned int length,
                   int in_unitsize, int *probelist);