Datastore: More error checking.

This commit is contained in:
Uwe Hermann 2010-05-09 13:25:03 +02:00
parent 6b5e3ceefc
commit 33247d6acf
2 changed files with 20 additions and 5 deletions

View File

@ -25,11 +25,19 @@
static gpointer new_chunk(struct datastore **ds); 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 *datastore_new(int unitsize)
{ {
struct datastore *ds; 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->ds_unitsize = unitsize;
ds->num_units = 0; ds->num_units = 0;
ds->chunklist = NULL; ds->chunklist = NULL;
@ -37,14 +45,19 @@ struct datastore *datastore_new(int unitsize)
return ds; return ds;
} }
void datastore_destroy(struct datastore *ds) int datastore_destroy(struct datastore *ds)
{ {
GSList *chunk; GSList *chunk;
if (!ds)
return SIGROK_ERR;
for (chunk = ds->chunklist; chunk; chunk = chunk->next) for (chunk = ds->chunklist; chunk; chunk = chunk->next)
g_free(chunk->data); g_free(chunk->data);
g_slist_free(ds->chunklist); g_slist_free(ds->chunklist);
g_free(ds); g_free(ds);
return SIGROK_OK;
} }
void datastore_put(struct datastore *ds, void *data, unsigned int length, void datastore_put(struct datastore *ds, void *data, unsigned int length,
@ -93,7 +106,9 @@ static gpointer new_chunk(struct datastore **ds)
{ {
gpointer chunk; 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); (*ds)->chunklist = g_slist_append((*ds)->chunklist, chunk);
return chunk; return chunk;

View File

@ -178,12 +178,12 @@ void sigrok_cleanup(void);
struct datastore { struct datastore {
/* Size in bytes of the number of units stored in this datastore */ /* Size in bytes of the number of units stored in this datastore */
int ds_unitsize; int ds_unitsize;
unsigned int num_units; unsigned int num_units; /* TODO: uint64_t */
GSList *chunklist; GSList *chunklist;
}; };
struct datastore *datastore_new(int unitsize); 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, void datastore_put(struct datastore *ds, void *data, unsigned int length,
int in_unitsize, int *probelist); int in_unitsize, int *probelist);