Iterating a chain is a common function. The example shows how to iterate the buffer pool chain created in the last section to find buffers starting with a specific string. If the buffer is located it is extracted from the chain and placed on another chain:
void foobar (const char* match,
rtems_chain_control* chain,
rtems_chain_control* out)
{
rtems_chain_node* node;
foo* bar;
rtems_chain_initialize_empty (out);
node = chain->first;
while (!rtems_chain_is_tail (chain, node))
{
bar = (foo*) node;
rtems_chain_node* next_node = node->next;
if (strcmp (match, bar->data) == 0)
{
rtems_chain_extract (node);
rtems_chain_append (out, node);
}
node = next_node;
}
}
Copyright © 1988-2008 OAR Corporation