vlc | branch: master | Rémi Denis-Courmont <[email protected]> | Tue Feb 19 18:30:48 2019 +0200| [050884ea063b44ea0149520f18e9fb071075c979] | committer: Rémi Denis-Courmont
objects: add vlc_object_typename() > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=050884ea063b44ea0149520f18e9fb071075c979 --- include/vlc_objects.h | 11 +++++++++++ modules/gui/ncurses.c | 2 +- modules/gui/qt/dialogs/messages.cpp | 2 +- modules/services_discovery/podcast.c | 2 +- src/libvlccore.sym | 1 + src/misc/messages.c | 2 +- src/misc/objects.c | 14 +++++++++----- 7 files changed, 25 insertions(+), 9 deletions(-) diff --git a/include/vlc_objects.h b/include/vlc_objects.h index d5ad38c7d3..3fcb1839e9 100644 --- a/include/vlc_objects.h +++ b/include/vlc_objects.h @@ -111,6 +111,17 @@ VLC_API vlc_object_t *vlc_object_find_name( vlc_object_t *, const char * ) VLC_U VLC_API void * vlc_object_hold( vlc_object_t * ); VLC_API void vlc_object_release( vlc_object_t * ); VLC_API size_t vlc_list_children(vlc_object_t *, vlc_object_t **, size_t) VLC_USED; + +/** + * Returns the object type name. + * + * This returns a nul-terminated string identifying the object type. + * The string is valid for at least as long as the object reference. + * + * \param obj object whose type name to get + */ +VLC_API const char *vlc_object_typename(const vlc_object_t *obj) VLC_USED; + VLC_API char *vlc_object_get_name( const vlc_object_t * ) VLC_USED; #define vlc_object_create(a,b) vlc_object_create( VLC_OBJECT(a), b ) diff --git a/modules/gui/ncurses.c b/modules/gui/ncurses.c index fa2b11b765..0d6e22b76a 100644 --- a/modules/gui/ncurses.c +++ b/modules/gui/ncurses.c @@ -714,7 +714,7 @@ static int SubDrawObject(intf_sys_t *sys, int l, vlc_object_t *p_obj, int i_leve { char *name = vlc_object_get_name(p_obj); MainBoxWrite(sys, l++, "%*s%s%s \"%s\" (%p)", 2 * i_level++, "", prefix, - p_obj->obj.object_type, name ? name : "", (void *)p_obj); + vlc_object_typename(p_obj), name ? name : "", (void *)p_obj); free(name); size_t count = 0, size; diff --git a/modules/gui/qt/dialogs/messages.cpp b/modules/gui/qt/dialogs/messages.cpp index 58e6fdaa07..7a770875bb 100644 --- a/modules/gui/qt/dialogs/messages.cpp +++ b/modules/gui/qt/dialogs/messages.cpp @@ -304,7 +304,7 @@ void MessagesDialog::buildTree( QTreeWidgetItem *parentItem, char *name = vlc_object_get_name( p_obj ); item->setText( 0, QString("%1%2 (0x%3)") - .arg( qfu( p_obj->obj.object_type ) ) + .arg( qfu( vlc_object_typename(p_obj) ) ) .arg( ( name != NULL ) ? QString( " \"%1\"" ).arg( qfu( name ) ) : "" ) diff --git a/modules/services_discovery/podcast.c b/modules/services_discovery/podcast.c index 66784b94a5..b9a31a1e18 100644 --- a/modules/services_discovery/podcast.c +++ b/modules/services_discovery/podcast.c @@ -120,7 +120,7 @@ static void SaveUrls( services_discovery_t *p_sd ); *****************************************************************************/ static int Open( vlc_object_t *p_this ) { - if( strcmp( p_this->obj.parent->obj.object_type, "playlist" ) ) + if( strcmp( vlc_object_typename(p_this->obj.parent), "playlist" ) ) return VLC_EGENERIC; /* FIXME: support LibVLC SD too! */ services_discovery_t *p_sd = ( services_discovery_t* )p_this; diff --git a/src/libvlccore.sym b/src/libvlccore.sym index 85cf3802a7..38df09ee69 100644 --- a/src/libvlccore.sym +++ b/src/libvlccore.sym @@ -670,6 +670,7 @@ vlc_object_create vlc_object_find_name vlc_object_hold vlc_object_release +vlc_object_typename vlc_object_get_name vlc_once vlc_rand_bytes diff --git a/src/misc/messages.c b/src/misc/messages.c index 8effb55c4a..1c02c232a2 100644 --- a/src/misc/messages.c +++ b/src/misc/messages.c @@ -110,7 +110,7 @@ void vlc_vaLog (vlc_object_t *obj, int type, const char *module, vlc_log_t msg; msg.i_object_id = (uintptr_t)obj; - msg.psz_object_type = (obj != NULL) ? obj->obj.object_type : "generic"; + msg.psz_object_type = (obj != NULL) ? vlc_object_typename(obj) : "generic"; msg.psz_module = module; msg.psz_header = NULL; msg.file = file; diff --git a/src/misc/objects.c b/src/misc/objects.c index d6c7c4e997..9c66745973 100644 --- a/src/misc/objects.c +++ b/src/misc/objects.c @@ -85,7 +85,7 @@ static void PrintObject(vlc_object_t *obj) PrintObjectPrefix(obj, true); printf("\xE2\x94\x80\xE2\x94%c\xE2\x95\xB4%p %s, %u refs\n", vlc_list_is_empty(&priv->children) ? 0x80 : 0xAC, - (void *)obj, obj->obj.object_type, atomic_load(&priv->refs)); + (void *)obj, vlc_object_typename(obj), atomic_load(&priv->refs)); vlc_restorecancel (canc); } @@ -173,8 +173,8 @@ static int VarsCommand (vlc_object_t *obj, char const *cmd, else vlc_object_hold (obj); - printf(" o %p %s, parent %p\n", (void *)obj, - obj->obj.object_type, (void *)obj->obj.parent); + printf(" o %p %s, parent %p\n", (void *)obj, vlc_object_typename(obj), + (void *)obj->obj.parent); DumpVariables (obj); vlc_object_release (obj); @@ -278,6 +278,11 @@ void vlc_object_set_destructor( vlc_object_t *p_this, p_priv->pf_destructor = pf_destructor; } +const char *vlc_object_typename(const vlc_object_t *obj) +{ + return obj->obj.object_type; +} + static vlc_mutex_t name_lock = VLC_STATIC_MUTEX; #undef vlc_object_set_name @@ -375,8 +380,7 @@ static int strcmp_void(const void *a, const void *b) * Finds a named object and increment its reference count. * Beware that objects found in this manner can be "owned" by another thread, * be of _any_ type, and be attached to any module (if any). With such an - * object reference, you can set or get object variables, emit log messages, - * and read write-once object parameters (obj.object_type, etc). + * object reference, you can set or get object variables, emit log messages. * You CANNOT cast the object to a more specific object type, and you * definitely cannot invoke object type-specific callbacks with this. * _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
