$NetBSD: patch-aa,v 1.2 2004/04/22 15:28:47 drochner Exp $ --- dvd.c.orig 2004-03-26 19:53:10.000000000 +0100 +++ dvd.c 2004-04-22 16:27:45.000000000 +0200 @@ -23,9 +23,18 @@ #include #include #include -#if (defined(__unix__) || defined(unix)) && !defined(USG) || (defined(__APPLE__) && defined(__GNUC__)) +#if (defined(__unix__) || defined(unix)) && !defined(USG) || (defined(__APPLE__) && defined(__GNUC__)) || defined(__NetBSD__) #include +#define USE_GETMNTINFO +#if !defined(__NetBSD__) || (__NetBSD_Version__ < 200040000) #include +#define USE_STATFS_FOR_DEV +#define GETMNTINFO_USES_STATFS +#else +#include +#define USE_STATVFS_FOR_DEV +#define GETMNTINFO_USES_STATVFS +#endif #endif #include "vobcopy.h" #if (defined(__sun__)) @@ -61,9 +70,10 @@ int filehandle = 0; int i = 0, last = 0; int bytes_read; + char help[2048]; /* open the device */ - if ( !(filehandle = open(device, O_RDONLY)) ) + if ( !(filehandle = open(device, O_RDONLY, 0)) ) { /* open failed */ fprintf( stderr, "[Error] something wrong in dvd_name getting - please specify path as /cdrom or /dvd (mount point) or use -t\n"); @@ -72,7 +82,7 @@ } /* seek to title of first track, which is at (track_no * 32768) + 40 */ - if ( 32808 != lseek( filehandle, 32808, SEEK_SET ) ) + if ( 32768 != lseek( filehandle, 32768, SEEK_SET ) ) { /* seek failed */ close( filehandle ); @@ -82,13 +92,15 @@ } /* read title */ - if ( (bytes_read = read(filehandle, title, 32)) != 32) + if ( (bytes_read = read(filehandle, help, 2048)) != 2048) { close(filehandle); fprintf( stderr, "[Error] something wrong in dvd_name getting - please specify path as /cdrom or /dvd (mount point) or use -t\n" ); - fprintf(stderr, "[Error] only read %d bytes instead of 32\n", bytes_read); + fprintf(stderr, "[Error] only read %d bytes instead of 2048\n", bytes_read); return -1; } + + memcpy(title, help + 40, 32); /* make sure string is terminated */ title[32] = '\0'; @@ -138,9 +150,12 @@ char *k; bool mounted = FALSE; int mntcheck; -#if ( defined( BSD ) && ( BSD >= 199306 ) ) || ( defined( __APPLE__ ) && defined( __GNUC__ ) ) +#ifdef USE_STATFS_FOR_DEV struct statfs buf; #endif +#ifdef USE_STATVFS_FOR_DEV + struct statvfs buf; +#endif /* the string should have no trailing / */ @@ -166,12 +181,19 @@ /* *look through /etc/mtab to see if it's actually mounted */ -#if ( defined( BSD ) && ( BSD >= 199306 ) ) || ( defined( __APPLE__ ) && defined( __GNUC__ ) ) +#if defined(USE_STATFS_FOR_DEV) || defined(USE_STATVFS_FOR_DEV) +#ifdef USE_STATFS_FOR_DEV if( !statfs( path, &buf ) ) +#else + if( !statvfs( path, &buf ) ) +#endif { if( !strcmp( path, buf.f_mntonname ) ) { mounted = TRUE; + strcpy(device, "/dev/r"); + strcat(device, buf.f_mntfromname + 5); + return mounted; } } else @@ -366,9 +388,13 @@ /* returns <0 if error */ int get_device_oyo( char *path, char *device ) { /*oyo*/ -#if (defined(BSD) && (BSD >= 199306)) || (defined(__APPLE__) && defined(__GNUC__)) +#ifdef USE_GETMNTINFO int i, n, dvd_count = 0; +#ifdef GETMNTINFO_USES_STATFS struct statfs *mntbuf; +#else + struct statvfs *mntbuf; +#endif if( ( n = getmntinfo( &mntbuf, MNT_WAIT ) ) > 0 ) { @@ -378,7 +404,8 @@ { dvd_count++; strcpy( path, mntbuf[i].f_mntonname ); - strcpy( device, mntbuf[i].f_mntfromname ); + strcpy(device, "/dev/r"); + strcat(device, mntbuf[i].f_mntfromname + 5); } } if(dvd_count == 0)