src/chain.c
author Tero Marttila <terom@fixme.fi>
Thu, 21 May 2009 16:57:56 +0300
changeset 213 f0e52e026197
parent 171 b54f393c3df0
permissions -rw-r--r--
implement lua_console_on_interrupt to abort any executing thread
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