[CCID3]: Separate most of the packet history code

This also changes the list_for_each_entry_safe_continue behaviour to match its
kerneldoc comment, that is, to start after the pos passed.

Also adds several helper functions from previously open coded fragments, making
the code more clear.

Signed-off-by: Arnaldo Carvalho de Melo <acme@mandriva.com>
diff --git a/include/linux/list.h b/include/linux/list.h
index 597094e..0f2435f 100644
--- a/include/linux/list.h
+++ b/include/linux/list.h
@@ -427,7 +427,8 @@
  * @member:	the name of the list_struct within the struct.
  */
 #define list_for_each_entry_safe_continue(pos, n, head, member) 		\
-	for (pos = n, n = list_entry(n->member.next, typeof(*n), member);	\
+	for (pos = list_entry(pos->member.next, typeof(*pos), member), 		\
+		n = list_entry(pos->member.next, typeof(*pos), member);		\
 	     &pos->member != (head);						\
 	     pos = n, n = list_entry(n->member.next, typeof(*n), member))