]> git.sesse.net Git - vlc/blobdiff - modules/access/cdda/access.c
More memleaks (pointed out by Jpeg)
[vlc] / modules / access / cdda / access.c
index 4a8fddece3e87d8d63d6027250db50a6c2134415..d5e3d819befc366b35543dd8a895a8d237152e4f 100644 (file)
 #include "callback.h"      /* FIXME - reorganize callback.h, cdda.h better */
 #include "cdda.h"          /* private structures. Also #includes vlc things */
 #include "info.h"          /* headers for meta info retrieval */
-#include <vlc_playlist.h>  /* Has to come *after* cdda.h */
+#include "access.h"
 #include "vlc_keys.h"
-#include <vlc_interaction.h>
+#include <vlc_interface.h>
 
 #include <cdio/cdio.h>
 #include <cdio/logging.h>
 #include <cdio/cd_types.h>
 
-#include <stdio.h>
 
 /* #ifdef variables below are defined via config.h via #include vlc above. */
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
 
 #ifdef HAVE_SYS_TYPES_H
 #include <sys/types.h>
 #endif
 
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-
 #ifdef HAVE_UNISTD_H
 #   include <unistd.h>
 #endif
@@ -62,7 +54,7 @@ access_t *p_cdda_input = NULL;
 /*****************************************************************************
  * Local prototypes
  *****************************************************************************/
