[libdvdcss-devel] [PATCH 11/12] libdvdcss: Track cache directory in global struct instead passing a pointer
Jean-Baptiste Kempf
jb at videolan.org
Tue Nov 11 14:39:15 CET 2014
OK
On 11 Nov, Diego Biurrun wrote :
> This avoids passing around a string of unknown size from CID 75514.
> ---
> src/libdvdcss.c | 39 +++++++++++++++++++++------------------
> 1 file changed, 21 insertions(+), 18 deletions(-)
>
> diff --git a/src/libdvdcss.c b/src/libdvdcss.c
> index aeeeff1..35d474e 100644
> --- a/src/libdvdcss.c
> +++ b/src/libdvdcss.c
> @@ -192,13 +192,13 @@ static int set_access_method( dvdcss_t dvdcss )
> return 0;
> }
>
> -static char *set_cache_directory( dvdcss_t dvdcss )
> +static int set_cache_directory( dvdcss_t dvdcss )
> {
> char *psz_cache = getenv( "DVDCSS_CACHE" );
>
> if( psz_cache && !strcmp( psz_cache, "off" ) )
> {
> - return NULL;
> + return -1;
> }
>
> if( psz_cache == NULL || psz_cache[0] == '\0' )
> @@ -268,12 +268,12 @@ static char *set_cache_directory( dvdcss_t dvdcss )
> sizeof(CACHE_TAG_NAME) > PATH_MAX )
> {
> print_error( dvdcss, "cache directory name is too long" );
> - return NULL;
> + return -1;
> }
> - return psz_cache;
> + return 0;
> }
>
> -static void init_cache_dir( dvdcss_t dvdcss, const char *psz_cache )
> +static int init_cache_dir( dvdcss_t dvdcss )
> {
> static const char psz_tag[] =
> "Signature: 8a477f597d28d172789f06886806bc55\r\n"
> @@ -283,15 +283,15 @@ static void init_cache_dir( dvdcss_t dvdcss, const char *psz_cache )
> char psz_tagfile[PATH_MAX];
> int i_fd, i_ret;
>
> - i_ret = mkdir( psz_cache, 0755 );
> + i_ret = mkdir( dvdcss->psz_cachefile, 0755 );
> if( i_ret < 0 && errno != EEXIST )
> {
> print_error( dvdcss, "failed creating cache directory" );
> - psz_cache = NULL;
> - return;
> + dvdcss->psz_cachefile[0] = '\0';
> + return -1;
> }
>
> - sprintf( psz_tagfile, "%s/" CACHE_TAG_NAME, psz_cache );
> + sprintf( psz_tagfile, "%s/" CACHE_TAG_NAME, dvdcss->psz_cachefile );
> i_fd = open( psz_tagfile, O_RDWR|O_CREAT, 0644 );
> if( i_fd >= 0 )
> {
> @@ -303,9 +303,10 @@ static void init_cache_dir( dvdcss_t dvdcss, const char *psz_cache )
> }
> close( i_fd );
> }
> + return 0;
> }
>
> -static void create_cache_subdir( dvdcss_t dvdcss, const char *psz_cache )
> +static void create_cache_subdir( dvdcss_t dvdcss )
> {
> uint8_t p_sector[DVDCSS_BLOCK_SIZE];
> char psz_key[STRING_KEY_SIZE + 1];
> @@ -404,7 +405,7 @@ static void create_cache_subdir( dvdcss_t dvdcss, const char *psz_cache )
>
> /* We have a disc name or ID, we can create the cache subdirectory. */
> i = sprintf( dvdcss->psz_cachefile, "%s/%s-%s-%s",
> - psz_cache, psz_title, psz_serial, psz_key );
> + dvdcss->psz_cachefile, psz_title, psz_serial, psz_key );
> i_ret = mkdir( dvdcss->psz_cachefile, 0755 );
> if( i_ret < 0 && errno != EEXIST )
> {
> @@ -424,19 +425,21 @@ static void create_cache_subdir( dvdcss_t dvdcss, const char *psz_cache )
> static void init_cache( dvdcss_t dvdcss )
> {
> /* Set CSS key cache directory. */
> - const char *psz_cache = set_cache_directory( dvdcss );
> + int i_ret = set_cache_directory( dvdcss );
> + if ( i_ret < 0 )
> + {
> + return;
> + }
>
> /* If the cache is enabled, initialize the cache directory. */
> - if( psz_cache )
> + i_ret = init_cache_dir( dvdcss );
> + if ( i_ret < 0 )
> {
> - init_cache_dir( dvdcss, psz_cache );
> + return;
> }
>
> /* If the cache is enabled, create a DVD-specific subdirectory. */
> - if( psz_cache )
> - {
> - create_cache_subdir( dvdcss, psz_cache );
> - }
> + create_cache_subdir( dvdcss );
> }
>
> /**
> --
> 2.1.0
>
> _______________________________________________
> libdvdcss-devel mailing list
> libdvdcss-devel at videolan.org
> https://mailman.videolan.org/listinfo/libdvdcss-devel
--
With my kindest regards,
--
Jean-Baptiste Kempf
http://www.jbkempf.com/ - +33 672 704 734
Sent from my Electronic Device
More information about the libdvdcss-devel
mailing list