]> git.sesse.net Git - vlc/blobdiff - modules/access/vcd/cdrom.c
avio: remove interrupt callback for output
[vlc] / modules / access / vcd / cdrom.c
index d55bef46e6d48993515ede3026ee6bd20b3f4b61..a4a8bd438dd7335b1a506e826da180e3141cc763 100644 (file)
 #include <unistd.h>
 #include <sys/stat.h>
 #include <fcntl.h>
-#ifdef HAVE_ARPA_INET_H
-#   include <arpa/inet.h>
-#endif
+#include <limits.h>
 
 #include <vlc_common.h>
 #include <vlc_access.h>
 #include <vlc_charset.h>
 #include <vlc_fs.h>
-#include <limits.h>
+#include <vlc_meta.h>
 
 #if defined( SYS_BSDI )
 #   include <dvd.h>
@@ -141,7 +139,6 @@ exit_free:
 
 #include "cdrom_internals.h"
 #include "cdrom.h"
-#include <vlc_meta.h>
 
 /*****************************************************************************
  * ioctl_Open: Opens a VCD device or file and returns an opaque handle
@@ -782,30 +779,33 @@ static int OpenVCDImage( vlc_object_t * p_this, const char *psz_dev,
     {
         /* psz_dev must be the cue file. Let's assume there's a .bin
          * file with the same filename */
-        psz_vcdfile = malloc( p_pos - psz_dev + 5 /* ".bin" */ );
-        strncpy( psz_vcdfile, psz_dev, p_pos - psz_dev );
-        strcpy( psz_vcdfile + (p_pos - psz_dev), ".bin");
+        if( asprintf( &psz_vcdfile, "%.*s.bin", (int)(p_pos - psz_dev),
+                      psz_dev ) < 0 )
+            psz_vcdfile = NULL;
         psz_cuefile = strdup( psz_dev );
     }
     else
+    if( p_pos )
     {
         /* psz_dev must be the actual vcd file. Let's assume there's a .cue
          * file with the same filename */
-        if( p_pos )
-        {
-            psz_cuefile = malloc( p_pos - psz_dev + 5 /* ".cue" */ );
-            strncpy( psz_cuefile, psz_dev, p_pos - psz_dev );
-            strcpy( psz_cuefile + (p_pos - psz_dev), ".cue");
-        }
-        else
-        {
-            if( asprintf( &psz_cuefile, "%s.cue", psz_dev ) == -1 )
-                psz_cuefile = NULL;
-        }
-        /* If we need to look up the .cue file, then we don't have to look for the vcd */
+        if( asprintf( &psz_cuefile, "%.*s.cue", (int)(p_pos - psz_dev),
+                      psz_dev ) < 0 )
+            psz_cuefile = NULL;
+        psz_vcdfile = strdup( psz_dev );
+    }
+    else
+    {
+        if( asprintf( &psz_cuefile, "%s.cue", psz_dev ) == -1 )
+            psz_cuefile = NULL;
+         /* If we need to look up the .cue file, then we don't have to look
+          * for the vcd */
         psz_vcdfile = strdup( psz_dev );
     }
 
+    if( psz_cuefile == NULL || psz_vcdfile == NULL )
+        goto error;
+
     /* Open the cue file and try to parse it */
     msg_Dbg( p_this,"trying .cue file: %s", psz_cuefile );
     cuefile = vlc_fopen( psz_cuefile, "rt" );
@@ -818,7 +818,7 @@ static int OpenVCDImage( vlc_object_t * p_this, const char *psz_dev,
     msg_Dbg( p_this,"guessing vcd image file: %s", psz_vcdfile );
     p_vcddev->i_vcdimage_handle = vlc_open( psz_vcdfile,
                                     O_RDONLY | O_NONBLOCK | O_BINARY );
+
     while( fgets( line, 1024, cuefile ) && !b_found )
     {
         /* We have a cue file, but no valid vcd file yet */