[vlc-devel] commit: Save the fact that an item has a callback, not the callback itself ( Rémi Denis-Courmont )

git version control git at videolan.org
Wed Jan 20 19:46:16 CET 2010


vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Wed Jan 20 20:44:05 2010 +0200| [4e9e9f5cac1a576cc3c27695d00a11535a8219d6] | committer: Rémi Denis-Courmont 

Save the fact that an item has a callback, not the callback itself

Saving pointers in the cache makes no sense. In this case, we only want
to know that the plugin must be preloaded so that the configuration item
callback works from the preference dialog.

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=4e9e9f5cac1a576cc3c27695d00a11535a8219d6
---

 src/modules/cache.c |   21 ++++++++++++++++++---
 1 files changed, 18 insertions(+), 3 deletions(-)

diff --git a/src/modules/cache.c b/src/modules/cache.c
index 089f4aa..cbff44a 100644
--- a/src/modules/cache.c
+++ b/src/modules/cache.c
@@ -41,6 +41,7 @@
 #ifdef HAVE_UNISTD_H
 #   include <unistd.h>
 #endif
+#include <assert.h>
 
 #if !defined(HAVE_DYNAMIC_PLUGINS)
     /* no support for plugins */
@@ -83,7 +84,7 @@ static int    CacheSaveConfig  ( module_t *, FILE * );
 
 /* Sub-version number
  * (only used to avoid breakage in dev version when cache structure changes) */
-#define CACHE_SUBVERSION_NUM 7
+#define CACHE_SUBVERSION_NUM 8
 
 /* Format string for the cache filename */
 #define CACHENAME_FORMAT \
@@ -327,6 +328,16 @@ void CacheLoad( vlc_object_t *p_this, module_bank_t *p_bank, bool b_delete )
 }
 
 
+/* This function should never be called.
+ * It is only used as a non-NULL vlc_callback_t value for comparison. */
+static int dummy_callback (vlc_object_t *obj, const char *name,
+                           vlc_value_t oldval, vlc_value_t newval, void *data)
+{
+    (void) obj; (void)name; (void)oldval; (void)newval; (void)data;
+    assert (0);
+}
+
+
 static int CacheLoadConfig( module_t *p_module, FILE *file )
 {
     uint32_t i_lines;
@@ -435,7 +446,10 @@ static int CacheLoadConfig( module_t *p_module, FILE *file )
             }
         }
 
-        LOAD_IMMEDIATE( p_module->p_config[i].pf_callback );
+        bool has_callback;
+        LOAD_IMMEDIATE( has_callback );
+        if (has_callback)
+            p_module->p_config[i].pf_callback = dummy_callback;
     }
 
     return VLC_SUCCESS;
@@ -670,7 +684,8 @@ static int CacheSaveConfig( module_t *p_module, FILE *file )
         for (int j = 0; j < p_module->p_config[i].i_action; j++)
             SAVE_STRING( p_module->p_config[i].ppsz_action_text[j] );
 
-        SAVE_IMMEDIATE( p_module->p_config[i].pf_callback );
+        bool has_callback = p_module->p_config[i].pf_callback != NULL;
+        SAVE_IMMEDIATE( has_callback );
     }
     return 0;
 




More information about the vlc-devel mailing list