|
From: <cli...@li...> - 2007-05-21 17:55:04
|
Revision: 55
http://cligg.svn.sourceforge.net/cligg/?rev=55&view=rev
Author: sithhell
Date: 2007-05-21 10:55:01 -0700 (Mon, 21 May 2007)
Log Message:
-----------
fixed various stuff
Modified Paths:
--------------
src/bin/cligg_eventhandler.c
src/bin/cligg_mainloop.c
src/bin/cligg_modulehandler.c
src/lib/cligg_btree.c
src/lib/cligg_event.c
src/lib/cligg_hashmap.c
src/lib/cligg_hashmap.h
src/lib/cligg_list.c
Modified: src/bin/cligg_eventhandler.c
===================================================================
--- src/bin/cligg_eventhandler.c 2007-05-16 16:27:24 UTC (rev 54)
+++ src/bin/cligg_eventhandler.c 2007-05-21 17:55:01 UTC (rev 55)
@@ -162,7 +162,7 @@
}
new = (cligg_event_function *)cligg_hashmap_get_element(event_map, tmp);
- cligg_event_function_del(tmp);
+
if(new == NULL) ret = NULL;
else ret = new->event_cb;
Modified: src/bin/cligg_mainloop.c
===================================================================
--- src/bin/cligg_mainloop.c 2007-05-16 16:27:24 UTC (rev 54)
+++ src/bin/cligg_mainloop.c 2007-05-21 17:55:01 UTC (rev 55)
@@ -1,5 +1,6 @@
#include <stdlib.h>
#include <stdio.h>
+#include <string.h>
#include <pthread.h>
#include <cligg.h>
#include <cligglib.h>
@@ -53,13 +54,18 @@
return (void *)EXIT_FAILURE;
cb = cligg_lookup_event(new->name);
+ free(new->name);
- if(cb == NULL) continue;
-
- if(!cb(new->data))
- fprintf(stderr, "Event callback failed!\n");
- if(strcmp(new->name, "quit_cligg") == 0) break;
+ if(cb == NULL) {
+ fprintf(stderr, "No Callback specified!\n");
+ }
+ else {
+ if(!cb(new->data))
+ fprintf(stderr, "Event callback failed!\n");
+ }
+ /*if(strcmp(new->name, "quit_cligg") == 0) break;*/
+ free(new);
}
- return (void *)EXIT_SUCCESS;
+ pthread_exit((void *)EXIT_SUCCESS);
}
Modified: src/bin/cligg_modulehandler.c
===================================================================
--- src/bin/cligg_modulehandler.c 2007-05-16 16:27:24 UTC (rev 54)
+++ src/bin/cligg_modulehandler.c 2007-05-21 17:55:01 UTC (rev 55)
@@ -61,6 +61,7 @@
new->handle = dlopen(path, RTLD_LAZY);
if(!new->handle) {
fprintf(stderr, "Error loading module: %s\n", dlerror());
+ cligg_module_del(new);
return FALSE;
}
@@ -80,7 +81,6 @@
return FALSE;
}
-
dlerror(); /* clear any existing errors */
return ret;
}
Modified: src/lib/cligg_btree.c
===================================================================
--- src/lib/cligg_btree.c 2007-05-16 16:27:24 UTC (rev 54)
+++ src/lib/cligg_btree.c 2007-05-21 17:55:01 UTC (rev 55)
@@ -35,11 +35,11 @@
CLIGG void
cligg_btree_clear(cligg_btree *tree)
{
- cligg_list *tofree = cligg_list_new(NULL);
+ /*cligg_list *tofree = cligg_list_new(NULL);
if(tofree == NULL) {
perror("Couldn't clear tree");
return;
- }
+ }*/
del(tree->root, tree->free_func);
@@ -52,8 +52,8 @@
del(dele->left, free_func);
del(dele->right, free_func);
- /*if(free_func)
- free_func(dele->data);*/
+ if(free_func)
+ free_func(dele->data);
free(dele);
}
@@ -149,9 +149,15 @@
}
if(tmp != tmp1) {
tmp->data = tmp1->data;
+ if(tree->free_func)
+ tree->free_func(tmp1->data);
free(tmp1);
}
- else free(tmp);
+ else {
+ if(tree->free_func)
+ tree->free_func(tmp->data);
+ free(tmp);
+ }
tree->size--;
Modified: src/lib/cligg_event.c
===================================================================
--- src/lib/cligg_event.c 2007-05-16 16:27:24 UTC (rev 54)
+++ src/lib/cligg_event.c 2007-05-21 17:55:01 UTC (rev 55)
@@ -39,7 +39,7 @@
new->name = malloc(strlen(name) * sizeof(char) + 1);
if(new->name == NULL) {
- free(new);
+ free(new);
return NULL;
}
@@ -54,7 +54,7 @@
CLIGG void
cligg_event_function_del(void *event)
{
- free(((cligg_event_function *)event)->name);
- ((cligg_event_function *)event)->event_cb = NULL;
- /*free(event);*/
+ cligg_event_function *tmp = event;
+ free(tmp->name);
+ free(tmp);
}
Modified: src/lib/cligg_hashmap.c
===================================================================
--- src/lib/cligg_hashmap.c 2007-05-16 16:27:24 UTC (rev 54)
+++ src/lib/cligg_hashmap.c 2007-05-21 17:55:01 UTC (rev 55)
@@ -29,7 +29,8 @@
flags |= BALANCE;
- new->map = cligg_btree_new(free_func, cmp);
+ new->map = cligg_btree_new(cligg_hashmap_element_delete, cmp);
+ new->free_func = free_func;
if(hash_func == NULL) {
fprintf(stderr, "Need a hash function!\n");
@@ -61,11 +62,9 @@
cligg_hashmap_add_element(cligg_hashmap *map,
void *data)
{
- cligg_hashmap_element *new = (cligg_hashmap_element *)malloc(sizeof(cligg_hashmap_element));
+ cligg_hashmap_element *new = cligg_hashmap_element_new(data, map->free_func, map->hash_func);
if(!new)
return FALSE;
- new->hash = map->hash_func(data);
- new->data = data;
return cligg_btree_add_element(map->map, new);
}
@@ -74,9 +73,9 @@
cligg_hashmap_del_element(cligg_hashmap *map,
void *data)
{
- cligg_hashmap_element *del = malloc(sizeof(cligg_hashmap_element));
- del->hash = map->hash_func(data);
- del->data = data;
+ cligg_hashmap_element *del = cligg_hashmap_element_new(data, map->free_func, map->hash_func);
+ if(!del)
+ return FALSE;
return cligg_btree_del_element(map->map, del);
}
@@ -87,13 +86,39 @@
{
cligg_btree_element *find;
- cligg_hashmap_element *element = malloc(sizeof(cligg_hashmap_element));
- element->hash = map->hash_func(data);
- element->data = data;
+ cligg_hashmap_element *element = cligg_hashmap_element_new(data, map->free_func, map->hash_func);
+ if(!element)
+ return FALSE;
find = (cligg_btree_element *)cligg_btree_find(map->map, element);
if(find) {
+ cligg_hashmap_element_delete(element);
return ((cligg_hashmap_element *)find->data)->data;
}
+ cligg_hashmap_element_delete(element);
return NULL;
}
+
+
+CLIGG cligg_hashmap_element *
+cligg_hashmap_element_new(void *data, free_func_cb free_func, hash_func_cb hash_func)
+{
+ cligg_hashmap_element *new = (cligg_hashmap_element *)malloc(sizeof(cligg_hashmap_element));
+ if(new == NULL)
+ return NULL;
+ new->data = data;
+ new->hash = hash_func(data);
+ new->free_func = free_func;
+
+ return new;
+}
+
+CLIGG void cligg_hashmap_element_delete(void *ele)
+{
+ cligg_hashmap_element *dele = ele;
+
+ if(dele == NULL) return;
+
+ if(dele->free_func) dele->free_func(dele->data);
+ free(dele);
+}
Modified: src/lib/cligg_hashmap.h
===================================================================
--- src/lib/cligg_hashmap.h 2007-05-16 16:27:24 UTC (rev 54)
+++ src/lib/cligg_hashmap.h 2007-05-21 17:55:01 UTC (rev 55)
@@ -14,6 +14,7 @@
struct cligg_hashmap {
cligg_btree *map;
hash_func_cb hash_func;
+ free_func_cb free_func;
};
/**
@@ -22,6 +23,7 @@
struct cligg_hashmap_element {
unsigned long hash;
void *data;
+ free_func_cb free_func;
};
/**
@@ -56,4 +58,7 @@
CLIGG void *cligg_hashmap_get_element(cligg_hashmap *, void *data);
+CLIGG cligg_hashmap_element *cligg_hashmap_element_new(void *data, free_func_cb free_func, hash_func_cb hash_func);
+CLIGG void cligg_hashmap_element_delete(void *ele);
+
#endif
Modified: src/lib/cligg_list.c
===================================================================
--- src/lib/cligg_list.c 2007-05-16 16:27:24 UTC (rev 54)
+++ src/lib/cligg_list.c 2007-05-21 17:55:01 UTC (rev 55)
@@ -15,14 +15,17 @@
return NULL;
}
- memset(new_list, 0, sizeof(cligg_list));
+ /*memset(new_list, 0, sizeof(cligg_list));*/
+ new_list->size = 0;
+ new_list->first = NULL;
+ new_list->last = NULL;
+ new_list->current = NULL;
- if(free_func) {
+ if(free_func)
new_list->free_func = free_func;
- }
-
+ else {
+ new_list->free_func = NULL;
#ifdef DEBUG
- else {
printf("WARNING: No callback for freeing data specified.\n");
printf("Possible Memory leak!\n");
}
@@ -54,14 +57,17 @@
free(old);
}
free(list->last);
- memset(list, 0, sizeof(cligg_list));
+ /*memset(list, 0, sizeof(cligg_list));*/
+ list->last = NULL;
+ list->first = NULL;
list->current = NULL;
+ list->size = 0;
}
/* delete the list */
CLIGG void cligg_list_del(cligg_list *list)
{
- if(!list) {
+ if(list == NULL) {
return;
}
@@ -73,7 +79,7 @@
/* check if list is empty */
CLIGG int cligg_list_isempty(cligg_list *list)
{
- if(!list) {
+ if(list == NULL) {
return TRUE;
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|