diff options
author | lantw44 <lantw44@gmail.com> | 2012-09-07 01:18:06 +0800 |
---|---|---|
committer | lantw44 <lantw44@gmail.com> | 2012-09-07 01:18:06 +0800 |
commit | 6c6b6ffccb4412a3ada9ec89431af527b3f1c92a (patch) | |
tree | 063c66520d03058e8f03fd1df09acd32495510e4 | |
parent | 846206514d1d654063cb8f4422682554ec58ab83 (diff) | |
download | l4basic-6c6b6ffccb4412a3ada9ec89431af527b3f1c92a.tar.gz l4basic-6c6b6ffccb4412a3ada9ec89431af527b3f1c92a.tar.zst l4basic-6c6b6ffccb4412a3ada9ec89431af527b3f1c92a.zip |
l4bds: 修正 l4ll_insert_prev 和 l4ll_insert_next 中的錯誤
l4bds: 加入尚未測試的 l4ll_goto 函式
-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; /* 等一下要把現在位置搬回去 */ |