From bf455c8c4d2cbd0a6bb238490989eae4ab7dfc63 Mon Sep 17 00:00:00 2001 From: Etienne Brateau <etienne.brateau@ensiie.fr> Date: Sun, 10 Feb 2019 16:17:02 +0100 Subject: [PATCH] Create a function to clear a page and call it into pagereader --- include/page.h | 2 ++ src/page.c | 66 ++++++++++++++++++++++++++++++++++++++++++++++++ src/pagereader.c | 59 +++---------------------------------------- 3 files changed, 71 insertions(+), 56 deletions(-) diff --git a/include/page.h b/include/page.h index 041225e..18b4869 100644 --- a/include/page.h +++ b/include/page.h @@ -47,4 +47,6 @@ log_page *pageAlloc(); void pageFree(log_page **page); +void pageClear(log_page *page); + #endif diff --git a/src/page.c b/src/page.c index 696c11f..ea53104 100644 --- a/src/page.c +++ b/src/page.c @@ -221,3 +221,69 @@ void pageFree(log_page **page) *page = NULL; } +void pageClear(log_page *page) +{ + log_hwrec *hw; + log_vwrec *vw; + log_srec *s; + log_grec *g; + log_lrec *l; + log_brec *b; + + hw = page->hwbase; + while (hw != NULL) + { + page->hwbase = hw->next; + stamp(&hw->node->simtype->netstamp); + Free(hw); + hw = page->hwbase; + } + + vw = page->vwbase; + while (vw != NULL) + { + page->vwbase = vw->next; + stamp(&vw->node->simtype->netstamp); + Free(vw); + vw = page->vwbase; + } + + s = page->sbase; + while (s != NULL) + { + page->sbase = s->next; + Free(s); + s = page->sbase; + } + + g = page->gbase; + while (g != NULL) + { + page->gbase = g->next; + stamp(&g->kind->simtype->netstamp); + disposegate(&g); + g = page->gbase; + } + + l = page->lbase; + if (l != NULL) + stamp(&gg.labelstamp); + while (l != NULL) + { + page->lbase = l->next; + Free(l); + l = page->lbase; + } + + b = page->bbase; + if (b != NULL) + stamp(&gg.boxstamp); + + while (b != NULL) + { + page->bbase = b->next; + Free(b); + b = page->bbase; + } +} + diff --git a/src/pagereader.c b/src/pagereader.c index eeca5b5..00f7937 100644 --- a/src/pagereader.c +++ b/src/pagereader.c @@ -11,6 +11,7 @@ #include "tool.h" #include "utils.h" #include "box.h" +#include "libraryreader.h" void loadfail(char *msg, struct LOC_loadpage *LINK) { @@ -136,62 +137,8 @@ void loadpage(char *filename_, char *reason_) ver = -ver; gg.actx = gg.curpage - 1; calltools(act_clear); - hw = gg.pages[gg.curpage - 1]->hwbase; - while (hw != NULL) - { - gg.pages[gg.curpage - 1]->hwbase = hw->next; - stamp(&hw->node->simtype->netstamp); - Free(hw); - hw = gg.pages[gg.curpage - 1]->hwbase; - } - - vw = gg.pages[gg.curpage - 1]->vwbase; - while (vw != NULL) - { - gg.pages[gg.curpage - 1]->vwbase = vw->next; - stamp(&vw->node->simtype->netstamp); - Free(vw); - vw = gg.pages[gg.curpage - 1]->vwbase; - } - - s = gg.pages[gg.curpage - 1]->sbase; - while (s != NULL) - { - gg.pages[gg.curpage - 1]->sbase = s->next; - Free(s); - s = gg.pages[gg.curpage - 1]->sbase; - } - - g = gg.pages[gg.curpage - 1]->gbase; - while (g != NULL) - { - gg.pages[gg.curpage - 1]->gbase = g->next; - stamp(&g->kind->simtype->netstamp); - disposegate(&g); - g = gg.pages[gg.curpage - 1]->gbase; - } - - l = gg.pages[gg.curpage - 1]->lbase; - if (l != NULL) - stamp(&gg.labelstamp); - - while (l != NULL) - { - gg.pages[gg.curpage - 1]->lbase = l->next; - Free(l); - l = gg.pages[gg.curpage - 1]->lbase; - } - - b = gg.pages[gg.curpage - 1]->bbase; - if (b != NULL) - stamp(&gg.boxstamp); - - while (b != NULL) - { - gg.pages[gg.curpage - 1]->bbase = b->next; - Free(b); - b = gg.pages[gg.curpage - 1]->bbase; - } + + pageClear(gg.pages[gg.curpage - 1]); garbagecoll(); stamp(&gg.loadstamp); -- GitLab