char *belle_sip_object_describe_type_from_name(const char *name){ char *vptr_name; void *handle; void *symbol; handle=dlopen(NULL,RTLD_LAZY); if (handle==NULL){ belle_sip_error("belle_sip_object_describe_type_from_name: dlopen() failed: %s",dlerror()); return NULL; } vptr_name=belle_sip_strdup_printf("%s_vptr",name); symbol=dlsym(handle,vptr_name); belle_sip_free(vptr_name); dlclose(handle); if (symbol==NULL){ belle_sip_error("belle_sip_object_describe_type_from_name: could not find vptr for type %s",name); return NULL; } return _belle_sip_object_describe_type((belle_sip_object_vptr_t*)symbol); }
char *belle_sip_object_describe(void *obj){ belle_sip_object_t *o=BELLE_SIP_OBJECT(obj); return _belle_sip_object_describe_type(o->vptr); }