You've already forked wine-staging
mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2025-12-15 08:03:15 -08:00
Rebase against cfb1d2058fb47ff3f72501e0aaf35b97ea128036.
This commit is contained in:
@@ -1,15 +1,15 @@
|
||||
From 5467b7a82f16dfb7cbd6de4badcd107e7ec5f292 Mon Sep 17 00:00:00 2001
|
||||
From 0b70d2f52080c75d0fd183235957270a525c7b32 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Fri, 26 Feb 2016 03:54:28 +0100
|
||||
Subject: mmsystem.dll16: Refcount midihdr to work around buggy application
|
||||
which unprepares buffer during a callback.
|
||||
Subject: [PATCH] mmsystem.dll16: Refcount midihdr to work around buggy
|
||||
application which unprepares buffer during a callback.
|
||||
|
||||
---
|
||||
dlls/mmsystem.dll16/message16.c | 123 ++++++++++++++++++++++++----------------
|
||||
1 file changed, 74 insertions(+), 49 deletions(-)
|
||||
dlls/mmsystem.dll16/message16.c | 121 +++++++++++++++++++-------------
|
||||
1 file changed, 73 insertions(+), 48 deletions(-)
|
||||
|
||||
diff --git a/dlls/mmsystem.dll16/message16.c b/dlls/mmsystem.dll16/message16.c
|
||||
index 012d3dc..2c01eb4 100644
|
||||
index 5a722bb6691..a6816920dae 100644
|
||||
--- a/dlls/mmsystem.dll16/message16.c
|
||||
+++ b/dlls/mmsystem.dll16/message16.c
|
||||
@@ -33,6 +33,13 @@
|
||||
@@ -26,7 +26,7 @@ index 012d3dc..2c01eb4 100644
|
||||
/* =================================
|
||||
* A U X M A P P E R S
|
||||
* ================================= */
|
||||
@@ -117,13 +124,13 @@ static void MMSYSTDRV_MidiIn_MapCB(UINT uMsg, DWORD_PTR* dwUser, DW
|
||||
@@ -117,13 +124,13 @@ static void MMSYSTDRV_MidiIn_MapCB(DWORD uMsg, DWORD_PTR* dwUser, D
|
||||
case MIM_LONGDATA:
|
||||
case MIM_LONGERROR:
|
||||
{
|
||||
@@ -46,13 +46,15 @@ index 012d3dc..2c01eb4 100644
|
||||
}
|
||||
break;
|
||||
default:
|
||||
@@ -175,42 +182,49 @@ static MMSYSTEM_MapType MMSYSTDRV_MidiOut_Map16To32W (UINT wMsg, DWORD_PTR* lpP
|
||||
@@ -175,42 +182,49 @@ static MMSYSTEM_MapType MMSYSTDRV_MidiOut_Map16To32W (DWORD wMsg, DWORD_PTR* lp
|
||||
break;
|
||||
case MODM_PREPARE:
|
||||
{
|
||||
- LPMIDIHDR mh32 = HeapAlloc(GetProcessHeap(), 0, sizeof(LPMIDIHDR) + sizeof(MIDIHDR));
|
||||
- LPMIDIHDR16 mh16 = MapSL(*lpParam1);
|
||||
-
|
||||
+ struct mihdrWrap *mh32 = HeapAlloc(GetProcessHeap(), 0, sizeof(struct mihdrWrap));
|
||||
+ LPMIDIHDR16 mh16 = MapSL(*lpParam1);
|
||||
|
||||
- if (mh32) {
|
||||
- *(LPMIDIHDR*)mh32 = (LPMIDIHDR)*lpParam1;
|
||||
- mh32 = (LPMIDIHDR)((LPSTR)mh32 + sizeof(LPMIDIHDR));
|
||||
@@ -64,13 +66,6 @@ index 012d3dc..2c01eb4 100644
|
||||
- mh16->lpNext = (MIDIHDR16*)mh32; /* for reuse in unprepare and write */
|
||||
- *lpParam1 = (DWORD)mh32;
|
||||
- *lpParam2 = offsetof(MIDIHDR,dwOffset); /* old size, without dwOffset */
|
||||
+ struct mihdrWrap *mh32 = HeapAlloc(GetProcessHeap(), 0, sizeof(struct mihdrWrap));
|
||||
+ LPMIDIHDR16 mh16 = MapSL(*lpParam1);
|
||||
|
||||
- ret = MMSYSTEM_MAP_OKMEM;
|
||||
- } else {
|
||||
- ret = MMSYSTEM_MAP_NOMEM;
|
||||
- }
|
||||
+ if (mh32)
|
||||
+ {
|
||||
+ mh32->ref = 2;
|
||||
@@ -83,7 +78,11 @@ index 012d3dc..2c01eb4 100644
|
||||
+ mh16->lpNext = (MIDIHDR16*)mh32; /* for reuse in unprepare and write */
|
||||
+ *lpParam1 = (DWORD)&mh32->hdr;
|
||||
+ *lpParam2 = offsetof(MIDIHDR,dwOffset); /* old size, without dwOffset */
|
||||
+
|
||||
|
||||
- ret = MMSYSTEM_MAP_OKMEM;
|
||||
- } else {
|
||||
- ret = MMSYSTEM_MAP_NOMEM;
|
||||
- }
|
||||
+ ret = MMSYSTEM_MAP_OKMEM;
|
||||
+ }
|
||||
+ else
|
||||
@@ -102,7 +101,7 @@ index 012d3dc..2c01eb4 100644
|
||||
- *lpParam2 = offsetof(MIDIHDR,dwOffset);
|
||||
- /* dwBufferLength can be reduced between prepare & write */
|
||||
- if (wMsg == MODM_LONGDATA && mh32->dwBufferLength < mh16->dwBufferLength) {
|
||||
- ERR("Size of buffer has been increased from %d to %d, keeping initial value\n",
|
||||
- ERR("Size of buffer has been increased from %ld to %ld, keeping initial value\n",
|
||||
- mh32->dwBufferLength, mh16->dwBufferLength);
|
||||
- } else
|
||||
- mh32->dwBufferLength = mh16->dwBufferLength;
|
||||
@@ -125,7 +124,7 @@ index 012d3dc..2c01eb4 100644
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -267,17 +281,28 @@ static MMSYSTEM_MapType MMSYSTDRV_MidiOut_UnMap16To32W(UINT wMsg, DWORD_PTR* lp
|
||||
@@ -267,17 +281,28 @@ static MMSYSTEM_MapType MMSYSTDRV_MidiOut_UnMap16To32W(DWORD wMsg, DWORD_PTR* l
|
||||
case MODM_UNPREPARE:
|
||||
case MODM_LONGDATA:
|
||||
{
|
||||
@@ -163,7 +162,7 @@ index 012d3dc..2c01eb4 100644
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -307,12 +332,12 @@ static void MMSYSTDRV_MidiOut_MapCB(UINT uMsg, DWORD_PTR* dwUser, DWORD_PTR* dw
|
||||
@@ -307,12 +332,12 @@ static void MMSYSTDRV_MidiOut_MapCB(DWORD uMsg, DWORD_PTR* dwUser, DWORD_PTR* d
|
||||
case MOM_DONE:
|
||||
{
|
||||
/* initial map is: 16 => 32 */
|
||||
@@ -182,5 +181,5 @@ index 012d3dc..2c01eb4 100644
|
||||
break;
|
||||
default:
|
||||
--
|
||||
2.9.0
|
||||
2.34.1
|
||||
|
||||
|
||||
Reference in New Issue
Block a user