$NetBSD: patch-aa,v 1.3 2005/09/06 08:11:00 abs 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 <unistd.h>
 #include <ctype.h>
 #include <sys/stat.h>
-#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 <sys/param.h>  
+#define USE_GETMNTINFO
+#if !defined(__NetBSD__) || (__NetBSD_Version__ < 299000900)
 #include <sys/mount.h>
+#define USE_STATFS_FOR_DEV
+#define GETMNTINFO_USES_STATFS
+#else
+#include <sys/statvfs.h>
+#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)
