Commit 514d4fcb authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

modules: remove plugins count from the plugins cache

This potentially allows generating the plugins cache on-the-go - there
is no more need to know the total number of plugins ahead of time.
parent 93e1866d
...@@ -55,7 +55,7 @@ ...@@ -55,7 +55,7 @@
#ifdef HAVE_DYNAMIC_PLUGINS #ifdef HAVE_DYNAMIC_PLUGINS
/* Sub-version number /* Sub-version number
* (only used to avoid breakage in dev version when cache structure changes) */ * (only used to avoid breakage in dev version when cache structure changes) */
#define CACHE_SUBVERSION_NUM 22 #define CACHE_SUBVERSION_NUM 23
/* Cache filename */ /* Cache filename */
#define CACHE_NAME "plugins.dat" #define CACHE_NAME "plugins.dat"
...@@ -291,7 +291,6 @@ size_t CacheLoad( vlc_object_t *p_this, const char *dir, module_cache_t **r ) ...@@ -291,7 +291,6 @@ size_t CacheLoad( vlc_object_t *p_this, const char *dir, module_cache_t **r )
FILE *file; FILE *file;
int i_size, i_read; int i_size, i_read;
char p_cachestring[sizeof(CACHE_STRING)]; char p_cachestring[sizeof(CACHE_STRING)];
size_t i_cache;
int32_t i_marker; int32_t i_marker;
assert( dir != NULL ); assert( dir != NULL );
...@@ -337,7 +336,7 @@ size_t CacheLoad( vlc_object_t *p_this, const char *dir, module_cache_t **r ) ...@@ -337,7 +336,7 @@ size_t CacheLoad( vlc_object_t *p_this, const char *dir, module_cache_t **r )
} }
#endif #endif
/* Check Sub-version number */ /* Check sub-version number */
i_read = fread( &i_marker, 1, sizeof(i_marker), file ); i_read = fread( &i_marker, 1, sizeof(i_marker), file );
if( i_read != sizeof(i_marker) || i_marker != CACHE_SUBVERSION_NUM ) if( i_read != sizeof(i_marker) || i_marker != CACHE_SUBVERSION_NUM )
{ {
...@@ -358,21 +357,18 @@ size_t CacheLoad( vlc_object_t *p_this, const char *dir, module_cache_t **r ) ...@@ -358,21 +357,18 @@ size_t CacheLoad( vlc_object_t *p_this, const char *dir, module_cache_t **r )
return 0; return 0;
} }
if (fread( &i_cache, 1, sizeof(i_cache), file ) != sizeof(i_cache) )
{
msg_Warn( p_this, "This doesn't look like a valid plugins cache "
"(file too short)" );
fclose( file );
return 0;
}
module_cache_t *cache = NULL; module_cache_t *cache = NULL;
size_t count = 0;
for (size_t count = 0; count < i_cache;) for (;;)
{ {
module_t *module = CacheLoadModule (file); module_t *module = CacheLoadModule (file);
if (module == NULL) if (module == NULL)
{
if (feof (file))
break;
goto error; goto error;
}
char *path; char *path;
struct stat st; struct stat st;
...@@ -388,10 +384,11 @@ size_t CacheLoad( vlc_object_t *p_this, const char *dir, module_cache_t **r ) ...@@ -388,10 +384,11 @@ size_t CacheLoad( vlc_object_t *p_this, const char *dir, module_cache_t **r )
free (path); free (path);
/* TODO: deal with errors */ /* TODO: deal with errors */
} }
fclose( file ); fclose( file );
*r = cache; *r = cache;
return i_cache; return count;
error: error:
if (ferror (file)) if (ferror (file))
...@@ -566,9 +563,6 @@ static int CacheSaveBank (FILE *file, const module_cache_t *cache, ...@@ -566,9 +563,6 @@ static int CacheSaveBank (FILE *file, const module_cache_t *cache,
if (fwrite (&i_file_size, sizeof (i_file_size), 1, file) != 1) if (fwrite (&i_file_size, sizeof (i_file_size), 1, file) != 1)
goto error; goto error;
if (fwrite( &i_cache, sizeof (i_cache), 1, file) != 1)
goto error;
for (unsigned i = 0; i < i_cache; i++) for (unsigned i = 0; i < i_cache; i++)
{ {
module_t *module = cache[i].p_module; module_t *module = cache[i].p_module;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment