From f71b33de230877ce27fa247e896979190f6d4f25 Mon Sep 17 00:00:00 2001 From: =?utf8?q?R=C3=A9mi=20Denis-Courmont?= Date: Sun, 27 Jan 2013 19:21:30 +0200 Subject: [PATCH] modules: do not use non-portable union to store item flags in cache MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Pointed-out-by: Mario Speiß <1034-135@online.de> --- include/vlc_configuration.h | 22 ++++++++-------------- src/modules/cache.c | 33 +++++++++++++++++++++++++++++---- 2 files changed, 37 insertions(+), 18 deletions(-) diff --git a/include/vlc_configuration.h b/include/vlc_configuration.h index acd1f410c2..fe0aba5ca8 100644 --- a/include/vlc_configuration.h +++ b/include/vlc_configuration.h @@ -59,20 +59,14 @@ typedef int (*vlc_integer_list_cb)(vlc_object_t *, const char *, struct module_config_t { - union - { - struct - { - uint8_t i_type; /* Configuration type */ - char i_short; /* Optional short option name */ - unsigned b_advanced:1; /* Advanced option */ - unsigned b_internal:1; /* Hidden from prefs and help */ - unsigned b_unsaveable:1; /* Not stored in configuration */ - unsigned b_safe:1; /* Safe in web plugins and playlists */ - unsigned b_removed:1; /* Deprecated */ - }; - uint32_t flags; - }; + uint8_t i_type; /* Configuration type */ + char i_short; /* Optional short option name */ + unsigned b_advanced:1; /* Advanced option */ + unsigned b_internal:1; /* Hidden from prefs and help */ + unsigned b_unsaveable:1; /* Not stored in configuration */ + unsigned b_safe:1; /* Safe in web plugins and playlists */ + unsigned b_removed:1; /* Deprecated */ + char *psz_type; /* Configuration subtype */ char *psz_name; /* Option name */ char *psz_text; /* Short comment on the configuration option */ diff --git a/src/modules/cache.c b/src/modules/cache.c index d7aae1dd88..61290435a5 100644 --- a/src/modules/cache.c +++ b/src/modules/cache.c @@ -57,7 +57,7 @@ #ifdef HAVE_DYNAMIC_PLUGINS /* Sub-version number * (only used to avoid breakage in dev version when cache structure changes) */ -#define CACHE_SUBVERSION_NUM 21 +#define CACHE_SUBVERSION_NUM 22 /* Cache filename */ #define CACHE_NAME "plugins.dat" @@ -80,7 +80,15 @@ void CacheDelete( vlc_object_t *obj, const char *dir ) #define LOAD_IMMEDIATE(a) \ if (fread (&(a), sizeof (char), sizeof (a), file) != sizeof (a)) \ - goto error + goto error +#define LOAD_FLAG(a) \ + do { \ + unsigned char b; \ + LOAD_IMMEDIATE(b); \ + if (b > 1) \ + goto error; \ + (a) = b; \ + } while (0) static int CacheLoadString (char **p, FILE *file) { @@ -115,7 +123,13 @@ error: static int CacheLoadConfig (module_config_t *cfg, FILE *file) { - LOAD_IMMEDIATE (cfg->flags); + LOAD_IMMEDIATE (cfg->i_type); + LOAD_IMMEDIATE (cfg->i_short); + LOAD_FLAG (cfg->b_advanced); + LOAD_FLAG (cfg->b_internal); + LOAD_FLAG (cfg->b_unsaveable); + LOAD_FLAG (cfg->b_safe); + LOAD_FLAG (cfg->b_removed); LOAD_STRING (cfg->psz_type); LOAD_STRING (cfg->psz_name); LOAD_STRING (cfg->psz_text); @@ -383,6 +397,11 @@ error: #define SAVE_IMMEDIATE( a ) \ if (fwrite (&(a), sizeof(a), 1, file) != 1) \ goto error +#define SAVE_FLAG(a) \ + do { \ + char b = (a); \ + LOAD_IMMEDIATE(b); \ + } while (0) static int CacheSaveString (FILE *file, const char *str) { @@ -403,7 +422,13 @@ error: static int CacheSaveConfig (FILE *file, const module_config_t *cfg) { - SAVE_IMMEDIATE (cfg->flags); + SAVE_IMMEDIATE (cfg->i_type); + SAVE_IMMEDIATE (cfg->i_short); + SAVE_FLAG (cfg->b_advanced); + SAVE_FLAG (cfg->b_internal); + SAVE_FLAG (cfg->b_unsaveable); + SAVE_FLAG (cfg->b_safe); + SAVE_FLAG (cfg->b_removed); SAVE_STRING (cfg->psz_type); SAVE_STRING (cfg->psz_name); SAVE_STRING (cfg->psz_text); -- 2.39.2