aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorlantw44 <lantw44@gmail.com>2012-09-07 01:18:06 +0800
committerlantw44 <lantw44@gmail.com>2012-09-07 01:18:06 +0800
commit6c6b6ffccb4412a3ada9ec89431af527b3f1c92a (patch)
tree063c66520d03058e8f03fd1df09acd32495510e4
parent846206514d1d654063cb8f4422682554ec58ab83 (diff)
downloadl4basic-6c6b6ffccb4412a3ada9ec89431af527b3f1c92a.tar
l4basic-6c6b6ffccb4412a3ada9ec89431af527b3f1c92a.tar.gz
l4basic-6c6b6ffccb4412a3ada9ec89431af527b3f1c92a.tar.bz2
l4basic-6c6b6ffccb4412a3ada9ec89431af527b3f1c92a.tar.lz
l4basic-6c6b6ffccb4412a3ada9ec89431af527b3f1c92a.tar.xz
l4basic-6c6b6ffccb4412a3ada9ec89431af527b3f1c92a.tar.zst
l4basic-6c6b6ffccb4412a3ada9ec89431af527b3f1c92a.zip
l4bds: 修正 l4ll_insert_prev 和 l4ll_insert_next 中的錯誤
l4bds: 加入尚未測試的 l4ll_goto 函式
-rw-r--r--l4bds/l4bds.h1
-rw-r--r--l4bds/list.c27
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; /* 等一下要把現在位置搬回去 */