Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
wine
Manage
Activity
Members
Labels
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container Registry
Model registry
Operate
Terraform modules
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Jason Beetham
wine
Commits
4f81c3ea
Commit
4f81c3ea
authored
25 years ago
by
Eric Pouech
Committed by
Alexandre Julliard
25 years ago
Browse files
Options
Downloads
Patches
Plain Diff
Replaced Wine specific DRIVER_GetType by a correct implementation of
GetDriverFlag.
parent
7be462dd
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
dlls/winmm/lolvldrv.c
+1
-1
1 addition, 1 deletion
dlls/winmm/lolvldrv.c
dlls/winmm/mci.c
+8
-8
8 additions, 8 deletions
dlls/winmm/mci.c
include/driver.h
+6
-41
6 additions, 41 deletions
include/driver.h
windows/driver.c
+66
-52
66 additions, 52 deletions
windows/driver.c
with
81 additions
and
102 deletions
dlls/winmm/lolvldrv.c
+
1
−
1
View file @
4f81c3ea
...
...
@@ -2249,7 +2249,7 @@ static BOOL MMDRV_Install(LPCSTR name, int num, BOOL bIsMapper)
{ lpDrv->parts[_w].u.fnMessage##_y = func; count++; \
TRACE("Got %d bit func '%s'\n", _y, #_x); }
if
((
DRIVER_GetType
(
lpDrv
->
hDrvr
)
&
WINE_
DI_TYPE_MASK
)
==
WINE_DI_TYPE_32
)
{
if
((
GetDriverFlags
(
lpDrv
->
hDrvr
)
&
(
WINE_
GDF_EXIST
|
WINE_GDF_16BIT
))
==
WINE_GDF_EXIST
)
{
WINEMM_msgFunc32
func
;
lpDrv
->
bIs32
=
TRUE
;
...
...
This diff is collapsed.
Click to expand it.
dlls/winmm/mci.c
+
8
−
8
View file @
4f81c3ea
...
...
@@ -1920,8 +1920,8 @@ DWORD MCI_SendCommandFrom32(UINT wDevID, UINT16 wMsg, DWORD dwParam1, DWORD dwPa
if
(
!
wmd
)
{
dwRet
=
MCIERR_INVALID_DEVICE_ID
;
}
else
{
switch
(
DRIVER_GetType
(
wmd
->
hDrv
))
{
case
WINE_
DI_TYPE_16
:
switch
(
GetDriverFlags
(
wmd
->
hDrv
)
&
(
WINE_GDF_EXIST
|
WINE_GDF_16BIT
))
{
case
WINE_
GDF_EXIST
|
WINE_GDF_16BIT
:
{
MCI_MapType
res
;
...
...
@@ -1946,11 +1946,11 @@ DWORD MCI_SendCommandFrom32(UINT wDevID, UINT16 wMsg, DWORD dwParam1, DWORD dwPa
}
}
break
;
case
WINE_
DI_TYPE_32
:
case
WINE_
GDF_EXIST
:
dwRet
=
SendDriverMessage
(
wmd
->
hDrv
,
wMsg
,
dwParam1
,
dwParam2
);
break
;
default:
WARN
(
"Unknown driver
type=
%u
\n
"
,
DRIVER_GetType
(
wmd
->
hDrv
)
)
;
WARN
(
"Unknown driver %u
\n
"
,
wmd
->
hDrv
);
dwRet
=
MCIERR_DRIVER_INTERNAL
;
}
}
...
...
@@ -1970,11 +1970,11 @@ DWORD MCI_SendCommandFrom16(UINT wDevID, UINT16 wMsg, DWORD dwParam1, DWORD dwPa
}
else
{
MCI_MapType
res
;
switch
(
DRIVER_GetType
(
wmd
->
hDrv
))
{
case
WINE_
DI_TYPE_16
:
switch
(
GetDriverFlags
(
wmd
->
hDrv
)
&
(
WINE_GDF_EXIST
|
WINE_GDF_16BIT
))
{
case
WINE_
GDF_EXIST
|
WINE_GDF_16BIT
:
dwRet
=
SendDriverMessage16
(
wmd
->
hDrv
,
wMsg
,
dwParam1
,
dwParam2
);
break
;
case
WINE_
DI_TYPE_32
:
case
WINE_
GDF_EXIST
:
switch
(
res
=
MCI_MapMsg16To32A
(
wmd
->
wType
,
wMsg
,
&
dwParam2
))
{
case
MCI_MAP_MSGERROR
:
TRACE
(
"Not handled yet (%s)
\n
"
,
MCI_MessageToString
(
wMsg
));
...
...
@@ -1996,7 +1996,7 @@ DWORD MCI_SendCommandFrom16(UINT wDevID, UINT16 wMsg, DWORD dwParam1, DWORD dwPa
}
break
;
default:
WARN
(
"Unknown driver
type=
%u
\n
"
,
DRIVER_GetType
(
wmd
->
hDrv
)
)
;
WARN
(
"Unknown driver %u
\n
"
,
wmd
->
hDrv
);
dwRet
=
MCIERR_DRIVER_INTERNAL
;
}
}
...
...
This diff is collapsed.
Click to expand it.
include/driver.h
+
6
−
41
View file @
4f81c3ea
...
...
@@ -88,48 +88,13 @@ HMODULE WINAPI GetDriverModuleHandle(HDRVR hDriver);
HDRVR16
WINAPI
GetNextDriver16
(
HDRVR16
,
DWORD
);
BOOL16
WINAPI
GetDriverInfo16
(
HDRVR16
,
DRIVERINFOSTRUCT16
*
);
DWORD
WINAPI
GetDriverFlags
(
HDRVR
hDriver
);
#ifdef __WINE__
/* The following definitions are WINE internals */
/* FIXME: This is a WINE internal struct and should be moved in include/wine directory
* Please note that WINE shares 16 and 32 bit drivers on a single list...
* Basically, we maintain an external double view on drivers, so that a 16 bit drivers
* can be loaded/used... by 32 functions transparently
/* this call (GetDriverFlags) is not documented, nor the flags returned.
* here are Wine only definitions
*/
/* Who said goofy boy ? */
#define WINE_DI_MAGIC 0x900F1B01
typedef
struct
tagWINE_DRIVER
{
DWORD
dwMagic
;
char
szAliasName
[
128
];
/* as usual LPWINE_DRIVER == hDriver32 */
HDRVR16
hDriver16
;
union
{
struct
{
HMODULE16
hModule
;
DRIVERPROC16
lpDrvProc
;
}
d16
;
struct
{
HMODULE
hModule
;
DRIVERPROC
lpDrvProc
;
}
d32
;
}
d
;
DWORD
dwDriverID
;
DWORD
dwFlags
;
struct
tagWINE_DRIVER
*
lpPrevItem
;
struct
tagWINE_DRIVER
*
lpNextItem
;
}
WINE_DRIVER
,
*
LPWINE_DRIVER
;
/* values for dwFlags */
#define WINE_DI_TYPE_MASK 0x00000007ul
#define WINE_DI_TYPE_16 0x00000001ul
#define WINE_DI_TYPE_32 0x00000002ul
LPWINE_DRIVER
DRIVER_RegisterDriver16
(
LPCSTR
,
HMODULE16
,
DRIVERPROC16
,
LPARAM
,
BOOL
);
LPWINE_DRIVER
DRIVER_RegisterDriver32
(
LPCSTR
,
HMODULE
,
DRIVERPROC
,
LPARAM
,
BOOL
);
int
DRIVER_GetType
(
HDRVR
);
#endif
/* __WINE__ */
#define WINE_GDF_EXIST 0x80000000
#define WINE_GDF_16BIT 0x10000000
#endif
#endif
/* __WINE_DRIVER_H */
This diff is collapsed.
Click to expand it.
windows/driver.c
+
66
−
52
View file @
4f81c3ea
...
...
@@ -19,13 +19,47 @@
DEFAULT_DEBUG_CHANNEL
(
driver
)
/* The following definitions are WINE internals */
/* FIXME: This is a WINE internal struct and should be moved in include/wine directory
* Please note that WINE shares 16 and 32 bit drivers on a single list...
* Basically, we maintain an external double view on drivers, so that a 16 bit drivers
* can be loaded/used... by 32 functions transparently
*/
/* Who said goofy boy ? */
#define WINE_DI_MAGIC 0x900F1B01
typedef
struct
tagWINE_DRIVER
{
DWORD
dwMagic
;
char
szAliasName
[
128
];
/* as usual LPWINE_DRIVER == hDriver32 */
HDRVR16
hDriver16
;
union
{
struct
{
HMODULE16
hModule
;
DRIVERPROC16
lpDrvProc
;
}
d16
;
struct
{
HMODULE
hModule
;
DRIVERPROC
lpDrvProc
;
}
d32
;
}
d
;
DWORD
dwDriverID
;
DWORD
dwFlags
;
struct
tagWINE_DRIVER
*
lpPrevItem
;
struct
tagWINE_DRIVER
*
lpNextItem
;
}
WINE_DRIVER
,
*
LPWINE_DRIVER
;
LPWINE_DRIVER
DRIVER_RegisterDriver16
(
LPCSTR
,
HMODULE16
,
DRIVERPROC16
,
LPARAM
,
BOOL
);
LPWINE_DRIVER
DRIVER_RegisterDriver32
(
LPCSTR
,
HMODULE
,
DRIVERPROC
,
LPARAM
,
BOOL
);
static
LPWINE_DRIVER
lpDrvItemList
=
NULL
;
/* TODO list :
* - LoadModule count and clean up is not handled correctly (it's not a
* problem as long as FreeLibrary is not working correctly)
* - shoudln't the allocations be done on a per process basis ?
* - get rid of external function "int DRIVER_GetType(HDRVR hDrvr)"
* - split 16/32 bit functions between DLLs as windows do (16 bit in USER, 32 bit in WINMM)
*/
...
...
@@ -63,23 +97,16 @@ static void WINE_UNUSED DRIVER_LoadStartupDrivers(void)
static
WORD
DRIVER_GetNumberOfModuleRefs
(
LPWINE_DRIVER
lpNewDrv
)
{
LPWINE_DRIVER
lpDrv
;
DWORD
type
=
lpNewDrv
->
dwFlags
&
WINE_DI_TYPE_MASK
;
WORD
count
=
0
;
for
(
lpDrv
=
lpDrvItemList
;
lpDrv
;
lpDrv
=
lpDrv
->
lpNextItem
)
{
if
((
lpDrv
->
dwFlags
&
WINE_DI_TYPE_MASK
)
==
type
)
{
switch
(
type
)
{
case
WINE_DI_TYPE_16
:
if
(
lpDrv
->
d
.
d16
.
hModule
==
lpNewDrv
->
d
.
d16
.
hModule
)
count
++
;
break
;
case
WINE_DI_TYPE_32
:
if
(
lpDrv
->
d
.
d32
.
hModule
==
lpNewDrv
->
d
.
d32
.
hModule
)
count
++
;
break
;
default:
FIXME
(
"Unsupported driver type: %ld
\n
"
,
type
);
break
;
if
(
lpDrv
->
dwFlags
&
WINE_GDF_16BIT
)
{
if
(
lpDrv
->
d
.
d16
.
hModule
==
lpNewDrv
->
d
.
d16
.
hModule
)
{
count
++
;
}
}
else
{
if
(
lpDrv
->
d
.
d32
.
hModule
==
lpNewDrv
->
d
.
d32
.
hModule
)
{
count
++
;
}
}
}
...
...
@@ -117,18 +144,6 @@ static LPWINE_DRIVER DRIVER_FindFromHDrvr(HDRVR hDrvr)
return
DRIVER_FindFromHDrvr16
(
hDrvr
);
}
/**************************************************************************
* DRIVER_GetType [internal]
*
* From a hDrvr (being 16 or 32 bits), returns TRUE the flags for the driver.
*/
int
DRIVER_GetType
(
HDRVR
hDrvr
)
{
LPWINE_DRIVER
lpDrv
=
DRIVER_FindFromHDrvr
(
hDrvr
);
return
(
lpDrv
)
?
(
lpDrv
->
dwFlags
&
WINE_DI_TYPE_MASK
)
:
0
;
}
/**************************************************************************
* DRIVER_MapMsg16To32 [internal]
*
...
...
@@ -475,14 +490,12 @@ LRESULT WINAPI SendDriverMessage16(HDRVR16 hDriver, UINT16 msg, LPARAM lParam1,
lpDrv
=
DRIVER_FindFromHDrvr16
(
hDriver
);
if
(
lpDrv
!=
NULL
&&
lpDrv
->
hDriver16
==
hDriver
)
{
switch
(
lpDrv
->
dwFlags
&
WINE_DI_TYPE_MASK
)
{
case
WINE_DI_TYPE_16
:
if
(
lpDrv
->
dwFlags
&
WINE_GDF_16BIT
)
{
TRACE
(
"Before CallDriverProc proc=%p driverID=%08lx hDrv=%u wMsg=%04x p1=%08lx p2=%08lx
\n
"
,
lpDrv
->
d
.
d16
.
lpDrvProc
,
lpDrv
->
dwDriverID
,
hDriver
,
msg
,
lParam1
,
lParam2
);
retval
=
DRIVER_CallTo16_long_lwwll
((
FARPROC16
)
lpDrv
->
d
.
d16
.
lpDrvProc
,
lpDrv
->
dwDriverID
,
hDriver
,
msg
,
lParam1
,
lParam2
);
break
;
case
WINE_DI_TYPE_32
:
}
else
{
mapRet
=
DRIVER_MapMsg16To32
(
msg
,
&
lParam1
,
&
lParam2
);
if
(
mapRet
>=
0
)
{
TRACE
(
"Before func32 call proc=%p driverID=%08lx hDrv=%u wMsg=%04x p1=%08lx p2=%08lx
\n
"
,
...
...
@@ -494,10 +507,6 @@ LRESULT WINAPI SendDriverMessage16(HDRVR16 hDriver, UINT16 msg, LPARAM lParam1,
}
else
{
retval
=
0
;
}
break
;
default:
FIXME
(
"Unknown driver type %08lx
\n
"
,
lpDrv
->
dwFlags
);
break
;
}
}
else
{
WARN
(
"Bad driver handle %u
\n
"
,
hDriver
);
...
...
@@ -522,8 +531,7 @@ LRESULT WINAPI SendDriverMessage(HDRVR hDriver, UINT msg, LPARAM lParam1,
lpDrv
=
DRIVER_FindFromHDrvr
(
hDriver
);
if
(
lpDrv
!=
NULL
)
{
switch
(
lpDrv
->
dwFlags
&
WINE_DI_TYPE_MASK
)
{
case
WINE_DI_TYPE_16
:
if
(
lpDrv
->
dwFlags
&
WINE_GDF_16BIT
)
{
mapRet
=
DRIVER_MapMsg32To16
(
msg
,
&
lParam1
,
&
lParam2
);
if
(
mapRet
>=
0
)
{
TRACE
(
"Before CallDriverProc proc=%p driverID=%08lx hDrv=%u wMsg=%04x p1=%08lx p2=%08lx
\n
"
,
...
...
@@ -536,15 +544,10 @@ LRESULT WINAPI SendDriverMessage(HDRVR hDriver, UINT msg, LPARAM lParam1,
}
else
{
retval
=
0
;
}
break
;
case
WINE_DI_TYPE_32
:
}
else
{
TRACE
(
"Before func32 call proc=%p driverID=%08lx hDrv=%u wMsg=%04x p1=%08lx p2=%08lx
\n
"
,
lpDrv
->
d
.
d32
.
lpDrvProc
,
lpDrv
->
dwDriverID
,
hDriver
,
msg
,
lParam1
,
lParam2
);
retval
=
lpDrv
->
d
.
d32
.
lpDrvProc
(
lpDrv
->
dwDriverID
,
hDriver
,
msg
,
lParam1
,
lParam2
);
break
;
default:
FIXME
(
"Unknown driver type %08lx
\n
"
,
lpDrv
->
dwFlags
);
break
;
}
}
else
{
WARN
(
"Bad driver handle %u
\n
"
,
hDriver
);
...
...
@@ -671,7 +674,7 @@ LPWINE_DRIVER DRIVER_RegisterDriver16(LPCSTR lpName, HMODULE16 hModule, DRIVERPR
lpDrv
=
HeapAlloc
(
SystemHeap
,
0
,
sizeof
(
WINE_DRIVER
));
if
(
lpDrv
!=
NULL
)
{
lpDrv
->
dwFlags
=
WINE_
DI_TYPE_16
;
lpDrv
->
dwFlags
=
WINE_
GDF_EXIST
|
WINE_GDF_16BIT
;
lpDrv
->
dwDriverID
=
0
;
lpDrv
->
hDriver16
=
DRIVER_CreateDrvr16
();
lstrcpynA
(
lpDrv
->
szAliasName
,
lpName
,
sizeof
(
lpDrv
->
szAliasName
));
...
...
@@ -699,7 +702,7 @@ LPWINE_DRIVER DRIVER_RegisterDriver32(LPCSTR lpName, HMODULE hModule, DRIVERPROC
lpDrv
=
HeapAlloc
(
SystemHeap
,
0
,
sizeof
(
WINE_DRIVER
));
if
(
lpDrv
!=
NULL
)
{
lpDrv
->
dwFlags
=
WINE_
DI_TYPE_32
;
lpDrv
->
dwFlags
=
WINE_
GDF_EXIST
;
lpDrv
->
dwDriverID
=
0
;
lpDrv
->
hDriver16
=
DRIVER_CreateDrvr16
();
lstrcpynA
(
lpDrv
->
szAliasName
,
lpName
,
sizeof
(
lpDrv
->
szAliasName
));
...
...
@@ -908,8 +911,7 @@ HMODULE16 WINAPI GetDriverModuleHandle16(HDRVR16 hDrvr)
TRACE
(
"(%04x);
\n
"
,
hDrvr
);
lpDrv
=
DRIVER_FindFromHDrvr16
(
hDrvr
);
if
(
lpDrv
!=
NULL
&&
lpDrv
->
hDriver16
==
hDrvr
&&
(
lpDrv
->
dwFlags
&
WINE_DI_TYPE_MASK
)
==
WINE_DI_TYPE_16
)
{
if
(
lpDrv
!=
NULL
&&
lpDrv
->
hDriver16
==
hDrvr
&&
(
lpDrv
->
dwFlags
&
WINE_GDF_16BIT
))
{
hModule
=
lpDrv
->
d
.
d16
.
hModule
;
}
TRACE
(
"=> %d
\n
"
,
hModule
);
...
...
@@ -918,12 +920,24 @@ HMODULE16 WINAPI GetDriverModuleHandle16(HDRVR16 hDrvr)
/**************************************************************************
* GetDriverFlags [WINMM.13]
* [in] hDrvr handle to the driver
*
* Returns:
* 0x00000000 if hDrvr is an invalid handle
* 0x80000000 if hDrvr is a valid 32 bit driver
* 0x90000000 if hDrvr is a valid 16 bit driver
*/
DWORD
WINAPI
GetDriverFlags
(
HDRVR
hDrvr
)
{
FIXME
(
"(%04x); stub!
\n
"
,
hDrvr
);
/* should I merge it with DRIVER_GetType() ? */
return
0
;
LPWINE_DRIVER
lpDrv
;
DWORD
ret
=
0
;
TRACE
(
"(%04x)
\n
"
,
hDrvr
);
if
((
lpDrv
=
DRIVER_FindFromHDrvr
(
hDrvr
))
!=
NULL
)
{
ret
=
lpDrv
->
dwFlags
;
}
return
ret
;
}
/**************************************************************************
...
...
@@ -937,7 +951,7 @@ HMODULE WINAPI GetDriverModuleHandle(HDRVR hDrvr)
TRACE
(
"(%04x);
\n
"
,
hDrvr
);
lpDrv
=
DRIVER_FindFromHDrvr
(
hDrvr
);
if
(
lpDrv
!=
NULL
&&
(
lpDrv
->
dwFlags
&
WINE_
DI_TYPE_MASK
)
==
WINE_DI_TYPE_32
)
{
if
(
lpDrv
!=
NULL
&&
!
(
lpDrv
->
dwFlags
&
WINE_
GDF_16BIT
)
)
{
hModule
=
lpDrv
->
d
.
d32
.
hModule
;
}
TRACE
(
"=> %d
\n
"
,
hModule
);
...
...
@@ -989,7 +1003,7 @@ BOOL16 WINAPI GetDriverInfo16(HDRVR16 hDrvr, LPDRIVERINFOSTRUCT16 lpDrvInfo)
lpDrv
=
DRIVER_FindFromHDrvr16
(
hDrvr
);
if
(
lpDrv
!=
NULL
&&
lpDrv
->
hDriver16
==
hDrvr
&&
(
lpDrv
->
dwFlags
&
WINE_
DI_TYPE_MASK
)
==
WINE_DI_TYPE_16
)
{
(
lpDrv
->
dwFlags
&
WINE_
GDF_16BIT
)
)
{
lpDrvInfo
->
hDriver
=
lpDrv
->
hDriver16
;
lpDrvInfo
->
hModule
=
lpDrv
->
d
.
d16
.
hModule
;
lstrcpynA
(
lpDrvInfo
->
szAliasName
,
lpDrv
->
szAliasName
,
sizeof
(
lpDrvInfo
->
szAliasName
));
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment