diff options
author | Yang Tse <yangsita@gmail.com> | 2007-10-02 02:18:01 +0000 |
---|---|---|
committer | Yang Tse <yangsita@gmail.com> | 2007-10-02 02:18:01 +0000 |
commit | 343d6f221fea91aa47cd1e8a3ed9d7c462fc6f7f (patch) | |
tree | d54d1d5e112590d96e42aae433c94c98cd80c697 /ares_private.h | |
parent | e4eb2d0e1d36937ff1dab2c9e2a00295c3bb5539 (diff) | |
download | c-ares-343d6f221fea91aa47cd1e8a3ed9d7c462fc6f7f.tar.gz c-ares-343d6f221fea91aa47cd1e8a3ed9d7c462fc6f7f.tar.bz2 c-ares-343d6f221fea91aa47cd1e8a3ed9d7c462fc6f7f.zip |
Avoid inline C99ism, and move c-ares routines for managing doubly-linked lists.
Diffstat (limited to 'ares_private.h')
-rw-r--r-- | ares_private.h | 75 |
1 files changed, 1 insertions, 74 deletions
diff --git a/ares_private.h b/ares_private.h index 34e4692..26f55db 100644 --- a/ares_private.h +++ b/ares_private.h @@ -83,16 +83,10 @@ #define ARES_ID_KEY_LEN 31 #include "ares_ipv6.h" +#include "ares_llist.h" struct query; -/* Node definition for circular, doubly-linked list */ -struct list_node { - struct list_node *prev; - struct list_node *next; - void* data; -}; - struct send_request { /* Remaining data to send */ const unsigned char *data; @@ -265,73 +259,6 @@ int ares__read_line(FILE *fp, char **buf, int *bufsize); void ares__free_query(struct query *query); short ares__generate_new_id(rc4_key* key); - -/* Routines for managing doubly-linked circular linked lists with a - * dummy head. - */ - -/* Initialize a new head node */ -static inline void ares__init_list_head(struct list_node* head) { - head->prev = head; - head->next = head; - head->data = NULL; -} - -/* Initialize a list node */ -static inline void ares__init_list_node(struct list_node* node, void* d) { - node->prev = NULL; - node->next = NULL; - node->data = d; -} - -/* Returns true iff the given list is empty */ -static inline int ares__is_list_empty(struct list_node* head) { - return ((head->next == head) && (head->prev == head)); -} - -/* Inserts new_node before old_node */ -static inline void ares__insert_in_list(struct list_node* new_node, - struct list_node* old_node) { - new_node->next = old_node; - new_node->prev = old_node->prev; - old_node->prev->next = new_node; - old_node->prev = new_node; -} - -/* Removes the node from the list it's in, if any */ -static inline void ares__remove_from_list(struct list_node* node) { - if (node->next != NULL) { - node->prev->next = node->next; - node->next->prev = node->prev; - node->prev = NULL; - node->next = NULL; - } -} - -/* Swap the contents of two lists */ -static inline void ares__swap_lists(struct list_node* head_a, - struct list_node* head_b) { - int is_a_empty = ares__is_list_empty(head_a); - int is_b_empty = ares__is_list_empty(head_b); - struct list_node old_a = *head_a; - struct list_node old_b = *head_b; - - if (is_a_empty) { - ares__init_list_head(head_b); - } else { - *head_b = old_a; - old_a.next->prev = head_b; - old_a.prev->next = head_b; - } - if (is_b_empty) { - ares__init_list_head(head_a); - } else { - *head_a = old_b; - old_b.next->prev = head_a; - old_b.prev->next = head_a; - } -} - #define ARES_SWAP_BYTE(a,b) \ { unsigned char swapByte = *(a); *(a) = *(b); *(b) = swapByte; } |