summaryrefslogtreecommitdiff
path: root/src/utils/dict.c
diff options
context:
space:
mode:
authorJohn Mark Bell <jmb@netsurf-browser.org>2008-11-09 20:06:20 +0000
committerJohn Mark Bell <jmb@netsurf-browser.org>2008-11-09 20:06:20 +0000
commitcfad5e411a897bd30bf9f6014e58a25f1ecb69da (patch)
tree90094db87e485614742420dfa3ab7279629ce39d /src/utils/dict.c
parent49fef60bc607ebb56b979b78f157b31619fea2eb (diff)
downloadlibparserutils-cfad5e411a897bd30bf9f6014e58a25f1ecb69da.tar.gz
libparserutils-cfad5e411a897bd30bf9f6014e58a25f1ecb69da.tar.bz2
Return errors from dictionary constructor/destructor
svn path=/trunk/libparserutils/; revision=5673
Diffstat (limited to 'src/utils/dict.c')
-rw-r--r--src/utils/dict.c33
1 files changed, 21 insertions, 12 deletions
diff --git a/src/utils/dict.c b/src/utils/dict.c
index 8b519ba..303389c 100644
--- a/src/utils/dict.c
+++ b/src/utils/dict.c
@@ -36,37 +36,46 @@ static void dict_del(void *key, void *value, void *pw);
* \param pw Pointer to client-specific private data
* \return Pointer to dictionary instance, or NULL on memory exhaustion
*/
-parserutils_dict *parserutils_dict_create(parserutils_alloc alloc, void *pw)
+parserutils_error parserutils_dict_create(parserutils_alloc alloc, void *pw,
+ parserutils_dict **dict)
{
- parserutils_dict *dict;
+ parserutils_dict *d;
- if (alloc == NULL)
- return NULL;
+ if (alloc == NULL || dict == NULL)
+ return PARSERUTILS_BADPARM;
- dict = alloc(NULL, sizeof(parserutils_dict), pw);
- if (dict == NULL)
- return NULL;
+ d = alloc(NULL, sizeof(parserutils_dict), pw);
+ if (d == NULL)
+ return PARSERUTILS_NOMEM;
- memset(dict->table, 0, TABLE_SIZE * sizeof(parserutils_rbtree *));
+ memset(d->table, 0, TABLE_SIZE * sizeof(parserutils_rbtree *));
- dict->alloc = alloc;
- dict->pw = pw;
+ d->alloc = alloc;
+ d->pw = pw;
- return dict;
+ *dict = d;
+
+ return PARSERUTILS_OK;
}
/**
* Destroy a dictionary
*
* \param dict The dictionary instance to destroy
+ * \return CSS_OK on success, appropriate error otherwise
*/
-void parserutils_dict_destroy(parserutils_dict *dict)
+parserutils_error parserutils_dict_destroy(parserutils_dict *dict)
{
+ if (dict == NULL)
+ return PARSERUTILS_BADPARM;
+
for (int i = 0; i < TABLE_SIZE; i++) {
parserutils_rbtree_destroy(dict->table[i], dict_del, dict);
}
dict->alloc(dict, 0, dict->pw);
+
+ return PARSERUTILS_OK;
}
/**