#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>
#include "cdrom_internals.h"
#include "cdrom.h"
-#include <vlc_meta.h>
/*****************************************************************************
* ioctl_Open: Opens a VCD device or file and returns an opaque handle
{
/* 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" );
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 */