Esempio n. 1
0
static adbus_Member* AddMethod(
        adbus_Interface*    i,
        adbusI_MemberType   type,
        const char*         name,
        int                 size)
{
    if (size < 0)
        size = strlen(name);

    adbus_Member* m = NEW(adbus_Member);
    m->interface    = i;
    m->type         = type;
    m->name.str     = adbusI_strndup(name, size);
    m->name.sz      = size;

    int ret;
    dh_Iter ki = dh_put(MemberPtr, &i->members, m->name, &ret);
    if (!ret) {
        FreeMember(dh_val(&i->members, ki));
    }

    dh_key(&i->members, ki) = m->name;
    dh_val(&i->members, ki) = m;

    return m;
}
Esempio n. 2
0
void Typedef(Member *td_names, Type *decl)
{
    Member *m, *t;


    m = ApplyMemberType(td_names, decl);
    while (m)
    {
        t = m->next;
        if (FindType(m->name))
        {
            int i;

            for (i = 0; i < EXTENDED_TYPES; i++)
                if (!strcmp(m->name, extended_types[i]))
                    break;
#ifdef REDEF_ERROR
            if (i == EXTENDED_TYPES)
                LexError("'%s' redefinition ignored", m->name);
#endif
            FreeMember(m);
        }
        else
        {
            AddType(NewTypedefType(m->name, m->type));
            /* Can't use FreeMember since we want to keep the name */
            free(m);
        }
        m = t;
    }
}
Esempio n. 3
0
void FreeMemberList(Member *list)
{
    Member *m;

    while (list)
    {
        m = list->next;
        FreeMember(list);
        list = m;
    }
}
Esempio n. 4
0
/** Derefs an interface.
 *  \relates adbus_Interface
 */
void adbus_iface_deref(adbus_Interface* i)
{
    if (i && adbus_InterlockedDecrement(&i->ref) == 0) {
        if (ADBUS_TRACE_MEMORY) {
            adbusI_log("free interface %s", i->name);
        }

        for (dh_Iter ii = dh_begin(&i->members); ii != dh_end(&i->members); ++ii) {
            if (dh_exist(&i->members, ii))
                FreeMember(dh_val(&i->members, ii));
        }
        dh_free(MemberPtr, &i->members);

        free((char*) i->name.str);
        free(i);
    }
}