]> git.sesse.net Git - vlc/commitdiff
* ./plugins/dvd/dvd_access.c ./plugins/vcd/input_vcd.c: we now exit more
authorSam Hocevar <sam@videolan.org>
Sat, 9 Mar 2002 13:42:46 +0000 (13:42 +0000)
committerSam Hocevar <sam@videolan.org>
Sat, 9 Mar 2002 13:42:46 +0000 (13:42 +0000)
    cleanly on initialization error.

plugins/dvd/dvd_access.c
plugins/vcd/input_vcd.c

index 2014d134a55eaeefa980027c192ca314b62f909d..dff92bff1696f601ccadcfdf419bd8631a5c4204 100644 (file)
@@ -8,7 +8,7 @@
  *  -dvd_udf to find files
  *****************************************************************************
  * Copyright (C) 1998-2001 VideoLAN
- * $Id: dvd_access.c,v 1.3 2002/03/08 22:58:12 stef Exp $
+ * $Id: dvd_access.c,v 1.4 2002/03/09 13:42:46 sam Exp $
  *
  * Author: Stéphane Borel <stef@via.ecp.fr>
  *
@@ -114,7 +114,6 @@ void _M( access_getfunctions)( function_list_t * p_function_list )
 static int DVDOpen( struct input_thread_s *p_input )
 {
     char *               psz_device;
-    dvdcss_handle        dvdhandle;
     thread_dvd_data_t *  p_dvd;
     input_area_t *       p_area;
     int                  i;
@@ -142,23 +141,23 @@ static int DVDOpen( struct input_thread_s *p_input )
     /*
      *  get plugin ready
      */ 
-    dvdhandle = dvdcss_open( psz_device );
+    p_dvd->dvdhandle = dvdcss_open( psz_device );
     
     /* free allocated string */
     free( psz_device );
 
-
-    if( dvdhandle == NULL )
+    if( p_dvd->dvdhandle == NULL )
     {
         intf_ErrMsg( "dvd error: dvdcss can't open device" );
+        free( p_dvd );
         return -1;
     }
 
-    p_dvd->dvdhandle = (dvdcss_handle) dvdhandle;
-
     if( dvdcss_seek( p_dvd->dvdhandle, 0, DVDCSS_NOFLAGS ) < 0 )
     {
         intf_ErrMsg( "dvd error: %s", dvdcss_error( p_dvd->dvdhandle ) );
+        dvdcss_close( p_dvd->dvdhandle );
+        free( p_dvd );
         return -1;
     }
 
@@ -166,6 +165,7 @@ static int DVDOpen( struct input_thread_s *p_input )
     if( IfoCreate( p_dvd ) < 0 )
     {
         intf_ErrMsg( "dvd error: allcation error in ifo" );
+        dvdcss_close( p_dvd->dvdhandle );
         free( p_dvd );
         return -1;
     }
@@ -174,6 +174,7 @@ static int DVDOpen( struct input_thread_s *p_input )
     {
         intf_ErrMsg( "dvd error: fatal failure in ifo" );
         IfoDestroy( p_dvd->p_ifo );
+        dvdcss_close( p_dvd->dvdhandle );
         free( p_dvd );
         return -1;
     }
@@ -237,6 +238,9 @@ static int DVDOpen( struct input_thread_s *p_input )
     if( DVDSetArea( p_input, p_area ) < 0 )
     {
         vlc_mutex_unlock( &p_input->stream.stream_lock );
+        IfoDestroy( p_dvd->p_ifo );
+        dvdcss_close( p_dvd->dvdhandle );
+        free( p_dvd );
         return -1;
     }
 
@@ -252,17 +256,11 @@ static int DVDOpen( struct input_thread_s *p_input )
  *****************************************************************************/
 static void DVDClose( struct input_thread_s *p_input )
 {
-    thread_dvd_data_t *     p_dvd;
-
-    p_dvd = (thread_dvd_data_t*)p_input->p_access_data;
+    thread_dvd_data_t *p_dvd = (thread_dvd_data_t*)p_input->p_access_data;
 
     IfoDestroy( p_dvd->p_ifo );
-
-    p_input->p_access_data = (void *)(p_dvd->dvdhandle);
+    dvdcss_close( p_dvd->dvdhandle );
     free( p_dvd );
-
-    /* Clean up libdvdcss */
-    dvdcss_close( (dvdcss_handle) p_input->p_access_data );
 }
 
 /*****************************************************************************
index 8f7418646e20c03ed8de4757604f91998cb830f9..acc3c919cd6a0da9fc571bff17f19244a3fab2b5 100644 (file)
@@ -238,8 +238,9 @@ static int VCDOpen( struct input_thread_s *p_input )
 
     p_vcd->p_sectors = ioctl_GetSectors( p_vcd->i_handle,
                                          psz_source );
-    if ( p_vcd->p_sectors == NULL )
+    if( p_vcd->p_sectors == NULL )
     {
+        input_BuffersEnd( p_input->p_method_data );
         close( p_vcd->i_handle );
         free( p_vcd );
         return -1;
@@ -282,19 +283,18 @@ static int VCDOpen( struct input_thread_s *p_input )
     vlc_mutex_unlock( &p_input->stream.stream_lock );
 
     p_input->psz_demux = "vcd";
-    
+
     return 0;
 }
 
-    
-
 /*****************************************************************************
  * VCDClose: closes vcd
  *****************************************************************************/
 static void VCDClose( struct input_thread_s *p_input )
 {
-    thread_vcd_data_t *     p_vcd
-        = (thread_vcd_data_t *)p_input->p_access_data;
+    thread_vcd_data_t *p_vcd = (thread_vcd_data_t *)p_input->p_access_data;
+
+    input_BuffersEnd( p_input->p_method_data );
     close( p_vcd->i_handle );
     free( p_vcd );
 }
@@ -498,13 +498,7 @@ static int VCDInit( input_thread_t * p_input )
  *****************************************************************************/
 static void VCDEnd( input_thread_t * p_input )
 {
-    thread_vcd_data_t *     p_vcd;
-
-    input_BuffersEnd( p_input->p_method_data );
-
-    p_vcd = (thread_vcd_data_t*)p_input->p_access_data;
-
-    free( p_vcd );
+    ;
 }