diff options
-rw-r--r-- | l4bds/l4bds.h | 1 | ||||
-rw-r--r-- | l4bds/list.c | 27 |
2 files changed, 26 insertions, 2 deletions
diff --git a/l4bds/l4bds.h b/l4bds/l4bds.h index b0602da..faeb7bc 100644 --- a/l4bds/l4bds.h +++ b/l4bds/l4bds.h @@ -36,6 +36,7 @@ void l4ll_remove(L4LL*, L4LLNODE*); (l4ll_remove((list),(l4ll_node_back((list))))) #define l4ll_popfront(list) \ (l4ll_remove((list),(l4ll_node_front((list))))) +L4LLNODE* l4ll_goto(L4LLNODE*, int); /*********** stack ***********/ diff --git a/l4bds/list.c b/l4bds/list.c index 8dc9279..960af59 100644 --- a/l4bds/list.c +++ b/l4bds/list.c @@ -74,7 +74,7 @@ L4LLNODE* l4ll_insert_prev(L4LL* list, L4LLNODE* node, void* data, int size){ free(newnode); return NULL; } - memcpy(newnode, data, size); + memcpy(newdata, data, size); } list->list_len++; if(list->list_first == node){ /* 如果是第一個,那要修改 list_first */ @@ -108,7 +108,7 @@ L4LLNODE* l4ll_insert_next(L4LL* list, L4LLNODE* node, void* data, int size){ free(newnode); return NULL; } - memcpy(newnode, data, size); + memcpy(newdata, data, size); } list->list_len++; if(list->list_last == node){ @@ -149,6 +149,29 @@ void l4ll_remove(L4LL* list, L4LLNODE* node){ } } +L4LLNODE* l4ll_goto(L4LLNODE* node, int count){ + int i; + if(count == 0){ + return node; + }else if(count > 0){ + for(i=1; i<=count; i++){ + node = node->node_next; + if(node == NULL){ + return NULL; + } + } + }else{ + count = -count; + for(i=1; i<=count; i++){ + node = node->node_prev; + if(node == NULL){ + return NULL; + } + } + } + return node; +} + #if 0 int l4ll_pushback(L4LL* list, void* data, int size){ L4LLNODE* cur_save = list->list_current; /* 等一下要把現在位置搬回去 */ |