geting rid of DRIVE_OpenDevice
Eric Pouech
pouech-eric at wanadoo.fr
Sat Nov 22 07:13:41 CST 2003
A+
--
Eric Pouech
-------------- next part --------------
Name: opdrv
ChangeLog: Got rid of DRIVE_OpenDevice, and replaced it with Win32 equivalents
License: X11
GenDate: 2003/11/22 13:05:21 UTC
ModifiedFiles: dlls/kernel/kernel32.spec dlls/winedos/int13.c dlls/winedos/int25.c dlls/winedos/int26.c files/drive.c include/drive.h
===================================================================
RCS file: /home/cvs/cvsroot/wine/wine/dlls/kernel/kernel32.spec,v
retrieving revision 1.119
diff -u -u -r1.119 kernel32.spec
--- dlls/kernel/kernel32.spec 18 Nov 2003 00:06:15 -0000 1.119
+++ dlls/kernel/kernel32.spec 22 Nov 2003 13:01:53 -0000
@@ -1140,14 +1140,13 @@
################################################################
# Wine dll separation hacks, these will go away, don't use them
#
@ cdecl DOSFS_GetDeviceByHandle(long)
@ cdecl DOSMEM_AllocSelector(long)
@ cdecl DOSMEM_Available()
@ cdecl DOSMEM_FreeBlock(ptr)
@ cdecl DOSMEM_GetBlock(long ptr)
@ cdecl DOSMEM_Init(long)
@ cdecl DOSMEM_ResizeBlock(ptr long long)
-@ cdecl DRIVE_OpenDevice(long long)
@ cdecl FILE_Dup2(long long)
@ cdecl LOCAL_Alloc(long long long)
@ cdecl LOCAL_Compact(long long long)
Index: dlls/winedos/int13.c
===================================================================
RCS file: /home/cvs/cvsroot/wine/wine/dlls/winedos/int13.c,v
retrieving revision 1.4
diff -u -u -r1.4 int13.c
--- dlls/winedos/int13.c 15 Nov 2003 00:13:21 -0000 1.4
+++ dlls/winedos/int13.c 22 Nov 2003 12:54:34 -0000
@@ -35,8 +35,8 @@
#endif
#include "dosexe.h"
+#include "wine/server.h"
#include "wine/debug.h"
-#include "drive.h"
WINE_DEFAULT_DEBUG_CHANNEL(int);
@@ -98,7 +98,8 @@
int floppy_fd;
int r;
struct floppy_drive_params floppy_parm;
- char root[] = "A:\\";
+ WCHAR root[] = {'A',':','\\',0}, drive_root[] = {'\\','\\','.','\\','A',':',0};
+ HANDLE h;
TRACE("in [ EDX=%08lx ]\n", context->Edx );
@@ -108,7 +109,7 @@
SET_DH( context, 0 );
for (i = 0; i < MAX_DOS_DRIVES; i++, root[0]++)
- if (GetDriveTypeA(root) == DRIVE_REMOVABLE) nr_of_drives++;
+ if (GetDriveTypeW(root) == DRIVE_REMOVABLE) nr_of_drives++;
SET_DL( context, nr_of_drives );
if (drive_nr > 1) {
@@ -117,15 +118,20 @@
return;
}
- if ( (floppy_fd = DRIVE_OpenDevice( drive_nr, O_RDONLY|O_NONBLOCK)) == -1)
+ drive_root[4] = 'A' + drive_nr;
+ h = CreateFileW(drive_root, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING,
+ FILE_FLAG_BACKUP_SEMANTICS, NULL);
+ if (h == INVALID_HANDLE_VALUE ||
+ wine_server_handle_to_fd(h, GENERIC_READ, &floppy_fd, NULL, NULL))
{
WARN("Can't determine floppy geometry !\n");
INT13_SetStatus( context, 0x07 ); /* drive parameter activity failed */
return;
}
r = ioctl(floppy_fd, FDGETDRVPRM, &floppy_parm);
-
+
close(floppy_fd);
+ CloseHandle(h);
if(r<0)
{
Index: dlls/winedos/int25.c
===================================================================
RCS file: /home/cvs/cvsroot/wine/wine/dlls/winedos/int25.c,v
retrieving revision 1.2
diff -u -u -r1.2 int25.c
--- dlls/winedos/int25.c 15 Nov 2003 00:13:21 -0000 1.2
+++ dlls/winedos/int25.c 22 Nov 2003 13:04:11 -0000
@@ -27,7 +27,6 @@
# include <unistd.h>
#endif
#include "dosexe.h"
-#include "drive.h"
#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(int);
@@ -40,17 +39,22 @@
*/
BOOL DOSVM_RawRead(BYTE drive, DWORD begin, DWORD nr_sect, BYTE *dataptr, BOOL fake_success)
{
- int fd;
+ WCHAR root[] = {'\\','\\','.','\\','A',':',0};
+ HANDLE h;
- if ((fd = DRIVE_OpenDevice( drive, O_RDONLY )) != -1)
+ root[4] += drive;
+ h = CreateFileW(root, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING,
+ FILE_FLAG_BACKUP_SEMANTICS, NULL);
+ if (h != INVALID_HANDLE_VALUE)
{
- lseek( fd, begin * 512, SEEK_SET );
+ SetFilePointer(h, begin * 512, NULL, SEEK_SET );
/* FIXME: check errors */
- read( fd, dataptr, nr_sect * 512 );
- close( fd );
+ ReadFile(h, dataptr, nr_sect * 512, NULL, NULL );
+ CloseHandle(h);
}
else
{
+ if (h != INVALID_HANDLE_VALUE) CloseHandle(h);
memset( dataptr, 0, nr_sect * 512 );
if (fake_success)
{
Index: dlls/winedos/int26.c
===================================================================
RCS file: /home/cvs/cvsroot/wine/wine/dlls/winedos/int26.c,v
retrieving revision 1.2
diff -u -u -r1.2 int26.c
--- dlls/winedos/int26.c 15 Nov 2003 00:13:21 -0000 1.2
+++ dlls/winedos/int26.c 22 Nov 2003 13:00:29 -0000
@@ -26,7 +26,6 @@
# include <unistd.h>
#endif
#include "dosexe.h"
-#include "drive.h"
#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(int);
@@ -39,14 +38,18 @@
*/
BOOL DOSVM_RawWrite(BYTE drive, DWORD begin, DWORD nr_sect, BYTE *dataptr, BOOL fake_success)
{
- int fd;
+ WCHAR root[] = {'\\','\\','.','\\','A',':',0};
+ HANDLE h;
- if ((fd = DRIVE_OpenDevice( drive, O_RDONLY )) != -1)
+ root[4] += drive;
+ h = CreateFileW(root, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_EXISTING,
+ 0, NULL);
+ if (h != INVALID_HANDLE_VALUE)
{
- lseek( fd, begin * 512, SEEK_SET );
+ SetFilePointer(h, begin * 512, NULL, SEEK_SET );
/* FIXME: check errors */
- write( fd, dataptr, nr_sect * 512 );
- close( fd );
+ WriteFile( h, dataptr, nr_sect * 512, NULL, NULL );
+ CloseHandle( h );
}
else if (!fake_success)
return FALSE;
Index: files/drive.c
===================================================================
RCS file: /home/cvs/cvsroot/wine/wine/files/drive.c,v
retrieving revision 1.102
diff -u -u -r1.102 drive.c
--- files/drive.c 15 Nov 2003 00:13:21 -0000 1.102
+++ files/drive.c 22 Nov 2003 13:01:38 -0000
@@ -1366,18 +1046,6 @@
/***********************************************************************
- * DRIVE_OpenDevice
- *
- * Open the drive raw device and return a Unix fd (or -1 on error).
- */
-int DRIVE_OpenDevice( int drive, int flags )
-{
- if (!DRIVE_IsValid( drive )) return -1;
- return open( DOSDrives[drive].device, flags );
-}
-
-
-/***********************************************************************
* DRIVE_GetFreeSpace
*/
static int DRIVE_GetFreeSpace( int drive, PULARGE_INTEGER size,
Index: include/drive.h
===================================================================
RCS file: /home/cvs/cvsroot/wine/wine/include/drive.h,v
retrieving revision 1.15
diff -u -u -r1.15 drive.h
--- include/drive.h 14 Nov 2003 04:54:40 -0000 1.15
+++ include/drive.h 22 Nov 2003 13:01:22 -0000
@@ -44,14 +44,13 @@
extern LPCWSTR DRIVE_GetDosCwd( int drive );
extern const char * DRIVE_GetUnixCwd( int drive );
extern const char * DRIVE_GetDevice( int drive );
extern LPCWSTR DRIVE_GetLabel( int drive );
extern DWORD DRIVE_GetSerialNumber( int drive );
extern int DRIVE_SetSerialNumber( int drive, DWORD serial );
extern UINT DRIVE_GetFlags( int drive );
extern int DRIVE_Chdir( int drive, LPCWSTR path );
extern int DRIVE_Disable( int drive );
extern int DRIVE_Enable( int drive );
-extern int DRIVE_OpenDevice( int drive, int flags );
extern WCHAR *DRIVE_BuildEnv(void);
#endif /* __WINE_DRIVE_H */
More information about the wine-patches
mailing list