⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ospf6_linklist.c

📁 router source code for the ipv6 ospdf ,it can use for wireless.
💻 C
字号:
#include <zebra.h>#include "ospf6_linklist.h"static struct linklist_node *linklist_lookup_node (void *data, struct linklist *linklist){  struct linklist_node *node;  for (node = linklist->head; node; node = node->next)    {      if (linklist->cmp && (*linklist->cmp) (node->data, data) == 0)        return node;      if (node->data == data)        return node;    }  return NULL;}void *linklist_lookup (void *data, struct linklist *linklist){  struct linklist_node *node;  node = linklist_lookup_node (data, linklist);  if (node)    return node->data;  return NULL;}intlinklist_add (void *data, struct linklist *linklist){  struct linklist_node *node = NULL, *add;  if (linklist_lookup_node (data, linklist))    return -1;  add = malloc (sizeof (struct linklist_node));  if (add == NULL)    return -1;  memset (add, 0, sizeof (struct linklist_node));  add->data = data;  if (linklist->cmp)    {      for (node = linklist->head; node; node = node->next)        {          if ((*linklist->cmp) (node->data, add->data) > 0)            break;        }    }  if (! node)    {      /* add to tail */      if (linklist->tail)        {          linklist->tail->next = add;          add->prev = linklist->tail;        }      else        {          linklist->head = add;          add->prev = NULL;        }      linklist->tail = add;      add->next = NULL;    }  else    {      /* insert just before 'node' */      if (node->prev)        {          node->prev->next = add;          add->prev = node->prev;        }      else        {          linklist->head = add;          add->prev = NULL;        }      add->next = node;      node->prev = add;    }  linklist->count++;  return 0;}intlinklist_remove (void *data, struct linklist *linklist){  struct linklist_node *rem;  rem = linklist_lookup_node (data, linklist);  if (rem == NULL)    return -1;  if (rem->prev)    rem->prev->next = rem->next;  else    linklist->head = rem->next;  if (rem->next)    rem->next->prev = rem->prev;  else    linklist->tail = rem->prev;  free (rem);  linklist->count--;  return 0;}voidlinklist_head (struct linklist *linklist, struct linklist_node *node){  if (linklist->head == NULL)    {      node->prev = NULL;      node->next = NULL;      node->data = NULL;      return;    }  node->prev = linklist->head->prev;  node->next = linklist->head->next;  node->data = linklist->head->data;}intlinklist_end (struct linklist_node *node){  if (node->data == NULL && node->next == NULL)    return 1;  return 0;}voidlinklist_next (struct linklist_node *node){  if (node->next == NULL)    {      node->prev = NULL;      node->next = NULL;      node->data = NULL;      return;    }  node->data = node->next->data;  node->prev = node->next->prev;  node->next = node->next->next;}struct linklist *linklist_create (){  struct linklist *linklist;  linklist = malloc (sizeof (struct linklist));  if (linklist == NULL)    return NULL;  memset (linklist, 0, sizeof (struct linklist));  return linklist;}voidlinklist_remove_all (struct linklist *linklist){  struct linklist_node node;  for (linklist_head (linklist, &node); ! linklist_end (&node);       linklist_next (&node))    linklist_remove (node.data, linklist);}voidlinklist_delete (struct linklist *linklist){  linklist_remove_all (linklist);  assert (linklist->count == 0);  assert (linklist->head == NULL);  assert (linklist->tail == NULL);  free (linklist);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -