@@ -273,3 +273,35 @@ int ptr_cur_beg(struct ptr_cur *cur, struct ptr_list *head)
cur->n = -1;
return 1;
}
+
+int ptr_cur_prev(struct ptr_cur *cur)
+{
+ do {
+ struct ptr_list *curl = cur->l;
+
+ if (--cur->n >= 0)
+ return 1;
+
+ if (curl == cur->h)
+ break;
+ curl = curl->prev;
+ cur->l = curl;
+ cur->n = curl->nr;
+ } while (1);
+
+ return 0;
+}
+
+int ptr_cur_end(struct ptr_cur *cur, struct ptr_list *head)
+{
+ struct ptr_list *prev;
+
+ if (!head)
+ return 0;
+
+ prev = head->prev;
+ cur->h = head;
+ cur->l = prev;
+ cur->n = prev->nr;
+ return 1;
+}
@@ -53,6 +53,8 @@ extern int linearize_ptr_list(struct ptr_list *, void **, int);
int ptr_cur_beg(struct ptr_cur *cur, struct ptr_list *head);
int ptr_cur_next(struct ptr_cur *cur);
+int ptr_cur_end(struct ptr_cur *cur, struct ptr_list *head);
+int ptr_cur_prev(struct ptr_cur *cur);
/*
* Hey, who said that you can't do overloading in C?