static int register_callback (llist_t **list, const char *name, void *callback)
{
llentry_t *le;
+ char *key;
if ((*list == NULL)
&& ((*list = llist_create ()) == NULL))
le = llist_search (*list, name);
if (le == NULL)
{
- le = llentry_create (name, callback);
+ key = strdup (name);
+ if (key == NULL)
+ return (-1);
+
+ le = llentry_create (key, callback);
if (le == NULL)
+ {
+ free (key);
return (-1);
+ }
llist_append (*list, le);
}
return (-1);
llist_remove (list, e);
+ free (e->key);
llentry_destroy (e);
return (0);
llist_remove (list_read, e);
free (e->value);
+ free (e->key);
llentry_destroy (e);
return (0);
llist_remove (list_data_set, e);
ds = (data_set_t *) e->value;
+ free (e->key);
llentry_destroy (e);
sfree (ds->ds);
{
llentry_t *head;
llentry_t *tail;
+ int size;
};
/*
free (l);
}
-llentry_t *llentry_create (const char *key, void *value)
+llentry_t *llentry_create (char *key, void *value)
{
llentry_t *e;
e = (llentry_t *) malloc (sizeof (llentry_t));
- if (e == NULL)
- return (NULL);
-
- e->key = strdup (key);
- e->value = value;
- e->next = NULL;
-
- if (e->key == NULL)
+ if (e)
{
- free (e);
- return (NULL);
+ e->key = key;
+ e->value = value;
+ e->next = NULL;
}
return (e);
void llentry_destroy (llentry_t *e)
{
- free (e->key);
free (e);
}
l->tail->next = e;
l->tail = e;
+
+ ++(l->size);
}
void llist_prepend (llist_t *l, llentry_t *e)
{
e->next = l->head;
l->head = e;
+ ++(l->size);
}
void llist_remove (llist_t *l, llentry_t *e)
l->head = e->next;
if (l->tail == e)
l->tail = prev;
+
+ --(l->size);
+}
+
+int llist_size (llist_t *l)
+{
+ return (l ? l->size : 0);
}
llentry_t *llist_search (llist_t *l, const char *key)
llist_t *llist_create (void);
void llist_destroy (llist_t *l);
-llentry_t *llentry_create (const char *key, void *value);
+llentry_t *llentry_create (char *key, void *value);
void llentry_destroy (llentry_t *e);
void llist_append (llist_t *l, llentry_t *e);
void llist_prepend (llist_t *l, llentry_t *e);
void llist_remove (llist_t *l, llentry_t *e);
+int llist_size (llist_t *l);
+
llentry_t *llist_search (llist_t *l, const char *key);
llentry_t *llist_head (llist_t *l);