Skip to content

Commit d15c594

Browse files
committed
Added the ability to unregister a signal.
1 parent 3d68956 commit d15c594

File tree

2 files changed

+21
-0
lines changed

2 files changed

+21
-0
lines changed

geoffrey.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ int gb_init(geoffrey * g, FILE *error, char *host, int port, char *nick, char *r
3131
void gb_finalize(geoffrey *g);
3232
void gb_dealloc(geoffrey *g);
3333
void gb_registerSignal(geoffrey *g, char *message, gb_callback *hander);
34+
void gb_unregisterSignal(geoffrey *g, gb_callback *handler);
3435
void gb_runSignal(geoffrey *g, char *message, void *data);
3536
int gb_connect(geoffrey *g);
3637
void gb_loop(geoffrey *g, int reconnect);

libgeoffrey/main.c

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,26 @@ void gb_registerSignal(geoffrey *g, char *message, gb_callback *handler) {
6464
g->signals = s;
6565
}
6666

67+
void gb_unregisterSignal(geoffrey *g, gb_callback *handler) {
68+
gb_signal *ptr, *prev;
69+
for (ptr = g->signals, prev = NULL; ptr != NULL; prev = ptr, ptr = ptr->next) {
70+
if (handler == ptr->callback) {
71+
if (ptr->next != NULL) {
72+
if (prev == NULL) {
73+
g->signals = ptr->next;
74+
} else {
75+
prev->next = ptr->next;
76+
}
77+
} else {
78+
prev->next = NULL;
79+
}
80+
81+
free(ptr->message);
82+
free(ptr);
83+
}
84+
}
85+
}
86+
6787
void gb_runSignal(geoffrey *g, char *message, void *data) {
6888
gb_signal *ptr;
6989
for (ptr = g->signals; ptr != NULL; ptr = ptr->next) {

0 commit comments

Comments
 (0)