author | Tero Marttila <terom@fixme.fi> |
Thu, 21 May 2009 16:57:56 +0300 | |
changeset 213 | f0e52e026197 |
parent 171 | b54f393c3df0 |
permissions | -rw-r--r-- |
35
3715247e8f5a
add a kind of semi-generic chain-list implementation
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
1 |
#include "chain.h" |
3715247e8f5a
add a kind of semi-generic chain-list implementation
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
2 |
|
3715247e8f5a
add a kind of semi-generic chain-list implementation
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
3 |
#include <stdlib.h> |
171
b54f393c3df0
evil chain.h macro magic, fix irc_conn_set_nickname bug, misc. test bugs (mem leaks, missing #includes)
Tero Marttila <terom@fixme.fi>
parents:
69
diff
changeset
|
4 |
#include <assert.h> |
35
3715247e8f5a
add a kind of semi-generic chain-list implementation
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
5 |
|
171
b54f393c3df0
evil chain.h macro magic, fix irc_conn_set_nickname bug, misc. test bugs (mem leaks, missing #includes)
Tero Marttila <terom@fixme.fi>
parents:
69
diff
changeset
|
6 |
void *_chain_add (struct _chain_head *head, bool tail, size_t size) |
35
3715247e8f5a
add a kind of semi-generic chain-list implementation
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
7 |
{ |
171
b54f393c3df0
evil chain.h macro magic, fix irc_conn_set_nickname bug, misc. test bugs (mem leaks, missing #includes)
Tero Marttila <terom@fixme.fi>
parents:
69
diff
changeset
|
8 |
struct _chain_item *item; |
b54f393c3df0
evil chain.h macro magic, fix irc_conn_set_nickname bug, misc. test bugs (mem leaks, missing #includes)
Tero Marttila <terom@fixme.fi>
parents:
69
diff
changeset
|
9 |
|
b54f393c3df0
evil chain.h macro magic, fix irc_conn_set_nickname bug, misc. test bugs (mem leaks, missing #includes)
Tero Marttila <terom@fixme.fi>
parents:
69
diff
changeset
|
10 |
// sanity-check |
b54f393c3df0
evil chain.h macro magic, fix irc_conn_set_nickname bug, misc. test bugs (mem leaks, missing #includes)
Tero Marttila <terom@fixme.fi>
parents:
69
diff
changeset
|
11 |
assert(size >= sizeof(item)); |
35
3715247e8f5a
add a kind of semi-generic chain-list implementation
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
12 |
|
3715247e8f5a
add a kind of semi-generic chain-list implementation
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
13 |
// allocate the chain item |
171
b54f393c3df0
evil chain.h macro magic, fix irc_conn_set_nickname bug, misc. test bugs (mem leaks, missing #includes)
Tero Marttila <terom@fixme.fi>
parents:
69
diff
changeset
|
14 |
if ((item = calloc(1, size)) == NULL) |
b54f393c3df0
evil chain.h macro magic, fix irc_conn_set_nickname bug, misc. test bugs (mem leaks, missing #includes)
Tero Marttila <terom@fixme.fi>
parents:
69
diff
changeset
|
15 |
return NULL; |
b54f393c3df0
evil chain.h macro magic, fix irc_conn_set_nickname bug, misc. test bugs (mem leaks, missing #includes)
Tero Marttila <terom@fixme.fi>
parents:
69
diff
changeset
|
16 |
|
b54f393c3df0
evil chain.h macro magic, fix irc_conn_set_nickname bug, misc. test bugs (mem leaks, missing #includes)
Tero Marttila <terom@fixme.fi>
parents:
69
diff
changeset
|
17 |
// insert |
b54f393c3df0
evil chain.h macro magic, fix irc_conn_set_nickname bug, misc. test bugs (mem leaks, missing #includes)
Tero Marttila <terom@fixme.fi>
parents:
69
diff
changeset
|
18 |
if (tail) |
b54f393c3df0
evil chain.h macro magic, fix irc_conn_set_nickname bug, misc. test bugs (mem leaks, missing #includes)
Tero Marttila <terom@fixme.fi>
parents:
69
diff
changeset
|
19 |
TAILQ_INSERT_TAIL(head, item, _chain_list); |
b54f393c3df0
evil chain.h macro magic, fix irc_conn_set_nickname bug, misc. test bugs (mem leaks, missing #includes)
Tero Marttila <terom@fixme.fi>
parents:
69
diff
changeset
|
20 |
else |
b54f393c3df0
evil chain.h macro magic, fix irc_conn_set_nickname bug, misc. test bugs (mem leaks, missing #includes)
Tero Marttila <terom@fixme.fi>
parents:
69
diff
changeset
|
21 |
TAILQ_INSERT_HEAD(head, item, _chain_list); |
35
3715247e8f5a
add a kind of semi-generic chain-list implementation
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
22 |
|
3715247e8f5a
add a kind of semi-generic chain-list implementation
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
23 |
// ok |
171
b54f393c3df0
evil chain.h macro magic, fix irc_conn_set_nickname bug, misc. test bugs (mem leaks, missing #includes)
Tero Marttila <terom@fixme.fi>
parents:
69
diff
changeset
|
24 |
return item; |
35
3715247e8f5a
add a kind of semi-generic chain-list implementation
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
25 |
} |
3715247e8f5a
add a kind of semi-generic chain-list implementation
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
26 |