Improve the port to *BSD and Solaris by a little. This patch is also dropable as it has not really been tried against a recent *BSD.
Signed-off-by: Erik Hovland <[email protected]> --- src/dvd_reader.c | 22 +++++++++++++++------- 1 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/dvd_reader.c b/src/dvd_reader.c index f4be482..dfa695e 100644 --- a/src/dvd_reader.c +++ b/src/dvd_reader.c @@ -317,12 +317,18 @@ static char *sun_block2char( const char *path ) #if defined(SYS_BSD) /* FreeBSD /dev/(r)(a)cd0c (a is for atapi), recommended to _not_ use r + update: FreeBSD and DragonFly no longer uses the prefix so don't add it. OpenBSD /dev/rcd0c, it needs to be the raw device NetBSD /dev/rcd0[d|c|..] d for x86, c (for non x86), perhaps others Darwin /dev/rdisk0, it needs to be the raw device - BSD/OS /dev/sr0c (if not mounted) or /dev/rsr0c ('c' any letter will do) */ + BSD/OS /dev/sr0c (if not mounted) or /dev/rsr0c ('c' any letter will do) + returns a string allocated with strdup. It should be freed when no longer + used. */ static char *bsd_block2char( const char *path ) { +#if defined(__FreeBSD__) || defined(__DragonFly__) + return (char *) strdup( path ); +#else char *new_path; /* If it doesn't start with "/dev/" or does start with "/dev/r" exit */ @@ -335,6 +341,7 @@ static char *bsd_block2char( const char *path ) strcat( new_path, path + strlen( "/dev/" ) ); return new_path; +#endif /* __FreeBSD__ || __DragonFly__ */ } #endif @@ -398,17 +405,18 @@ dvd_reader_t *DVDOpen( const char *ppath ) /** * Block devices and regular files are assumed to be DVD-Video images. */ + dvd_reader_t *dvd = NULL; #if defined(__sun) - ret_val = DVDOpenImageFile( sun_block2char( path ), have_css ); + dev_name = sun_block2char( path ); #elif defined(SYS_BSD) - ret_val = DVDOpenImageFile( bsd_block2char( path ), have_css ); + dev_name = bsd_block2char( path ); #else - ret_val = DVDOpenImageFile( path, have_css ); + dev_name = strdup( path ); #endif - + dvd = DVDOpenImageFile( dev_name, have_css ); + free( dev_name ); free(path); - return ret_val; - + return dvd; } else if( S_ISDIR( fileinfo.st_mode ) ) { dvd_reader_t *auth_drive = 0; char *path_copy; _______________________________________________ DVDnav-discuss mailing list [email protected] https://lists.mplayerhq.hu/mailman/listinfo/dvdnav-discuss
