Andrew Eikum : dinput: Translate OSX errors to win32 errors.
Alexandre Julliard
julliard at winehq.org
Fri May 24 11:12:44 CDT 2013
Module: wine
Branch: master
Commit: 44a2d36f7082b761e715b010e9bc0e74c6edc70b
URL: http://source.winehq.org/git/wine.git/?a=commit;h=44a2d36f7082b761e715b010e9bc0e74c6edc70b
Author: Andrew Eikum <aeikum at codeweavers.com>
Date: Thu May 23 14:58:07 2013 -0500
dinput: Translate OSX errors to win32 errors.
---
dlls/dinput/joystick_osx.c | 51 ++++++++++++++++++++++++++++++++++---------
1 files changed, 40 insertions(+), 11 deletions(-)
diff --git a/dlls/dinput/joystick_osx.c b/dlls/dinput/joystick_osx.c
index 0d3927a..3ec6fea 100644
--- a/dlls/dinput/joystick_osx.c
+++ b/dlls/dinput/joystick_osx.c
@@ -147,6 +147,35 @@ static const GUID DInput_Wine_OsX_Joystick_GUID = { /* 59CAD8F6-E617-41E2-8EB7-4
0x59CAD8F6, 0xE617, 0x41E2, {0x8E, 0xB7, 0x47, 0xB2, 0x3E, 0xEE, 0xDC, 0x5A}
};
+static HRESULT osx_to_win32_hresult(HRESULT in)
+{
+ /* OSX returns 16-bit COM runtime errors, which we should
+ * convert to win32 */
+ switch(in){
+ case 0x80000001:
+ return E_NOTIMPL;
+ case 0x80000002:
+ return E_OUTOFMEMORY;
+ case 0x80000003:
+ return E_INVALIDARG;
+ case 0x80000004:
+ return E_NOINTERFACE;
+ case 0x80000005:
+ return E_POINTER;
+ case 0x80000006:
+ return E_HANDLE;
+ case 0x80000007:
+ return E_ABORT;
+ case 0x80000008:
+ return E_FAIL;
+ case 0x80000009:
+ return E_ACCESSDENIED;
+ case 0x8000FFFF:
+ return E_UNEXPECTED;
+ }
+ return in;
+}
+
static void CFSetApplierFunctionCopyToCFArray(const void *value, void *context)
{
CFArrayAppendValue( ( CFMutableArrayRef ) context, value );
@@ -203,7 +232,7 @@ static HRESULT get_ff(IOHIDDeviceRef device, FFDeviceObjectReference *ret)
if(!ret)
return FFIsForceFeedback(service) == FF_OK ? S_OK : S_FALSE;
- return FFCreateDevice(service, ret);
+ return osx_to_win32_hresult(FFCreateDevice(service, ret));
}
static CFMutableDictionaryRef creates_osx_device_match(int usage)
@@ -1106,8 +1135,8 @@ static HRESULT WINAPI JoystickWImpl_CreateEffect(IDirectInputDevice8W *iface,
effect->device = This;
/* Mac's FFEFFECT and Win's DIEFFECT are binary identical. */
- hr = FFDeviceCreateEffect(This->ff, effect_win_to_mac(type),
- (FFEFFECT*)params, &effect->effect);
+ hr = osx_to_win32_hresult(FFDeviceCreateEffect(This->ff,
+ effect_win_to_mac(type), (FFEFFECT*)params, &effect->effect));
if(FAILED(hr)){
WARN("FFDeviceCreateEffect failed: %08x\n", hr);
HeapFree(GetProcessHeap(), 0, effect);
@@ -1273,7 +1302,7 @@ static HRESULT WINAPI effect_GetParameters(IDirectInputEffect *iface,
{
EffectImpl *This = impl_from_IDirectInputEffect(iface);
TRACE("%p %p 0x%x\n", This, effect, flags);
- return FFEffectGetParameters(This->effect, (FFEFFECT*)effect, flags);
+ return osx_to_win32_hresult(FFEffectGetParameters(This->effect, (FFEFFECT*)effect, flags));
}
static HRESULT WINAPI effect_SetParameters(IDirectInputEffect *iface,
@@ -1281,7 +1310,7 @@ static HRESULT WINAPI effect_SetParameters(IDirectInputEffect *iface,
{
EffectImpl *This = impl_from_IDirectInputEffect(iface);
TRACE("%p %p 0x%x\n", This, effect, flags);
- return FFEffectSetParameters(This->effect, (FFEFFECT*)effect, flags);
+ return osx_to_win32_hresult(FFEffectSetParameters(This->effect, (FFEFFECT*)effect, flags));
}
static HRESULT WINAPI effect_Start(IDirectInputEffect *iface, DWORD iterations,
@@ -1289,42 +1318,42 @@ static HRESULT WINAPI effect_Start(IDirectInputEffect *iface, DWORD iterations,
{
EffectImpl *This = impl_from_IDirectInputEffect(iface);
TRACE("%p 0x%x 0x%x\n", This, iterations, flags);
- return FFEffectStart(This->effect, iterations, flags);
+ return osx_to_win32_hresult(FFEffectStart(This->effect, iterations, flags));
}
static HRESULT WINAPI effect_Stop(IDirectInputEffect *iface)
{
EffectImpl *This = impl_from_IDirectInputEffect(iface);
TRACE("%p\n", This);
- return FFEffectStop(This->effect);
+ return osx_to_win32_hresult(FFEffectStop(This->effect));
}
static HRESULT WINAPI effect_GetEffectStatus(IDirectInputEffect *iface, DWORD *flags)
{
EffectImpl *This = impl_from_IDirectInputEffect(iface);
TRACE("%p %p\n", This, flags);
- return FFEffectGetEffectStatus(This->effect, (UInt32*)flags);
+ return osx_to_win32_hresult(FFEffectGetEffectStatus(This->effect, (UInt32*)flags));
}
static HRESULT WINAPI effect_Download(IDirectInputEffect *iface)
{
EffectImpl *This = impl_from_IDirectInputEffect(iface);
TRACE("%p\n", This);
- return FFEffectDownload(This->effect);
+ return osx_to_win32_hresult(FFEffectDownload(This->effect));
}
static HRESULT WINAPI effect_Unload(IDirectInputEffect *iface)
{
EffectImpl *This = impl_from_IDirectInputEffect(iface);
TRACE("%p\n", This);
- return FFEffectUnload(This->effect);
+ return osx_to_win32_hresult(FFEffectUnload(This->effect));
}
static HRESULT WINAPI effect_Escape(IDirectInputEffect *iface, DIEFFESCAPE *escape)
{
EffectImpl *This = impl_from_IDirectInputEffect(iface);
TRACE("%p %p\n", This, escape);
- return FFEffectEscape(This->effect, (FFEFFESCAPE*)escape);
+ return osx_to_win32_hresult(FFEffectEscape(This->effect, (FFEFFESCAPE*)escape));
}
static const IDirectInputEffectVtbl EffectVtbl = {
More information about the wine-cvs
mailing list