[vlc-devel] [PATCH 03/22] actions: refactor init/deinit functions

Hugo Beauzée-Luyssen hugo at beauzee.fr
Thu Aug 3 15:10:36 CEST 2017


From: Thomas Guillem <thomas at gllm.fr>

---
 include/vlc_actions.h |  8 ++++++++
 src/libvlc.c          |  6 +++---
 src/libvlc.h          |  2 --
 src/misc/actions.c    | 16 ++++++++++++----
 4 files changed, 23 insertions(+), 9 deletions(-)

diff --git a/include/vlc_actions.h b/include/vlc_actions.h
index c3f4172617..6a0f2e1853 100644
--- a/include/vlc_actions.h
+++ b/include/vlc_actions.h
@@ -24,6 +24,14 @@
 #ifndef VLC_ACTIONS_H
 #define VLC_ACTIONS_H 1
 
+/* Called from src/libvlc.c */
+int
+libvlc_InternalActionsInit(libvlc_int_t *p_libvlc);
+
+/* Called from src/libvlc.c */
+void
+libvlc_InternalActionsClean(libvlc_int_t *p_libvlc);
+
 /**
  * \file
  * This file defines keys and functions
diff --git a/src/libvlc.c b/src/libvlc.c
index c7e7b9013d..7e343a6365 100644
--- a/src/libvlc.c
+++ b/src/libvlc.c
@@ -54,6 +54,7 @@
 #include <vlc_playlist.h>
 #include <vlc_interface.h>
 
+#include <vlc_actions.h>
 #include <vlc_charset.h>
 #include <vlc_dialog.h>
 #include <vlc_keystore.h>
@@ -233,8 +234,7 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc,
     /*
      * Initialize hotkey handling
      */
-    priv->actions = vlc_InitActions( p_libvlc );
-    if( !priv->actions )
+    if( libvlc_InternalActionsInit( p_libvlc ) != VLC_SUCCESS )
         goto error;
 
     /*
@@ -416,7 +416,7 @@ void libvlc_InternalCleanup( libvlc_int_t *p_libvlc )
     if (priv->parser != NULL)
         playlist_preparser_Delete(priv->parser);
 
-    vlc_DeinitActions( p_libvlc, priv->actions );
+    libvlc_InternalActionsClean( p_libvlc );
 
     /* Save the configuration */
     if( !var_InheritBool( p_libvlc, "ignore-config" ) )
diff --git a/src/libvlc.h b/src/libvlc.h
index 299795c549..59d6f2dfb3 100644
--- a/src/libvlc.h
+++ b/src/libvlc.h
@@ -31,8 +31,6 @@ typedef struct variable_t variable_t;
 
 /* Actions (hot keys) */
 struct vlc_actions;
-struct vlc_actions *vlc_InitActions (libvlc_int_t *);
-extern void vlc_DeinitActions (libvlc_int_t *, struct vlc_actions *);
 
 /*
  * OS-specific initialization
diff --git a/src/misc/actions.c b/src/misc/actions.c
index 968a085a0b..e92b431358 100644
--- a/src/misc/actions.c
+++ b/src/misc/actions.c
@@ -33,6 +33,7 @@
 # include <config.h>
 #endif
 
+#include <assert.h>
 #include <stdlib.h>
 #include <limits.h>
 #ifdef HAVE_SEARCH_H
@@ -504,14 +505,16 @@ static void vlc_InitAction (vlc_object_t *obj, void **map,
 /**
  * Initializes the key map from configuration.
  */
-struct vlc_actions *vlc_InitActions (libvlc_int_t *libvlc)
+int libvlc_InternalActionsInit (libvlc_int_t *libvlc)
 {
+    assert(libvlc != NULL);
+
     vlc_object_t *obj = VLC_OBJECT(libvlc);
     struct hotkey *keys;
     struct vlc_actions *as = malloc (sizeof (*as) + ACTIONS_COUNT * sizeof (*keys));
 
     if (unlikely(as == NULL))
-        return NULL;
+        return VLC_ENOMEM;
     as->map = NULL;
     as->global_map = NULL;
     keys = as->keys;
@@ -549,18 +552,22 @@ struct vlc_actions *vlc_InitActions (libvlc_int_t *libvlc)
     vlc_AddWheelMapping (&as->map, KEY_MOUSEWHEELUP, KEY_MOUSEWHEELDOWN,
                          var_InheritInteger (obj, "hotkeys-y-wheel-mode"));
 
+    libvlc_priv(libvlc)->actions = as;
     libvlc->p_hotkeys = as->keys;
     var_AddCallback (obj, "key-pressed", vlc_key_to_action, &as->map);
     var_AddCallback (obj, "global-key-pressed", vlc_key_to_action,
                      &as->global_map);
-    return as;
+    return VLC_SUCCESS;
 }
 
 /**
  * Destroys the key map.
  */
-void vlc_DeinitActions (libvlc_int_t *libvlc, struct vlc_actions *as)
+void libvlc_InternalActionsClean (libvlc_int_t *libvlc)
 {
+    assert(libvlc != NULL);
+
+    struct vlc_actions *as = libvlc_priv(libvlc)->actions;
     if (unlikely(as == NULL))
         return;
 
@@ -571,6 +578,7 @@ void vlc_DeinitActions (libvlc_int_t *libvlc, struct vlc_actions *as)
     tdestroy (as->global_map, free);
     tdestroy (as->map, free);
     free (as);
+    libvlc_priv(libvlc)->actions = NULL;
     libvlc->p_hotkeys = NULL;
 }
 
-- 
2.11.0



More information about the vlc-devel mailing list