-static int      CDDARead( access_t *, uint8_t *, int );
+static ssize_t  CDDARead( access_t *, uint8_t *, size_t );
 static block_t *CDDAReadBlocks( access_t * p_access );
 static int      CDDASeek( access_t * p_access, int64_t i_pos );
 static int      CDDAControl( access_t *p_access, int i_query,
@@ -75,7 +67,7 @@ static int      CDDAInit( access_t *p_access, cdda_data_t *p_cdda ) ;
  * Private functions
  ****************************************************************************/
 
-/* process messages that originate from libcdio. 
+/* process messages that originate from libcdio.
    called by CDDAOpen
 */
 static void
@@ -91,17 +83,17 @@ cdio_log_handler( cdio_log_level_t level, const char message[] )
         case CDIO_LOG_DEBUG:
         case CDIO_LOG_INFO:
             if (p_cdda->i_debug & INPUT_DBG_CDIO)
-            msg_Dbg( p_cdda_input, message);
+            msg_Dbg( p_cdda_input, "%s", message);
             break;
         case CDIO_LOG_WARN:
-            msg_Warn( p_cdda_input, message);
+            msg_Warn( p_cdda_input, "%s", message);
             break;
         case CDIO_LOG_ERROR:
         case CDIO_LOG_ASSERT:
-            msg_Err( p_cdda_input, message);
+            msg_Err( p_cdda_input, "%s", message);
             break;
         default:
-            msg_Warn( p_cdda_input, message,
+            msg_Warn( p_cdda_input, "%s\n%s %d", message,
                     "the above message had unknown cdio log level",
                     level);
             break;
@@ -167,7 +159,7 @@ uninit_log_handler( cdio_log_level_t level, const char message[] )
     /* gl_default_cdio_log_handler (level, message); */
 }
 
-/* Only used in audio control mode. Gets the current LSN from the 
+/* Only used in audio control mode. Gets the current LSN from the
    CD-ROM drive. */
 static int64_t get_audio_position ( access_t *p_access )
 {
@@ -222,7 +214,7 @@ static block_t * CDDAReadBlocks( access_t * p_access )
     cdda_data_t *p_cdda   = (cdda_data_t *) p_access->p_sys;
     int          i_blocks = p_cdda->i_blocks_per_read;
 
-    dbg_print( (INPUT_DBG_CALL|INPUT_DBG_EXT|INPUT_DBG_LSN), 
+    dbg_print( (INPUT_DBG_CALL|INPUT_DBG_EXT|INPUT_DBG_LSN),
                 "called i_lsn: %d i_pos: %lld, size: %lld",
                 p_cdda->i_lsn, p_access->info.i_pos, p_access->info.i_size );
 
@@ -235,7 +227,7 @@ static block_t * CDDAReadBlocks( access_t * p_access )
         /* Return only the dummy RIFF header we created in Open/Init */
         p_block = block_New( p_access, sizeof( WAVEHEADER ) );
         memcpy( p_block->p_buffer, &p_cdda->waveheader, sizeof(WAVEHEADER) );
-        p_cdda->b_header = VLC_TRUE;
+        p_cdda->b_header = true;
         return p_block;
     }
 
@@ -253,7 +245,7 @@ static block_t * CDDAReadBlocks( access_t * p_access )
         if( go_on )
         {
             dbg_print( (INPUT_DBG_LSN), "EOF");
-                        p_access->info.b_eof = VLC_TRUE;
+                        p_access->info.b_eof = true;
             return NULL;
         }
 
@@ -290,8 +282,8 @@ static block_t * CDDAReadBlocks( access_t * p_access )
     {
         msg_Err( p_access, "cannot get a new block of size: %i",
                 i_blocks * CDIO_CD_FRAMESIZE_RAW );
-        intf_UserFatal( p_access, VLC_FALSE, _("CD reading failed"), 
-                        _("VLC could not get a new block of size: %i."), 
+        intf_UserFatal( p_access, false, _("CD reading failed"),
+                        _("VLC could not get a new block of size: %i."),
                         i_blocks * CDIO_CD_FRAMESIZE_RAW );
         return NULL;
     }
@@ -313,8 +305,8 @@ static block_t * CDDAReadBlocks( access_t * p_access )
                     msg_Err( p_access, "%s%s\n", psz_mes ? psz_mes: "",
                              psz_err ? psz_err: "" );
 
-                if( psz_err ) free( psz_err );
-                if( psz_mes ) free( psz_mes );
+                free( psz_err );
+                free( psz_mes );
                 if( !p_readbuf )
                 {
                     msg_Err( p_access, "paranoia read error on frame %i\n",
@@ -361,8 +353,8 @@ static block_t * CDDAReadBlocks( access_t * p_access )
 /*****************************************************************************
  * CDDARead: Handler for audio control reads the CD-DA.
  *****************************************************************************/
-static int
-CDDARead( access_t * p_access, uint8_t *p_buffer, int i_len )
+static ssize_t
+CDDARead( access_t * p_access, uint8_t *p_buffer, size_t i_len )
 {
     cdda_data_t *p_cdda   = (cdda_data_t *) p_access->p_sys;
 
@@ -396,7 +388,7 @@ CDDARead( access_t * p_access, uint8_t *p_buffer, int i_len )
         if( p_cdda->i_track >= p_cdda->i_first_track + p_cdda->i_titles - 1 )
         {
             dbg_print( (INPUT_DBG_LSN), "EOF");
-            p_access->info.b_eof = VLC_TRUE;
+            p_access->info.b_eof = true;
             return 0;
         }
         p_access->info.i_update |= INPUT_UPDATE_TITLE;
@@ -407,7 +399,7 @@ CDDARead( access_t * p_access, uint8_t *p_buffer, int i_len )
         {
             char *psz_title = CDDAFormatTitle( p_access, p_cdda->i_track );
             input_Control( p_cdda->p_input, INPUT_SET_NAME, psz_title );
-            free(psz_title);
+            free( psz_title );
         }
         else
         {
@@ -512,7 +504,7 @@ static int CDDASeek( access_t * p_access, int64_t i_pos )
     }
 
     p_access->info.i_pos = i_pos;
-    p_access->info.b_eof = VLC_FALSE;
+    p_access->info.b_eof = false;
     return VLC_SUCCESS;
 }
 
@@ -536,7 +528,7 @@ static bool cdda_play_track( access_t *p_access, track_t i_track )
     p_cdda->i_track = i_track;
 
     /* set up the frame boundaries for this particular track */
-    p_cdda->first_frame = p_cdda->i_lsn = 
+    p_cdda->first_frame = p_cdda->i_lsn =
     cdio_get_track_lsn( p_cdda->p_cdio, i_track );
 
     p_cdda->last_frame  = cdio_get_track_lsn( p_cdda->p_cdio, i_track+1 ) - 1;
@@ -570,7 +562,7 @@ int CDDAOpen( vlc_object_t *p_this )
     cdda_data_t *p_cdda    = NULL;
     CdIo_t      *p_cdio;
     track_t     i_track = 1;
-    vlc_bool_t  b_single_track = false;
+    bool  b_single_track = false;
     int         i_rc = VLC_EGENERIC;
 
     p_access->p_sys = NULL;
@@ -605,6 +597,7 @@ int CDDAOpen( vlc_object_t *p_this )
 
     if( !psz_source || !*psz_source )
     {
+        free( psz_source );
         /* No device/track given. Continue only when this plugin was
            selected */
         if( !p_this->b_force )
@@ -613,6 +606,7 @@ int CDDAOpen( vlc_object_t *p_this )
         psz_source = var_CreateGetString( p_this, "cd-audio" );
         if( !psz_source || !*psz_source )
         {
+            free( psz_source );
             /* Scan for a CD-ROM drive with a CD-DA in it. */
             char **ppsz_drives =
                     cdio_get_devices_with_cap( NULL,  CDIO_FS_AUDIO, false );
@@ -635,15 +629,13 @@ int CDDAOpen( vlc_object_t *p_this )
     if( !(p_cdio = cdio_open( psz_source, DRIVER_UNKNOWN )) )
     {
         msg_Warn( p_access, "could not open %s", psz_source );
-        if ( psz_source )
-            free( psz_source );
+        free( psz_source );
         return VLC_EGENERIC;
     }
 
     p_cdda = calloc( 1, sizeof(cdda_data_t) );
     if( p_cdda == NULL )
     {
-        msg_Err( p_access, "out of memory" );
         free( psz_source );
         return VLC_ENOMEM;
     }
@@ -664,7 +656,7 @@ int CDDAOpen( vlc_object_t *p_this )
 #endif
 
     p_cdda->psz_source = strdup( psz_source );
-    p_cdda->b_header   = VLC_FALSE;
+    p_cdda->b_header   = false;
     p_cdda->p_cdio     = p_cdio;
     p_cdda->i_tracks   = 0;
     p_cdda->i_titles   = 0;
@@ -724,7 +716,7 @@ int CDDAOpen( vlc_object_t *p_this )
     }
 
     p_access->info.i_update    = 0;
-    p_access->info.b_eof       = VLC_FALSE;
+    p_access->info.b_eof       = false;
     p_access->info.i_title     = 0;
     p_access->info.i_seekpoint = 0;
 
@@ -743,13 +735,13 @@ int CDDAOpen( vlc_object_t *p_this )
         char *psz_paranoia = config_GetPsz( p_access,
                                 MODULE_STRING "-paranoia" );
 
-        p_cdda->e_paranoia = paranoia_none;
+        p_cdda->e_paranoia = PARANOIA_MODE_DISABLE;
         if( psz_paranoia && *psz_paranoia )
         {
             if( !strncmp( psz_paranoia, "full", strlen("full") ) )
-                p_cdda->e_paranoia = paranoia_full;
+                p_cdda->e_paranoia = PARANOIA_MODE_FULL;
             else if( !strncmp(psz_paranoia, "overlap", strlen("overlap")) )
-                p_cdda->e_paranoia = paranoia_overlap;
+                p_cdda->e_paranoia = PARANOIA_MODE_OVERLAP;
 
             /* Use CD Paranoia? */
             if( p_cdda->e_paranoia )
@@ -764,7 +756,7 @@ int CDDAOpen( vlc_object_t *p_this )
                 {
                     msg_Warn( p_cdda_input, "unable to get paranoia support - "
                                 "continuing without it." );
-                    p_cdda->e_paranoia = paranoia_none;
+                    p_cdda->e_paranoia = PARANOIA_MODE_DISABLE;
                 }
                 else
                 {
@@ -775,12 +767,13 @@ int CDDAOpen( vlc_object_t *p_this )
                     /* Set reading mode for full or overlap paranoia,
                      * but allow skipping sectors. */
                     cdio_paranoia_modeset( p_cdda->paranoia,
-                        paranoia_full == p_cdda->e_paranoia ?
+                            PARANOIA_MODE_FULL == p_cdda->e_paranoia ?
                             PARANOIA_MODE_FULL^PARANOIA_MODE_NEVERSKIP :
                             PARANOIA_MODE_OVERLAP^PARANOIA_MODE_NEVERSKIP );
                 }
             }
         }
+        free( psz_paranoia );
     }
 #endif
 
@@ -812,11 +805,12 @@ int CDDAOpen( vlc_object_t *p_this )
     var_Create( p_access, MODULE_STRING "-caching",
                 VLC_VAR_INTEGER|VLC_VAR_DOINHERIT );
     vlc_object_release( p_cdda->p_input );
+    free( psz_source );
     return VLC_SUCCESS;
 
  error:
     cdio_destroy( p_cdda->p_cdio );
-    if( psz_source) free( psz_source );
+    free( psz_source );
     if( p_cdda )
     {
         if ( p_cdda->p_input )
@@ -864,8 +858,8 @@ void CDDAClose (vlc_object_t *p_this )
         cdio_cddap_close_no_free_cdio( p_cdda->paranoia_cd );
 #endif
 
-    if( p_cdda->psz_mcn )    free( p_cdda->psz_mcn );
-    if( p_cdda->psz_source ) free( p_cdda->psz_source );
+    free( p_cdda->psz_mcn );
+    free( p_cdda->psz_source );
 
 #if LIBCDDB_VERSION_NUM >= 1
     libcddb_shutdown();
@@ -896,8 +890,8 @@ static int CDDAControl( access_t *p_access, int i_query, va_list args )
          */
         case ACCESS_GET_META:
         {
-            vlc_meta_t **pp_meta = (vlc_meta_t**)va_arg( args, vlc_meta_t** );
 #if 0
+            vlc_meta_t **pp_meta = (vlc_meta_t**)va_arg( args, vlc_meta_t** );
             if( p_cdda->p_meta )
             {
                 *pp_meta = vlc_meta_Duplicate( p_cdda->p_meta );
@@ -914,8 +908,8 @@ static int CDDAControl( access_t *p_access, int i_query, va_list args )
 
         case ACCESS_CAN_CONTROL_PACE:
         {
-            vlc_bool_t *pb_bool = (vlc_bool_t*)va_arg( args, vlc_bool_t* );
-            *pb_bool = p_cdda->b_audio_ctl ? VLC_FALSE : VLC_TRUE;
+            bool *pb_bool = (bool*)va_arg( args, bool* );
+            *pb_bool = p_cdda->b_audio_ctl ? false : true;
             dbg_print( INPUT_DBG_META, "can control pace? %d", *pb_bool);
             return VLC_SUCCESS;
         }
@@ -930,8 +924,8 @@ static int CDDAControl( access_t *p_access, int i_query, va_list args )
             dbg_print( INPUT_DBG_META, "can pause?");
  common:
             {
-                vlc_bool_t *pb_bool = (vlc_bool_t*)va_arg( args, vlc_bool_t* );
-                *pb_bool = VLC_TRUE;
+                bool *pb_bool = (bool*)va_arg( args, bool* );
+                *pb_bool = true;
                 return VLC_SUCCESS;
             }
 
@@ -1013,7 +1007,7 @@ static int CDDAControl( access_t *p_access, int i_query, va_list args )
                     char *psz_title = CDDAFormatTitle( p_access, i_track );
                     input_Control( p_cdda->p_input, INPUT_SET_NAME,
                                    psz_title );
-                    free(psz_title);
+                    free( psz_title );
                     p_cdda->i_track = i_track;
                     i_last_lsn = cdio_get_track_lsn( p_cdda->p_cdio,
                                                 CDIO_CDROM_LEADOUT_TRACK );
@@ -1101,7 +1095,7 @@ static int CDDAInit( access_t *p_access, cdda_data_t *p_cdda )
     return VLC_SUCCESS;
 }
 
-/* 
+/*
  * Local variables:
  *  mode: C
  *  style: gnu