vlc | branch: master | Rémi Denis-Courmont <[email protected]> | Tue Oct 25 19:55:32 2016 +0300| [8c6435bd21e23b225d75701ce87ef4b5d316f084] | committer: Rémi Denis-Courmont
modules: factor common loading from macros to functions > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=8c6435bd21e23b225d75701ce87ef4b5d316f084 --- src/modules/cache.c | 74 ++++++++++++++++++++++++++++++++--------------------- 1 file changed, 45 insertions(+), 29 deletions(-) diff --git a/src/modules/cache.c b/src/modules/cache.c index 54a1bba..a12d43b 100644 --- a/src/modules/cache.c +++ b/src/modules/cache.c @@ -76,48 +76,64 @@ void CacheDelete( vlc_object_t *obj, const char *dir ) free( path ); } -#define LOAD_IMMEDIATE(a) \ - if (fread (&(a), sizeof (char), sizeof (a), file) != sizeof (a)) \ - goto error -#define LOAD_FLAG(a) \ - do { \ - unsigned char b; \ - LOAD_IMMEDIATE(b); \ - if (b > 1) \ - goto error; \ - (a) = b; \ - } while (0) +static int vlc_cache_load_immediate(void *out, FILE *in, size_t size) +{ + return fread(out, sizeof (char), size, in) == size ? 0 : -1; +} -static int CacheLoadString (char **p, FILE *file) +static int vlc_cache_load_bool(bool *out, FILE *in) +{ + unsigned char b; + + if (vlc_cache_load_immediate(&b, in, 1) || b > 1) + return -1; + + *out = b; + return 0; +} + +static int vlc_cache_load_string(char **restrict p, FILE *file) { - char *psz = NULL; uint16_t size; - LOAD_IMMEDIATE (size); - if (size > 16384) - { -error: + if (vlc_cache_load_immediate(&size, file, sizeof (size)) || size > 16384) return -1; + + if (size == 0) + { + *p = NULL; + return 0; } - if (size > 0) + char *str = malloc(size + 1); + if (unlikely(str == NULL)) + return -1; + + if (vlc_cache_load_immediate(str, file, size)) { - psz = malloc (size+1); - if (unlikely(psz == NULL)) - goto error; - if (fread (psz, 1, size, file) != size) - { - free (psz); - goto error; - } - psz[size] = '\0'; + free(str); + return -1; } - *p = psz; + + str[size] = '\0'; + *p = str; return 0; } +#define LOAD_IMMEDIATE(a) \ + if (vlc_cache_load_immediate(&(a), file, sizeof (a))) \ + goto error +#define LOAD_FLAG(a) \ + do \ + { \ + bool b; \ + if (vlc_cache_load_bool(&b, file)) \ + goto error; \ + (a) = b; \ + } while (0) #define LOAD_STRING(a) \ - if (CacheLoadString (&(a), file)) goto error + if (vlc_cache_load_string(&(a), file)) \ + goto error static int CacheLoadConfig (module_config_t *cfg, FILE *file) { _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
