changeset 22506:72fbf66a9429

add vcd:// for win32, patch by zuxy meng split up into the following commits r22523, r22524, r22526
author compn
date Mon, 12 Mar 2007 15:48:13 +0000
parents 0ceb7442ae2b
children a46ab26b2d5e
files stream/stream_vcd.c
diffstat 1 files changed, 25 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/stream/stream_vcd.c	Mon Mar 12 15:46:38 2007 +0000
+++ b/stream/stream_vcd.c	Mon Mar 12 15:48:13 2007 +0000
@@ -1,6 +1,10 @@
 
 #include "config.h"
 
+#ifdef WIN32
+#include <windows.h>
+#endif
+
 #include "mp_msg.h"
 #include "stream.h"
 #include "help_mp.h"
@@ -10,7 +14,9 @@
 #include <fcntl.h>
 #include <stdlib.h>
 #include <unistd.h>
+#ifndef WIN32
 #include <sys/ioctl.h>
+#endif
 #include <errno.h>
 
 #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__)
@@ -20,6 +26,8 @@
 #include "vcd_read_nbsd.h"
 #elif defined(SYS_DARWIN)
 #include "vcd_read_darwin.h" 
+#elif defined(WIN32)
+#include "vcd_read_win32.h"
 #else
 #include "vcd_read.h"
 #endif
@@ -76,8 +84,16 @@
 #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
   int bsize = VCD_SECTOR_SIZE;
 #endif
+#ifdef WIN32
+  HANDLE hd;
+  char device[] = "\\\\.\\?:";
+#endif
 
-  if(mode != STREAM_READ) {
+  if(mode != STREAM_READ
+#ifdef WIN32
+      || GetVersion() > 0x80000000 // Win9x
+#endif
+      ) {
     m_struct_free(&stream_opts,opts);
     return STREAM_UNSUPORTED;
   }
@@ -89,7 +105,15 @@
       p->device = strdup(DEFAULT_CDROM_DEVICE);
   }
 
+#ifdef WIN32
+  device[4] = p->device[0];
+  /* open() can't be used for devices so do it the complicated way */
+  hd = CreateFile(device, GENERIC_READ, FILE_SHARE_READ, NULL,
+	  OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL);
+  f = _open_osfhandle((long)hd, _O_RDONLY);
+#else
   f=open(p->device,O_RDONLY);
+#endif
   if(f<0){ 
     mp_msg(MSGT_OPEN,MSGL_ERR,MSGTR_CdDevNotfound,p->device);
     m_struct_free(&stream_opts,opts);