+void LoadSnapshotBuffers(ListNode *snapshot_buffers)
+{
+ while (snapshot_buffers != NULL)
+ {
+ LoadSnapshotBuffer((struct SnapshotNodeInfo *)snapshot_buffers->content);
+
+ snapshot_buffers = snapshot_buffers->next;
+ }
+}
+
+void FreeSnapshotBuffers(ListNode *snapshot_buffers)
+{
+ while (snapshot_buffers != NULL)
+ deleteNodeFromList(&snapshot_buffers, snapshot_buffers->key, checked_free);
+}
+
+// -----------------------------------------------------------------------------
+// functions for handling one of several snapshots
+// -----------------------------------------------------------------------------
+
+static void FreeSnapshotExt(void *snapshot_buffers_ptr)
+{
+ FreeSnapshotBuffers(snapshot_buffers_ptr);
+}
+
+void FreeSnapshotSingle()
+{
+ FreeSnapshotBuffers(snapshot_single);
+
+ snapshot_single = NULL;
+}
+
+void FreeSnapshotList_UpToNode(ListNode *node)
+{
+ while (snapshot_list != node)
+ {
+ deleteNodeFromList(&snapshot_list, snapshot_list->key, FreeSnapshotExt);
+
+ num_snapshots_in_list--;
+ }
+}
+
+void FreeSnapshotList()
+{
+ FreeSnapshotList_UpToNode(NULL);
+
+ snapshot_current = NULL;
+}
+
+void SaveSnapshotSingle(ListNode *snapshot_buffers)
+{
+ if (snapshot_single)
+ FreeSnapshotSingle();
+
+ snapshot_single = snapshot_buffers;
+}
+
+void SaveSnapshotToList(ListNode *snapshot_buffers)