]> git.sesse.net Git - vlc/commitdiff
Allow binary maintainer to pass a custom string
authorChristophe Mutricy <xtophe@videolan.org>
Thu, 3 Jul 2008 19:02:37 +0000 (20:02 +0100)
committerChristophe Mutricy <xtophe@videolan.org>
Thu, 3 Jul 2008 21:43:01 +0000 (22:43 +0100)
Soo that we avoid plugin cache problem between binary version.

This patch was first thought for Debian but considering it is usefull
for all distros and for VideoLAN own win32 and MacOSX builds, I
think it has its place in the master tree.

configure.ac
src/modules/cache.c

index 885d6e6f997fdc2fc020f0fea62afa6dfb7d3905..f709a9a0f3a4e9e17e194fcb246717d017694a1d 100644 (file)
@@ -80,6 +80,17 @@ AC_C_CONST
 AC_C_INLINE
 AC_C_RESTRICT
 
+dnl Allow binary package maintainer to pass a custom string to avoid 
+dnl cache problem
+AC_ARG_WITH(binary-version, 
+       AS_HELP_STRING([--with-binary-version=STRING],
+            [To avoid plugins cache problem between binary version]),[],[])
+AS_IF([test -n "${with_binary_version}"],[
+      AC_DEFINE_UNQUOTED([DISTRO_VERSION],["${with_binary_version}"],
+                        [Binary specific version])
+      ])
+
+
 dnl
 dnl  Check for the contrib directory
 dnl
index 25b06050ca5a6914b463ad0472ef2521fb665282..538e8a2bd85cc0f95390769412c01dcb0776a3db 100644 (file)
@@ -178,6 +178,20 @@ void CacheLoad( vlc_object_t *p_this )
         return;
     }
 
+#ifdef DISTRO_VERSION
+    /* Check for distribution specific version */
+    char p_distrostring[sizeof( DISTRO_VERSION )];
+    i_size = sizeof( DISTRO_VERSION ) - 1;
+    i_read = fread( p_distrostring, 1, i_size, file );
+    if( i_read != i_size ||
+        memcmp( p_distrostring, DISTRO_VERSION, i_size ) )
+    {
+        msg_Warn( p_this, "This doesn't look like a valid plugins cache" );
+        fclose( file );
+        return;
+    }
+#endif
+
     /* Check Sub-version number */
     i_read = fread( &i_marker, 1, sizeof(i_marker), file );
     if( i_read != sizeof(i_marker) || i_marker != CACHE_SUBVERSION_NUM )
@@ -496,7 +510,11 @@ void CacheSave( vlc_object_t *p_this )
     /* Contains version number */
     if (fputs ("cache "COPYRIGHT_MESSAGE, file) == EOF)
         goto error;
-
+#ifdef DISTRO_VERSION
+    /* Allow binary maintaner to pass a string to detect new binary version*/
+    if (fputs( DISTRO_VERSION, file ) == EOF)
+        goto error;
+#endif
     /* Sub-version number (to avoid breakage in the dev version when cache
      * structure changes) */
     i_file_size = CACHE_SUBVERSION_NUM;