Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
01def427
Commit
01def427
authored
Oct 08, 2003
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Pass the cdrom device path in CDROM_InitRegistry so that ntdll doesn't
need to call DRIVE_GetDevice. Get rid of GetDriveType calls.
parent
7f77f0f1
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
26 additions
and
55 deletions
+26
-55
cdrom.c
dlls/ntdll/cdrom.c
+7
-10
file.c
dlls/ntdll/file.c
+16
-42
drive.c
files/drive.c
+3
-3
No files found.
dlls/ntdll/cdrom.c
View file @
01def427
...
...
@@ -83,8 +83,6 @@
#include "ntddstor.h"
#include "ntddcdrm.h"
#include "ntddscsi.h"
#include "drive.h"
#include "file.h"
#include "wine/debug.h"
/* Non-Linux systems do not have linux/cdrom.h and the like, and thus
...
...
@@ -189,6 +187,7 @@ struct cdrom_cache {
char
toc_good
;
/* if false, will reread TOC from disk */
CDROM_TOC
toc
;
SUB_Q_CURRENT_POSITION
CurrentPosition
;
const
char
*
device
;
};
static
struct
cdrom_cache
cdrom_cache
[
26
];
...
...
@@ -450,7 +449,7 @@ static int CDROM_GetInterfaceInfo(int fd, int* port, int* iface, int* device,int
* NOTE: programs usually read these registry entries after sending the
* IOCTL_SCSI_GET_ADDRESS ioctl to the cdrom
*/
void
CDROM_InitRegistry
(
int
fd
)
void
CDROM_InitRegistry
(
int
fd
,
int
device_id
,
const
char
*
device
)
{
int
portnum
,
busid
,
targetid
,
lun
;
OBJECT_ATTRIBUTES
attr
;
...
...
@@ -466,6 +465,8 @@ void CDROM_InitRegistry(int fd)
HKEY
targetKey
;
DWORD
disp
;
cdrom_cache
[
device_id
].
device
=
device
;
attr
.
Length
=
sizeof
(
attr
);
attr
.
RootDirectory
=
0
;
attr
.
ObjectName
=
&
nameW
;
...
...
@@ -590,18 +591,14 @@ static NTSTATUS CDROM_Open(HANDLE hDevice, DWORD clientID, int* dev)
if
(
!
cdrom_cache
[
*
dev
].
count
)
{
char
root
[
4
];
const
char
*
device
;
strcpy
(
root
,
"A:
\\
"
);
root
[
0
]
+=
*
dev
;
if
(
GetDriveTypeA
(
root
)
!=
DRIVE_CDROM
)
return
STATUS_NO_SUCH_DEVICE
;
if
(
!
(
device
=
DRIVE_GetDevice
(
*
dev
)))
return
STATUS_NO_SUCH_DEVICE
;
if
(
!
(
device
=
cdrom_cache
[
*
dev
].
device
))
return
STATUS_NO_SUCH_DEVICE
;
cdrom_cache
[
*
dev
].
fd
=
open
(
device
,
O_RDONLY
|
O_NONBLOCK
);
if
(
cdrom_cache
[
*
dev
].
fd
==
-
1
)
{
FIXME
(
"Can't open configured CD-ROM drive
at %s (device %s): %s
\n
"
,
root
,
DRIVE_GetDevice
(
*
dev
)
,
strerror
(
errno
));
FIXME
(
"Can't open configured CD-ROM drive
%c: (device %s): %s
\n
"
,
'A'
+
*
dev
,
device
,
strerror
(
errno
));
return
STATUS_NO_SUCH_DEVICE
;
}
}
...
...
dlls/ntdll/file.c
View file @
01def427
...
...
@@ -38,7 +38,6 @@
#include "wine/server.h"
#include "async.h"
#include "ntdll_misc.h"
#include "file.h"
/* FIXME */
#include "../files/smb.h"
#include "winternl.h"
...
...
@@ -74,8 +73,6 @@ NTSTATUS WINAPI NtOpenFile(
{
LPWSTR
filename
;
static
const
WCHAR
szDosDevices
[]
=
{
'\\'
,
'D'
,
'o'
,
's'
,
'D'
,
'e'
,
'v'
,
'i'
,
'c'
,
'e'
,
's'
,
'\\'
,
0
};
DOS_FULL_NAME
full_name
;
NTSTATUS
r
;
FIXME
(
"(%p,0x%08lx,%p,%p,0x%08lx,0x%08lx) partial stub
\n
"
,
FileHandle
,
DesiredAccess
,
ObjectAttributes
,
...
...
@@ -97,28 +94,10 @@ NTSTATUS WINAPI NtOpenFile(
return
STATUS_OBJECT_NAME_NOT_FOUND
;
/* FIXME: this calls SetLastError() -> bad */
if
(
!
DOSFS_GetFullName
(
&
filename
[
strlenW
(
szDosDevices
)],
TRUE
,
&
full_name
))
return
STATUS_OBJECT_NAME_NOT_FOUND
;
/* FIXME: modify server protocol so
create file takes an OBJECT_ATTRIBUTES structure */
SERVER_START_REQ
(
create_file
)
{
req
->
access
=
DesiredAccess
;
req
->
inherit
=
0
;
req
->
sharing
=
ShareAccess
;
req
->
create
=
OPEN_EXISTING
;
req
->
attrs
=
0
;
req
->
drive_type
=
GetDriveTypeW
(
full_name
.
short_name
);
wine_server_add_data
(
req
,
full_name
.
long_name
,
strlen
(
full_name
.
long_name
)
);
SetLastError
(
0
);
r
=
wine_server_call
(
req
);
*
FileHandle
=
reply
->
handle
;
}
SERVER_END_REQ
;
return
r
;
*
FileHandle
=
CreateFileW
(
&
filename
[
strlenW
(
szDosDevices
)],
DesiredAccess
,
ShareAccess
,
NULL
,
OPEN_EXISTING
,
0
,
0
);
if
(
*
FileHandle
==
INVALID_HANDLE_VALUE
)
return
STATUS_OBJECT_NAME_NOT_FOUND
;
return
STATUS_SUCCESS
;
}
/**************************************************************************
...
...
@@ -683,7 +662,6 @@ NTSTATUS WINAPI NtDeviceIoControlFile(HANDLE DeviceHandle, HANDLE hEvent,
ULONG
OutputBufferSize
)
{
DWORD
clientID
=
0
;
char
str
[
3
];
TRACE
(
"(%p,%p,%p,%p,%p,0x%08lx,%p,0x%08lx,%p,0x%08lx)
\n
"
,
DeviceHandle
,
hEvent
,
UserApcRoutine
,
UserApcContext
,
...
...
@@ -699,24 +677,20 @@ NTSTATUS WINAPI NtDeviceIoControlFile(HANDLE DeviceHandle, HANDLE hEvent,
SERVER_END_REQ
;
if
(
!
clientID
)
return
STATUS_INVALID_PARAMETER
;
strcpy
(
str
,
"A:"
);
str
[
0
]
+=
LOBYTE
(
clientID
);
/* FIXME: should use the NTDLL equivalent */
if
(
GetDriveTypeA
(
str
)
==
DRIVE_CDROM
)
if
(
CDROM_DeviceIoControl
(
clientID
,
DeviceHandle
,
hEvent
,
UserApcRoutine
,
UserApcContext
,
IoStatusBlock
,
IoControlCode
,
InputBuffer
,
InputBufferSize
,
OutputBuffer
,
OutputBufferSize
)
==
STATUS_NO_SUCH_DEVICE
)
{
return
CDROM_DeviceIoControl
(
clientID
,
DeviceHandle
,
hEvent
,
UserApcRoutine
,
UserApcContext
,
IoStatusBlock
,
IoControlCode
,
InputBuffer
,
InputBufferSize
,
OutputBuffer
,
OutputBufferSize
);
/* it wasn't a CDROM */
FIXME
(
"Unimplemented dwIoControlCode=%08lx
\n
"
,
IoControlCode
);
IoStatusBlock
->
u
.
Status
=
STATUS_NOT_IMPLEMENTED
;
IoStatusBlock
->
Information
=
0
;
if
(
hEvent
)
NtSetEvent
(
hEvent
,
NULL
);
}
FIXME
(
"Unimplemented dwIoControlCode=%08lx
\n
"
,
IoControlCode
);
IoStatusBlock
->
u
.
Status
=
STATUS_NOT_IMPLEMENTED
;
IoStatusBlock
->
Information
=
0
;
if
(
hEvent
)
NtSetEvent
(
hEvent
,
NULL
);
return
STATUS_NOT_IMPLEMENTED
;
return
IoStatusBlock
->
u
.
Status
;
}
/******************************************************************************
...
...
files/drive.c
View file @
01def427
...
...
@@ -144,7 +144,7 @@ inline static char *heap_strdup( const char *str )
#define IS_OPTION_TRUE(ch) ((ch) == 'y' || (ch) == 'Y' || (ch) == 't' || (ch) == 'T' || (ch) == '1')
extern
void
CDROM_InitRegistry
(
int
dev
);
extern
void
CDROM_InitRegistry
(
int
dev
,
int
id
,
const
char
*
device
);
/***********************************************************************
* DRIVE_GetDriveType
...
...
@@ -329,7 +329,7 @@ int DRIVE_Init(void)
if
(
!
NtQueryValueKey
(
hkey
,
&
nameW
,
KeyValuePartialInformation
,
tmp
,
sizeof
(
tmp
),
&
dummy
))
{
WCHAR
*
data
=
(
WCHAR
*
)((
KEY_VALUE_PARTIAL_INFORMATION
*
)
tmp
)
->
Data
;
len
=
WideCharToMultiByte
(
CP_ACP
,
0
,
data
,
-
1
,
NULL
,
0
,
NULL
,
NULL
);
len
=
WideCharToMultiByte
(
drive
->
codepage
,
0
,
data
,
-
1
,
NULL
,
0
,
NULL
,
NULL
);
drive
->
device
=
HeapAlloc
(
GetProcessHeap
(),
0
,
len
);
WideCharToMultiByte
(
drive
->
codepage
,
0
,
data
,
-
1
,
drive
->
device
,
len
,
NULL
,
NULL
);
...
...
@@ -346,7 +346,7 @@ int DRIVE_Init(void)
int
cd_fd
;
if
((
cd_fd
=
open
(
drive
->
device
,
O_RDONLY
|
O_NONBLOCK
))
!=
-
1
)
{
CDROM_InitRegistry
(
cd_fd
);
CDROM_InitRegistry
(
cd_fd
,
i
,
drive
->
device
);
close
(
cd_fd
);
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment