コード例 #1
0
ファイル: cssparse.c プロジェクト: Ivan1234/qemacs
/* 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);
    }
}
コード例 #2
0
ファイル: qt.cpp プロジェクト: Ivan1234/qemacs
void qe_kill_timer(QETimer **tip)
{
    if (*tip) {
        (*tip)->timer->stop();
        delete (*tip)->timer;
        qe_free(tip);
    }
}
コード例 #3
0
ファイル: qt.cpp プロジェクト: Ivan1234/qemacs
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);
}
コード例 #4
0
ファイル: cssparse.c プロジェクト: Ivan1234/qemacs
static void free_selector(CSSSimpleSelector *ss)
{
    while (ss->attrs) {
        CSSStyleSheetAttributeEntry *attr = ss->attrs;
        ss->attrs = attr->next;
        qe_free(&attr);
    }
}
コード例 #5
0
ファイル: unicode_join.c プロジェクト: dgdunix/qemacs-tmp
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;
}
コード例 #6
0
ファイル: qt.cpp プロジェクト: Ivan1234/qemacs
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);
    }
}
コード例 #7
0
ファイル: variables.c プロジェクト: Ivan1234/qemacs
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;
    }
}