/* XXX: free idents too */ void css_free_style_sheet(CSSStyleSheet **sp) { if (*sp) { CSSStyleSheet *s = *sp; while (s->first_entry) { CSSStyleSheetEntry *e = s->first_entry; s->first_entry = e->next; while (e->sel.next) { CSSSimpleSelector *ss = e->sel.next; e->sel.next = ss->next; free_selector(ss); qe_free(&ss); } free_selector(&e->sel); while (e->props) { CSSProperty *p = e->props; e->props = p->next; qe_free(&p); } qe_free(&e); } qe_free(sp); } }
void qe_kill_timer(QETimer **tip) { if (*tip) { (*tip)->timer->stop(); delete (*tip)->timer; qe_free(tip); } }
static void _qt_timer_callback(QETimer *ti, void *opaque, void (*cb)(void *opaque)) { // delete the Qt timer delete ti->timer; qe_free(&ti); // execute the callback cb(opaque); }
static void free_selector(CSSSimpleSelector *ss) { while (ss->attrs) { CSSStyleSheetAttributeEntry *attr = ss->attrs; ss->attrs = attr->next; qe_free(&attr); } }
int load_ligatures(void) { FILE *f; char filename[MAX_FILENAME_SIZE]; unsigned char sig[4]; int long_count; if (find_resource_file(filename, sizeof(filename), "ligatures") < 0) return -1; f = fopen(filename, "r"); if (!f) return -1; if (fread(sig, 1, 4, f) != 4 || memcmp(sig, "liga", 4) != 0) goto fail; subst1_count = uni_get_be16(f); ligature2_count = uni_get_be16(f); long_count = uni_get_be16(f); subst1 = read_array_be16(f, subst1_count * 2); if (!subst1) goto fail; ligature2 = read_array_be16(f, ligature2_count * 3); if (!ligature2) goto fail; ligature_long = read_array_be16(f, long_count); if (!ligature_long) goto fail; fclose(f); return 0; fail: qe_free(&subst1); qe_free(&ligature2); qe_free(&ligature_long); subst1_count = 0; ligature2_count = 0; fclose(f); return -1; }
static void qt_close_font(QEditScreen *s, QEFont **fontp) { QEFont *font = *fontp; if (font) { QFont *f = (QFont *)font->priv_data; delete f; /* Clear structure to force crash if font is still used after * close_font. */ memset(font, 0, sizeof(*font)); qe_free(fontp); } }
QVarType qe_set_variable(EditState *s, const char *name, const char *value, int num) { char buf[32]; void *ptr; char **pstr; VarDef *vp; vp = qe_find_variable(name); if (!vp) { /* Create user variable (global/buffer/window/mode?) */ vp = qe_mallocz(VarDef); vp->name = qe_strdup(name); vp->domain = VAR_SELF; vp->rw = VAR_RW; if (value) { vp->value.str = qe_strdup(value); vp->type = VAR_STRING; } else { vp->value.num = num; vp->type = VAR_NUMBER; } qe_register_variables(vp, 1); return vp->type; } else if (vp->rw == VAR_RO) { put_status(s, "Variable %s is read-only", name); return VAR_UNKNOWN; } else { switch (vp->domain) { case VAR_SELF: ptr = &vp->value; break; case VAR_GLOBAL: ptr = vp->value.ptr; break; case VAR_STATE: ptr = (u8*)s->qe_state + vp->value.offset; break; case VAR_BUFFER: ptr = (u8*)s->b + vp->value.offset; break; case VAR_WINDOW: ptr = (u8*)s + vp->value.offset; break; case VAR_MODE: ptr = (u8*)s->mode + vp->value.offset; break; default: return VAR_UNKNOWN; } switch (vp->type) { case VAR_STRING: if (!value) { snprintf(buf, sizeof(buf), "%d", num); value = buf; } pstr = (char **)ptr; if ((u8 *)*pstr > end) qe_free(pstr); *pstr = qe_strdup(value); break; case VAR_CHARS: if (!value) { snprintf(buf, sizeof(buf), "%d", num); value = buf; } pstrcpy(ptr, vp->size, value); break; case VAR_NUMBER: if (!value) *(int*)ptr = num; else *(int*)ptr = strtol(value, NULL, 0); break; default: return VAR_UNKNOWN; } return vp->type; } }