Changeset 2246de6 in mainline
- Timestamp:
- 2009-05-21T06:57:08Z (16 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- cb41a5e
- Parents:
- 55982d6
- Location:
- uspace/lib/libc
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/libc/generic/libadt/list.c
r55982d6 r2246de6 49 49 int list_member(const link_t *link, const link_t *head) 50 50 { 51 int found = false;51 int found = 0; 52 52 link_t *hlp = head->next; 53 53 54 54 while (hlp != head) { 55 55 if (hlp == link) { 56 found = true;56 found = 1; 57 57 break; 58 58 } … … 78 78 if (list_empty(head2)) 79 79 return; 80 80 81 81 head2->next->prev = head1->prev; 82 head2->prev->next = head1; 82 head2->prev->next = head1; 83 83 head1->prev->next = head2->next; 84 84 head1->prev = head2->prev; … … 86 86 } 87 87 88 89 /** Count list items 90 * 91 * Return the number of items in the list. 92 * 93 * @param link List to count. 94 * 95 * @return Number of items in the list. 96 * 97 */ 98 unsigned int list_count(const link_t *link) 99 { 100 unsigned int count = 0; 101 link_t *hlp = link->next; 102 103 while (hlp != link) { 104 count++; 105 hlp = hlp->next; 106 } 107 108 return count; 109 } 110 88 111 /** @} 89 112 */ -
uspace/lib/libc/include/libadt/list.h
r55982d6 r2246de6 38 38 #include <unistd.h> 39 39 40 #ifndef true41 # define true 142 #endif43 #ifndef false44 # define false 045 #endif46 47 typedef struct link link_t;48 49 40 /** Doubly linked list head and link type. */ 50 struct link {51 link_t *prev;/**< Pointer to the previous item in the list. */52 link_t *next;/**< Pointer to the next item in the list. */53 } ;41 typedef struct link { 42 struct link *prev; /**< Pointer to the previous item in the list. */ 43 struct link *next; /**< Pointer to the next item in the list. */ 44 } link_t; 54 45 55 46 /** Declare and initialize statically allocated list. … … 57 48 * @param name Name of the new statically allocated list. 58 49 */ 59 #define LIST_INITIALIZE(name) link_t name = { .prev = &name, .next = &name } 50 #define LIST_INITIALIZE(name) link_t name = { \ 51 .prev = &name, \ 52 .next = &name \ 53 } 60 54 61 55 /** Initialize doubly-linked circular list link … … 146 140 static inline int list_empty(link_t *head) 147 141 { 148 return head->next == head ? true : false;142 return ((head->next == head) ? 1 : 0); 149 143 } 150 144 … … 162 156 static inline void headless_list_split_or_concat(link_t *part1, link_t *part2) 163 157 { 164 link_t *hlp;165 166 158 part1->prev->next = part2; 167 part2->prev->next = part1; 168 hlp = part1->prev; 159 part2->prev->next = part1; 160 161 link_t *hlp = part1->prev; 162 169 163 part1->prev = part2->prev; 170 164 part2->prev = hlp; … … 196 190 } 197 191 198 #define list_get_instance(link, type,member) (type *)(((char *)(link))-((char *)&(((type *)NULL)->member)))192 #define list_get_instance(link, type, member) ((type *) (((void *)(link)) - ((void *) &(((type *) NULL)->member)))) 199 193 200 194 extern int list_member(const link_t *link, const link_t *head); 201 195 extern void list_concat(link_t *head1, link_t *head2); 196 extern unsigned int list_count(const link_t *link); 202 197 203 198 #endif
Note:
See TracChangeset
for help on using the changeset viewer.