summaryrefslogtreecommitdiffstats
path: root/dvdread
diff options
context:
space:
mode:
authordiego <diego@b3059339-0415-0410-9bf9-f77b7e298cf2>2007-08-15 11:57:30 +0000
committerdiego <diego@b3059339-0415-0410-9bf9-f77b7e298cf2>2007-08-15 11:57:30 +0000
commitd0d245e84c31767cca7584cdbbf7624139d527b4 (patch)
treed825193bcb328883f15e15a46954f376d75595cb /dvdread
parent92fe260c85d014d2b387c52bc58351d7f25df16c (diff)
downloadmpv-d0d245e84c31767cca7584cdbbf7624139d527b4.tar.bz2
mpv-d0d245e84c31767cca7584cdbbf7624139d527b4.tar.xz
Sync libdvdread with version 0.9.5 (cosmetic changes).
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@24070 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'dvdread')
-rw-r--r--dvdread/bswap.h35
-rw-r--r--dvdread/dvd_input.c41
-rw-r--r--dvdread/dvd_input.h1
-rw-r--r--dvdread/dvd_reader.c1302
-rw-r--r--dvdread/dvd_reader.h15
-rw-r--r--dvdread/dvd_udf.c767
-rw-r--r--dvdread/dvd_udf.h7
-rw-r--r--dvdread/dvdread_internal.h1
-rw-r--r--dvdread/ifo_print.c217
-rw-r--r--dvdread/ifo_print.h1
-rw-r--r--dvdread/ifo_read.c185
-rw-r--r--dvdread/ifo_read.h1
-rw-r--r--dvdread/ifo_types.h1
-rw-r--r--dvdread/md5.c93
-rw-r--r--dvdread/md5.h25
-rw-r--r--dvdread/nav_print.c47
-rw-r--r--dvdread/nav_print.h1
-rw-r--r--dvdread/nav_read.c45
-rw-r--r--dvdread/nav_read.h1
-rw-r--r--dvdread/nav_types.h5
20 files changed, 1406 insertions, 1385 deletions
diff --git a/dvdread/bswap.h b/dvdread/bswap.h
index a5296b82cd..15846aed65 100644
--- a/dvdread/bswap.h
+++ b/dvdread/bswap.h
@@ -1,3 +1,4 @@
+/* -*- c-basic-offset: 2; indent-tabs-mode: nil -*- */
#ifndef BSWAP_H_INCLUDED
#define BSWAP_H_INCLUDED
@@ -126,23 +127,23 @@ inline static unsigned long long int bswap_64(unsigned long long int x)
*/
#elif defined(__FreeBSD__) || defined(__sun) || defined(__bsdi__) || defined(WIN32) || defined(__BEOS__) || defined(__INTERIX) || defined(__CYGWIN__)
-#define B2N_16(x) \
- x = ((((x) & 0xff00) >> 8) | \
- (((x) & 0x00ff) << 8))
-#define B2N_32(x) \
- x = ((((x) & 0xff000000) >> 24) | \
- (((x) & 0x00ff0000) >> 8) | \
- (((x) & 0x0000ff00) << 8) | \
- (((x) & 0x000000ff) << 24))
-#define B2N_64(x) \
- x = ((((x) & 0xff00000000000000) >> 56) | \
- (((x) & 0x00ff000000000000) >> 40) | \
- (((x) & 0x0000ff0000000000) >> 24) | \
- (((x) & 0x000000ff00000000) >> 8) | \
- (((x) & 0x00000000ff000000) << 8) | \
- (((x) & 0x0000000000ff0000) << 24) | \
- (((x) & 0x000000000000ff00) << 40) | \
- (((x) & 0x00000000000000ff) << 56))
+#define B2N_16(x) \
+ x = ((((x) & 0xff00) >> 8) | \
+ (((x) & 0x00ff) << 8))
+#define B2N_32(x) \
+ x = ((((x) & 0xff000000) >> 24) | \
+ (((x) & 0x00ff0000) >> 8) | \
+ (((x) & 0x0000ff00) << 8) | \
+ (((x) & 0x000000ff) << 24))
+#define B2N_64(x) \
+ x = ((((x) & 0xff00000000000000) >> 56) | \
+ (((x) & 0x00ff000000000000) >> 40) | \
+ (((x) & 0x0000ff0000000000) >> 24) | \
+ (((x) & 0x000000ff00000000) >> 8) | \
+ (((x) & 0x00000000ff000000) << 8) | \
+ (((x) & 0x0000000000ff0000) << 24) | \
+ (((x) & 0x000000000000ff00) << 40) | \
+ (((x) & 0x00000000000000ff) << 56))
#else
diff --git a/dvdread/dvd_input.c b/dvdread/dvd_input.c
index dcd5307862..fa2406f234 100644
--- a/dvdread/dvd_input.c
+++ b/dvdread/dvd_input.c
@@ -1,3 +1,4 @@
+/* -*- c-basic-offset: 2; indent-tabs-mode: nil -*- */
/*
* Copyright (C) 2002 Samuel Hocevar <sam@zoy.org>,
* Håkan Hjort <d95hjort@dtek.chalmers.se>
@@ -212,7 +213,7 @@ static int file_seek(dvd_input_t dev, int blocks)
pos = lseek(dev->fd, pos, SEEK_SET);
if(pos < 0) {
- return pos;
+ return pos;
}
/* assert pos % DVD_VIDEO_LB_LEN == 0 */
return (int) (pos / DVD_VIDEO_LB_LEN);
@@ -234,7 +235,7 @@ static int file_read(dvd_input_t dev, void *buffer, int blocks, int flags)
size_t len;
ssize_t ret;
unsigned char *buf = buffer;
-
+
len = (size_t)blocks * DVD_VIDEO_LB_LEN;
while(len > 0) {
@@ -250,7 +251,7 @@ static int file_read(dvd_input_t dev, void *buffer, int blocks, int flags)
if(ret == 0) {
/* Nothing more to read. Return the whole blocks, if any, that we got.
- and adjust the file possition back to the previous block boundary. */
+ and adjust the file possition back to the previous block boundary. */
size_t bytes = (size_t)blocks * DVD_VIDEO_LB_LEN - len;
off_t over_read = -(bytes % DVD_VIDEO_LB_LEN);
/*off_t pos =*/ lseek(dev->fd, over_read, SEEK_CUR);
@@ -326,7 +327,7 @@ int dvdinput_setup(void)
}
verbose = get_verbose();
-
+
#ifdef HAVE_DVDCSS_DVDCSS_H
/* linking to libdvdcss */
dvdcss_library = &dvdcss_library; /* Give it some value != NULL */
@@ -336,7 +337,7 @@ int dvdinput_setup(void)
#else
dvdcss_library = dlopen("libdvdcss.so.2", RTLD_LAZY);
-
+
if(dvdcss_library != NULL) {
#if defined(__OpenBSD__) && !defined(__ELF__)
#define U_S "_"
@@ -360,37 +361,37 @@ int dvdinput_setup(void)
if(dlsym(dvdcss_library, U_S "dvdcss_crack")) {
if(verbose >= 0) {
- fprintf(stderr,
- "libdvdread: Old (pre-0.0.2) version of libdvdcss found.\n"
- "libdvdread: You should get the latest version from "
- "http://www.videolan.org/\n" );
+ fprintf(stderr,
+ "libdvdread: Old (pre-0.0.2) version of libdvdcss found.\n"
+ "libdvdread: You should get the latest version from "
+ "http://www.videolan.org/\n" );
}
dlclose(dvdcss_library);
dvdcss_library = NULL;
} else if(!DVDcss_open || !DVDcss_close || !DVDcss_title || !DVDcss_seek
- || !DVDcss_read || !DVDcss_error || !dvdcss_version) {
+ || !DVDcss_read || !DVDcss_error || !dvdcss_version) {
if(verbose >= 0) {
- fprintf(stderr, "libdvdread: Missing symbols in libdvdcss.so.2, "
- "this shouldn't happen !\n");
+ fprintf(stderr, "libdvdread: Missing symbols in libdvdcss.so.2, "
+ "this shouldn't happen !\n");
}
dlclose(dvdcss_library);
dvdcss_library = NULL;
}
}
#endif /* HAVE_DVDCSS_DVDCSS_H */
-
+
dvdcss_library_init = 1;
if(dvdcss_library) {
/*
- char *psz_method = getenv( "DVDCSS_METHOD" );
- char *psz_verbose = getenv( "DVDCSS_VERBOSE" );
- fprintf(stderr, "DVDCSS_METHOD %s\n", psz_method);
- fprintf(stderr, "DVDCSS_VERBOSE %s\n", psz_verbose);
+ char *psz_method = getenv( "DVDCSS_METHOD" );
+ char *psz_verbose = getenv( "DVDCSS_VERBOSE" );
+ fprintf(stderr, "DVDCSS_METHOD %s\n", psz_method);
+ fprintf(stderr, "DVDCSS_VERBOSE %s\n", psz_verbose);
*/
if(verbose >= 1) {
- fprintf(stderr, "libdvdread: Using libdvdcss version %s for DVD access\n",
- *dvdcss_version);
+ fprintf(stderr, "libdvdread: Using libdvdcss version %s for DVD access\n",
+ *dvdcss_version);
}
/* libdvdcss wrapper functions */
dvdinput_open = css_open;
@@ -403,7 +404,7 @@ int dvdinput_setup(void)
} else {
if(verbose >= 1) {
- fprintf(stderr, "libdvdread: Encrypted DVD support unavailable.\n");
+ fprintf(stderr, "libdvdread: Encrypted DVD support unavailable.\n");
}
/* libdvdcss replacement functions */
dvdinput_open = file_open;
diff --git a/dvdread/dvd_input.h b/dvdread/dvd_input.h
index 0f05c97952..607619e2d0 100644
--- a/dvdread/dvd_input.h
+++ b/dvdread/dvd_input.h
@@ -1,3 +1,4 @@
+/* -*- c-basic-offset: 2; indent-tabs-mode: nil -*- */
#ifndef DVD_INPUT_H_INCLUDED
#define DVD_INPUT_H_INCLUDED
diff --git a/dvdread/dvd_reader.c b/dvdread/dvd_reader.c
index 92d202b8d9..4ba75e9a4e 100644
--- a/dvdread/dvd_reader.c
+++ b/dvdread/dvd_reader.c
@@ -1,3 +1,4 @@
+/* -*- c-basic-offset: 2; indent-tabs-mode: nil -*- */
/*
* Copyright (C) 2001, 2002, 2003 Billy Biggs <vektor@dumbterm.net>,
* Håkan Hjort <d95hjort@dtek.chalmers.se>,
@@ -36,7 +37,7 @@
#include <limits.h>
#include <dirent.h>
-#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__bsdi__)|| defined(__DARWIN__) || defined(__DragonFly__)
+#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__bsdi__) || defined(__DARWIN__) || defined(__DragonFly__)
#define SYS_BSD 1
#endif
@@ -70,23 +71,23 @@ static void gettimeofday(struct timeval* t,void* timezone){
#define DEFAULT_UDF_CACHE_LEVEL 0
struct dvd_reader_s {
- /* Basic information. */
- int isImageFile;
+ /* Basic information. */
+ int isImageFile;
- /* Hack for keeping track of the css status.
- * 0: no css, 1: perhaps (need init of keys), 2: have done init */
- int css_state;
- int css_title; /* Last title that we have called dvdinpute_title for. */
+ /* Hack for keeping track of the css status.
+ * 0: no css, 1: perhaps (need init of keys), 2: have done init */
+ int css_state;
+ int css_title; /* Last title that we have called dvdinpute_title for. */
- /* Information required for an image file. */
- dvd_input_t dev;
+ /* Information required for an image file. */
+ dvd_input_t dev;
- /* Information required for a directory path drive. */
- char *path_root;
+ /* Information required for a directory path drive. */
+ char *path_root;
- /* Filesystem cache */
- int udfcache_level; /* 0 - turned off, 1 - on */
- void *udfcache;
+ /* Filesystem cache */
+ int udfcache_level; /* 0 - turned off, 1 - on */
+ void *udfcache;
/* block aligned malloc */
void *align;
@@ -96,22 +97,22 @@ struct dvd_reader_s {
};
struct dvd_file_s {
- /* Basic information. */
- dvd_reader_t *dvd;
+ /* Basic information. */
+ dvd_reader_t *dvd;
- /* Hack for selecting the right css title. */
- int css_title;
+ /* Hack for selecting the right css title. */
+ int css_title;
- /* Information required for an image file. */
- uint32_t lb_start;
- uint32_t seek_pos;
+ /* Information required for an image file. */
+ uint32_t lb_start;
+ uint32_t seek_pos;
- /* Information required for a directory path drive. */
- size_t title_sizes[ 9 ];
- dvd_input_t title_devs[ 9 ];
+ /* Information required for a directory path drive. */
+ size_t title_sizes[ 9 ];
+ dvd_input_t title_devs[ 9 ];
- /* Calculated at open-time, size in blocks. */
- ssize_t filesize;
+ /* Calculated at open-time, size in blocks. */
+ ssize_t filesize;
};
@@ -214,84 +215,84 @@ static int gettimeofday( struct timeval *tv, void *tz )
/* Loop over all titles and call dvdcss_title to crack the keys. */
static int initAllCSSKeys( dvd_reader_t *dvd )
{
- struct timeval all_s, all_e;
- struct timeval t_s, t_e;
- char filename[ MAX_UDF_FILE_NAME_LEN ];
- uint32_t start, len;
- int title;
-
- char *nokeys_str = getenv("DVDREAD_NOKEYS");
- if(nokeys_str != NULL)
- return 0;
+ struct timeval all_s, all_e;
+ struct timeval t_s, t_e;
+ char filename[ MAX_UDF_FILE_NAME_LEN ];
+ uint32_t start, len;
+ int title;
+
+ char *nokeys_str = getenv("DVDREAD_NOKEYS");
+ if(nokeys_str != NULL)
+ return 0;
if(dvd->verbose >= 1) {
fprintf( stderr, "\n" );
fprintf( stderr, "libdvdread: Attempting to retrieve all CSS keys\n" );
fprintf( stderr, "libdvdread: This can take a _long_ time, "
- "please be patient\n\n" );
+ "please be patient\n\n" );
}
- gettimeofday(&all_s, NULL);
-
- for( title = 0; title < 100; title++ ) {
- gettimeofday( &t_s, NULL );
- if( title == 0 ) {
- sprintf( filename, "/VIDEO_TS/VIDEO_TS.VOB" );
- } else {
- sprintf( filename, "/VIDEO_TS/VTS_%02d_%d.VOB", title, 0 );
- }
- start = UDFFindFile( dvd, filename, &len );
- if( start != 0 && len != 0 ) {
- /* Perform CSS key cracking for this title. */
+ gettimeofday(&all_s, NULL);
+
+ for( title = 0; title < 100; title++ ) {
+ gettimeofday( &t_s, NULL );
+ if( title == 0 ) {
+ sprintf( filename, "/VIDEO_TS/VIDEO_TS.VOB" );
+ } else {
+ sprintf( filename, "/VIDEO_TS/VTS_%02d_%d.VOB", title, 0 );
+ }
+ start = UDFFindFile( dvd, filename, &len );
+ if( start != 0 && len != 0 ) {
+ /* Perform CSS key cracking for this title. */
if(dvd->verbose >= 1) {
- fprintf( stderr, "libdvdread: Get key for %s at 0x%08x\n",
- filename, start );
+ fprintf( stderr, "libdvdread: Get key for %s at 0x%08x\n",
+ filename, start );
}
- if( dvdinput_title( dvd->dev, (int)start ) < 0 ) {
+ if( dvdinput_title( dvd->dev, (int)start ) < 0 ) {
if(dvd->verbose >= 0) {
- fprintf( stderr, "libdvdread: Error cracking CSS key for %s (0x%08x)\n", filename, start);
- }
+ fprintf( stderr, "libdvdread: Error cracking CSS key for %s (0x%08x)\n", filename, start);
+ }
}
- gettimeofday( &t_e, NULL );
+ gettimeofday( &t_e, NULL );
if(dvd->verbose >= 1) {
- fprintf( stderr, "libdvdread: Elapsed time %ld\n",
- (long int) t_e.tv_sec - t_s.tv_sec );
- }
+ fprintf( stderr, "libdvdread: Elapsed time %ld\n",
+ (long int) t_e.tv_sec - t_s.tv_sec );
+ }
}
-
- if( title == 0 ) continue;
-
- gettimeofday( &t_s, NULL );
- sprintf( filename, "/VIDEO_TS/VTS_%02d_%d.VOB", title, 1 );
- start = UDFFindFile( dvd, filename, &len );
- if( start == 0 || len == 0 ) break;
-
- /* Perform CSS key cracking for this title. */
+
+ if( title == 0 ) continue;
+
+ gettimeofday( &t_s, NULL );
+ sprintf( filename, "/VIDEO_TS/VTS_%02d_%d.VOB", title, 1 );
+ start = UDFFindFile( dvd, filename, &len );
+ if( start == 0 || len == 0 ) break;
+
+ /* Perform CSS key cracking for this title. */
if(dvd->verbose >= 1) {
- fprintf( stderr, "libdvdread: Get key for %s at 0x%08x\n",
- filename, start );
+ fprintf( stderr, "libdvdread: Get key for %s at 0x%08x\n",
+ filename, start );
}
- if( dvdinput_title( dvd->dev, (int)start ) < 0 ) {
+ if( dvdinput_title( dvd->dev, (int)start ) < 0 ) {
if(dvd->verbose >= 0) {
- fprintf( stderr, "libdvdread: Error cracking CSS key for %s (0x%08x)!!\n", filename, start);
- }
+ fprintf( stderr, "libdvdread: Error cracking CSS key for %s (0x%08x)!!\n", filename, start);
+ }
}
- gettimeofday( &t_e, NULL );
+ gettimeofday( &t_e, NULL );
if(dvd->verbose >= 1) {
- fprintf( stderr, "libdvdread: Elapsed time %ld\n",
- (long int) t_e.tv_sec - t_s.tv_sec );
+ fprintf( stderr, "libdvdread: Elapsed time %ld\n",
+ (long int) t_e.tv_sec - t_s.tv_sec );
}
}
- title--;
+ title--;
if(dvd->verbose >= 1) {
fprintf( stderr, "libdvdread: Found %d VTS's\n", title );
}
- gettimeofday(&all_e, NULL);
+ gettimeofday(&all_e, NULL);
if(dvd->verbose >= 1) {
fprintf( stderr, "libdvdread: Elapsed time %ld\n",
- (long int) all_e.tv_sec - all_s.tv_sec );
+ (long int) all_e.tv_sec - all_s.tv_sec );
}
- return 0;
+ return 0;
}
@@ -303,22 +304,22 @@ static int initAllCSSKeys( dvd_reader_t *dvd )
*/
static dvd_reader_t *DVDOpenImageFile( const char *location, int have_css )
{
- dvd_reader_t *dvd;
- dvd_input_t dev;
+ dvd_reader_t *dvd;
+ dvd_input_t dev;
int verbose;
verbose = get_verbose();
-
- dev = dvdinput_open( location );
- if( !dev ) {
+
+ dev = dvdinput_open( location );
+ if( !dev ) {
if(verbose >= 1) {
fprintf( stderr, "libdvdread: Can't open '%s' for reading: %s\n",
location, strerror(errno));
}
return NULL;
- }
+ }
- dvd = (dvd_reader_t *) malloc( sizeof( dvd_reader_t ) );
+ dvd = (dvd_reader_t *) malloc( sizeof( dvd_reader_t ) );
if( !dvd ) {
int tmp_errno = errno;
dvdinput_close(dev);
@@ -326,24 +327,24 @@ static dvd_reader_t *DVDOpenImageFile( const char *location, int have_css )
return NULL;
}
dvd->verbose = verbose;
- dvd->isImageFile = 1;
- dvd->dev = dev;
+ dvd->isImageFile = 1;
+ dvd->dev = dev;
dvd->path_root = NULL;
- dvd->udfcache_level = DEFAULT_UDF_CACHE_LEVEL;
- dvd->udfcache = NULL;
+ dvd->udfcache_level = DEFAULT_UDF_CACHE_LEVEL;
+ dvd->udfcache = NULL;
dvd->align = NULL;
- if( have_css ) {
- /* Only if DVDCSS_METHOD = title, a bit if it's disc or if
- * DVDCSS_METHOD = key but region missmatch. Unfortunaly we
- * don't have that information. */
-
- dvd->css_state = 1; /* Need key init. */
- }
- dvd->css_title = 0;
+ if( have_css ) {
+ /* Only if DVDCSS_METHOD = title, a bit if it's disc or if
+ * DVDCSS_METHOD = key but region missmatch. Unfortunaly we
+ * don't have that information. */
+ dvd->css_state = 1; /* Need key init. */
+ }
+ dvd->css_title = 0;
+
/* sanity check, is it a valid UDF image, can we find the root dir */
if(!UDFFindFile(dvd, "/", NULL)) {
dvdinput_close(dvd->dev);
@@ -358,34 +359,34 @@ static dvd_reader_t *DVDOpenImageFile( const char *location, int have_css )
free(dvd);
return NULL;
}
- return dvd;
+ return dvd;
}
static dvd_reader_t *DVDOpenPath( const char *path_root )
{
- dvd_reader_t *dvd;
+ dvd_reader_t *dvd;
- dvd = (dvd_reader_t *) malloc( sizeof( dvd_reader_t ) );
+ dvd = (dvd_reader_t *) malloc( sizeof( dvd_reader_t ) );
if( !dvd ) {
return NULL;
}
dvd->verbose = get_verbose();
- dvd->isImageFile = 0;
- dvd->dev = 0;
- dvd->path_root = strdup( path_root );
+ dvd->isImageFile = 0;
+ dvd->dev = 0;
+ dvd->path_root = strdup( path_root );
if(!dvd->path_root) {
free(dvd);
return 0;
}
- dvd->udfcache_level = DEFAULT_UDF_CACHE_LEVEL;
- dvd->udfcache = NULL;
-
+ dvd->udfcache_level = DEFAULT_UDF_CACHE_LEVEL;
+ dvd->udfcache = NULL;
+
dvd->align = NULL;
- dvd->css_state = 0; /* Only used in the UDF path */
- dvd->css_title = 0; /* Only matters in the UDF path */
+ dvd->css_state = 0; /* Only used in the UDF path */
+ dvd->css_title = 0; /* Only matters in the UDF path */
- return dvd;
+ return dvd;
}
#if defined(__sun)
@@ -394,19 +395,19 @@ static dvd_reader_t *DVDOpenPath( const char *path_root )
/vol/rdsk/<name> */
static char *sun_block2char( const char *path )
{
- char *new_path;
+ char *new_path;
- /* Must contain "/dsk/" */
- if( !strstr( path, "/dsk/" ) ) return (char *) strdup( path );
+ /* Must contain "/dsk/" */
+ if( !strstr( path, "/dsk/" ) ) return (char *) strdup( path );
- /* Replace "/dsk/" with "/rdsk/" */
- new_path = malloc( strlen(path) + 2 );
- strcpy( new_path, path );
- strcpy( strstr( new_path, "/dsk/" ), "" );
- strcat( new_path, "/rdsk/" );
- strcat( new_path, strstr( path, "/dsk/" ) + strlen( "/dsk/" ) );
+ /* Replace "/dsk/" with "/rdsk/" */
+ new_path = malloc( strlen(path) + 2 );
+ strcpy( new_path, path );
+ strcpy( strstr( new_path, "/dsk/" ), "" );
+ strcat( new_path, "/rdsk/" );
+ strcat( new_path, strstr( path, "/dsk/" ) + strlen( "/dsk/" ) );
- return new_path;
+ return new_path;
}
#endif
@@ -423,26 +424,27 @@ static char *bsd_block2char( const char *path )
}
#else
{
- char *new_path;
+ char *new_path;
- /* If it doesn't start with "/dev/" or does start with "/dev/r" exit */
- if( strncmp( path, "/dev/", 5 ) || !strncmp( path, "/dev/r", 6 ) )
- return (char *) strdup( path );
+ /* If it doesn't start with "/dev/" or does start with "/dev/r" exit */
+ if( strncmp( path, "/dev/", 5 ) || !strncmp( path, "/dev/r", 6 ) )
+ return (char *) strdup( path );
- /* Replace "/dev/" with "/dev/r" */
- new_path = malloc( strlen(path) + 2 );
- strcpy( new_path, "/dev/r" );
- strcat( new_path, path + strlen( "/dev/" ) );
+ /* Replace "/dev/" with "/dev/r" */
+ new_path = malloc( strlen(path) + 2 );
+ strcpy( new_path, "/dev/r" );
+ strcat( new_path, path + strlen( "/dev/" ) );
- return new_path;
+ return new_path;
}
#endif /* __FreeBSD__ */
#endif
+
dvd_reader_t *DVDOpen( const char *path )
{
- struct stat fileinfo;
- int ret, have_css;
+ struct stat fileinfo;
+ int ret, have_css;
char *dev_name = NULL;
int internal_errno = 0;
int verbose;
@@ -455,65 +457,65 @@ dvd_reader_t *DVDOpen( const char *path )
verbose = get_verbose();
#ifdef WIN32
- /* Stat doesn't work on devices under mingwin/cygwin. */
- if( path[0] && path[1] == ':' && path[2] == '\0' )
+ /* Stat doesn't work on devices under mingwin/cygwin. */
+ if( path[0] && path[1] == ':' && path[2] == '\0' )
{
- /* Don't try to stat the file */
- fileinfo.st_mode = S_IFBLK;
+ /* Don't try to stat the file */
+ fileinfo.st_mode = S_IFBLK;
}
- else
+ else
#endif
{
- ret = stat( path, &fileinfo );
- if( ret < 0 ) {
+ ret = stat( path, &fileinfo );
+ if( ret < 0 ) {
int tmp_errno = errno;
- /* If we can't stat the file, give up */
+ /* If we can't stat the file, give up */
if(verbose >= 1) {
fprintf( stderr, "libdvdread: Can't stat '%s': %s\n",
path, strerror(errno));
}
errno = tmp_errno;
return NULL;
- }
+ }
}
- /* Try to open libdvdcss or fall back to standard functions */
- have_css = dvdinput_setup();
+ /* Try to open libdvdcss or fall back to standard functions */
+ have_css = dvdinput_setup();
- /* First check if this is a block/char device or a file*/
- if( S_ISBLK( fileinfo.st_mode ) ||
- S_ISCHR( fileinfo.st_mode ) ||
- S_ISREG( fileinfo.st_mode ) ) {
+ /* First check if this is a block/char device or a file*/
+ if( S_ISBLK( fileinfo.st_mode ) ||
+ S_ISCHR( fileinfo.st_mode ) ||
+ S_ISREG( fileinfo.st_mode ) ) {
- /**
- * Block devices and regular files are assumed to be DVD-Video images.
- */
+ /**
+ * Block devices and regular files are assumed to be DVD-Video images.
+ */
#if defined(__sun)
- return DVDOpenImageFile( sun_block2char( path ), have_css );
+ return DVDOpenImageFile( sun_block2char( path ), have_css );
#elif defined(SYS_BSD)
- return DVDOpenImageFile( bsd_block2char( path ), have_css );
+ return DVDOpenImageFile( bsd_block2char( path ), have_css );
#else
- return DVDOpenImageFile( path, have_css );
+ return DVDOpenImageFile( path, have_css );
#endif
- } else if( S_ISDIR( fileinfo.st_mode ) ) {
- dvd_reader_t *auth_drive = 0;
- char *path_copy;
+ } else if( S_ISDIR( fileinfo.st_mode ) ) {
+ dvd_reader_t *auth_drive = 0;
+ char *path_copy;
#if defined(SYS_BSD)
- struct fstab* fe;
+ struct fstab* fe;
#elif defined(__sun) || defined(__linux__) || defined(__CYGWIN__)
- FILE *mntfile;
+ FILE *mntfile;
#endif
- /* XXX: We should scream real loud here. */
- if( !(path_copy = strdup( path ) ) ) return 0;
+ /* XXX: We should scream real loud here. */
+ if( !(path_copy = strdup( path ) ) ) return 0;
#ifndef WIN32 /* don't have fchdir, and getcwd( NULL, ... ) is strange */
- /* Resolve any symlinks and get the absolut dir name. */
- {
- char *new_path;
+ /* Resolve any symlinks and get the absolut dir name. */
+ {
+ char *new_path;
char *current_path;
-
+
current_path = malloc(PATH_MAX);
if(current_path) {
if(!getcwd(current_path, PATH_MAX)) {
@@ -522,7 +524,7 @@ dvd_reader_t *DVDOpen( const char *path )
}
}
if(current_path) {
- chdir( path_copy );
+ chdir( path_copy );
new_path = malloc(PATH_MAX);
if(new_path) {
if(!getcwd(new_path, PATH_MAX )) {
@@ -533,147 +535,147 @@ dvd_reader_t *DVDOpen( const char *path )
chdir(current_path);
free(current_path);
- if( new_path ) {
- free( path_copy );
- path_copy = new_path;
- }
- }
- }
+ if( new_path ) {
+ free( path_copy );
+ path_copy = new_path;
+ }
+ }
+ }
#endif
-
- /**
- * If we're being asked to open a directory, check if that directory
- * is the mountpoint for a DVD-ROM which we can use instead.
- */
+
+ /**
+ * If we're being asked to open a directory, check if that directory
+ * is the mountpoint for a DVD-ROM which we can use instead.
+ */
- if( strlen( path_copy ) > 1 ) {
+ if( strlen( path_copy ) > 1 ) {
if( path_copy[ strlen( path_copy ) - 1 ] == '/' ) {
- path_copy[ strlen( path_copy ) - 1 ] = '\0';
- }
+ path_copy[ strlen( path_copy ) - 1 ] = '\0';
+ }
}
if( strlen( path_copy ) >= 9 ) {
- if( !strcasecmp( &(path_copy[ strlen( path_copy ) - 9 ]),
- "/video_ts" ) ) {
- path_copy[ strlen( path_copy ) - 9 ] = '\0';
+ if( !strcasecmp( &(path_copy[ strlen( path_copy ) - 9 ]),
+ "/video_ts" ) ) {
+ path_copy[ strlen( path_copy ) - 9 ] = '\0';
if(path_copy[0] == '\0') {
path_copy[0] = '/';
path_copy[1] = '\0';
}
- }
- }
+ }
+ }
#if defined(SYS_BSD)
- if( ( fe = getfsfile( path_copy ) ) ) {
- dev_name = bsd_block2char( fe->fs_spec );
+ if( ( fe = getfsfile( path_copy ) ) ) {
+ dev_name = bsd_block2char( fe->fs_spec );
if(verbose >= 1) {
- fprintf( stderr,
- "libdvdread: Attempting to use device %s"
+ fprintf( stderr,
+ "libdvdread: Attempting to use device %s"
" mounted on %s%s\n",
- dev_name,
+ dev_name,
fe->fs_file,
have_css ? " for CSS authentication" : "");
}
- auth_drive = DVDOpenImageFile( dev_name, have_css );
+ auth_drive = DVDOpenImageFile( dev_name, have_css );
if(!auth_drive) {
internal_errno = errno;
}
- }
+ }
#elif defined(__sun)
- mntfile = fopen( MNTTAB, "r" );
- if( mntfile ) {
- struct mnttab mp;
- int res;
-
- while( ( res = getmntent( mntfile, &mp ) ) != -1 ) {
- if( res == 0 && !strcmp( mp.mnt_mountp, path_copy ) ) {
- dev_name = sun_block2char( mp.mnt_special );
+ mntfile = fopen( MNTTAB, "r" );
+ if( mntfile ) {
+ struct mnttab mp;
+ int res;
+
+ while( ( res = getmntent( mntfile, &mp ) ) != -1 ) {
+ if( res == 0 && !strcmp( mp.mnt_mountp, path_copy ) ) {
+ dev_name = sun_block2char( mp.mnt_special );
if(verbose >= 1) {
- fprintf( stderr,
- "libdvdread: Attempting to use device %s"
+ fprintf( stderr,
+ "libdvdread: Attempting to use device %s"
" mounted on %s%s\n",
- dev_name,
+ dev_name,
mp.mnt_mountp,
have_css ? " for CSS authentication" : "");
}
- auth_drive = DVDOpenImageFile( dev_name, have_css );
+ auth_drive = DVDOpenImageFile( dev_name, have_css );
if(!auth_drive) {
internal_errno = errno;
}
- break;
- }
- }
- fclose( mntfile );
- }
+ break;
+ }
+ }
+ fclose( mntfile );
+ }
#elif defined(__linux__) || defined(__CYGWIN__)
- mntfile = fopen( MOUNTED, "r" );
- if( mntfile ) {
- struct mntent *me;
+ mntfile = fopen( MOUNTED, "r" );
+ if( mntfile ) {
+ struct mntent *me;
- while( ( me = getmntent( mntfile ) ) ) {
- if( !strcmp( me->mnt_dir, path_copy ) ) {
+ while( ( me = getmntent( mntfile ) ) ) {
+ if( !strcmp( me->mnt_dir, path_copy ) ) {
if(verbose >= 1) {
- fprintf( stderr,
- "libdvdread: Attempting to use device %s"
+ fprintf( stderr,
+ "libdvdread: Attempting to use device %s"
" mounted on %s%s\n",
- me->mnt_fsname,
+ me->mnt_fsname,
me->mnt_dir,
have_css ? " for CSS authentication" : "");
}
- auth_drive = DVDOpenImageFile( me->mnt_fsname, have_css );
+ auth_drive = DVDOpenImageFile( me->mnt_fsname, have_css );
if(!auth_drive) {
internal_errno = errno;
}
- dev_name = strdup(me->mnt_fsname);
- break;
- }
- }
- fclose( mntfile );
- }
-#elif defined(__MINGW32__)
- dev_name = strdup(path);
- auth_drive = DVDOpenImageFile( path, have_css );
+ dev_name = strdup(me->mnt_fsname);
+ break;
+ }
+ }
+ fclose( mntfile );
+ }
+#elif defined(__MINGW32__)
+ dev_name = strdup(path);
+ auth_drive = DVDOpenImageFile( path, have_css );
#endif
- if( !dev_name ) {
+ if( !dev_name ) {
if(verbose >= 1) {
- fprintf( stderr, "libdvdread: Couldn't find device name.\n" );
+ fprintf( stderr, "libdvdread: Couldn't find device name.\n" );
}
- } else if( !auth_drive ) {
+ } else if( !auth_drive ) {
if(verbose >= 1) {
fprintf( stderr, "libdvdread: Device %s inaccessible%s: %s\n",
dev_name,
have_css ? ", CSS authentication not available" : "",
strerror(internal_errno));
}
- }
+ }
- free( dev_name );
- free( path_copy );
+ free( dev_name );
+ free( path_copy );
- /**
- * If we've opened a drive, just use that.
- */
+ /**
+ * If we've opened a drive, just use that.
+ */
if( auth_drive ) {
return auth_drive;
}
- /**
- * Otherwise, we now try to open the directory tree instead.
- */
- return DVDOpenPath( path );
- }
+ /**
+ * Otherwise, we now try to open the directory tree instead.
+ */
+ return DVDOpenPa