void pageclose(Page *p) { Page *c, *nc; if(p == selpage) selpage = nil; pageabort(p); closeimages(p); urlfree(p->url); p->url = nil; if(p->doc){ freedocinfo(p->doc); p->doc = nil; } layfree(p->lay); p->lay = nil; freeitems(p->items); p->items = nil; for(c=p->child; c!=nil; c=nc){ nc = c->next; pageclose(c); free(c); } p->child = nil; closerunestr(&p->title); closerunestr(&p->refresh.rs); p->refresh.t = 0; p->pos = ZP; p->top = ZP; p->bot = ZP; p->loading = p->aborting = FALSE; }
void urlfree(Url *u) { if(u && decref(u)==0){ closerunestr(&u->src); closerunestr(&u->act); closerunestr(&u->post); closerunestr(&u->ctype); free(u); } }
void urlfree(Url *u) { if(u==nil || decref(u) > 0) return; closerunestr(&u->src); closerunestr(&u->act); closerunestr(&u->post); closerunestr(&u->ctype); free(u); }
static void loadchilds(Page *p, Kidinfo *k) { Runestr rs; Kidinfo *t; Page *c; addrefresh(p, "loading frames..."); p->kidinfo = k; for(t=k->kidinfos; t!=nil; t=t->next){ c = emalloc(sizeof(Page)); addchild(p, c); if(t->isframeset){ c->url = urldup(p->url); loadchilds(c, t); }else{ c->kidinfo = t; /* this check shouldn't be necessary, but... */ if(t->src){ rs.r = urlcombine(p->url->act.r, t->src); rs.nr = runestrlen(rs.r); pageload1(c, urlalloc(&rs, nil, HGet), FALSE); closerunestr(&rs); } } } }
void copyrunestr(Runestr *a, Runestr *b) { closerunestr(a); a->r = runemalloc(b->nr+1); runemove(a->r, b->r, b->nr); a->r[b->nr] = 0; a->nr = b->nr; }
void pagesnarf(Page *p) { Runestr rs; memset(&rs, 0, sizeof(Runestr)); laysnarf(p, p->lay, &rs); putsnarf(&rs); closerunestr(&rs); }
void readpage(Column *c, char *s) { Window *w; Runestr rs; w = coladd(c, nil, nil, -1); bytetorunestr(s, &rs); pageget(&w->page, &rs, nil, HGet, TRUE); closerunestr(&rs); }
void textclose(Text *t) { closerunestr(&t->rs); frclear(t, 1); }