dinput: Allocate the dinput_device structure in the caller to dinput_device_alloc().

Rename it to dinput_device_init() accordingly.

Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Zebediah Figura 2022-05-16 11:50:45 +02:00 committed by Alexandre Julliard
parent c6011504a4
commit bb791a7dd0
5 changed files with 10 additions and 19 deletions

View File

@ -2144,13 +2144,9 @@ static const IDirectInputDevice8WVtbl dinput_device_w_vtbl =
dinput_device_GetImageInfo, dinput_device_GetImageInfo,
}; };
HRESULT dinput_device_alloc( SIZE_T size, const struct dinput_device_vtbl *vtbl, const GUID *guid, void dinput_device_init( struct dinput_device *device, const struct dinput_device_vtbl *vtbl,
struct dinput *dinput, void **out ) const GUID *guid, struct dinput *dinput )
{ {
struct dinput_device *device;
if (!(device = calloc( 1, size ))) return DIERR_OUTOFMEMORY;
device->IDirectInputDevice8A_iface.lpVtbl = &dinput_device_a_vtbl; device->IDirectInputDevice8A_iface.lpVtbl = &dinput_device_a_vtbl;
device->IDirectInputDevice8W_iface.lpVtbl = &dinput_device_w_vtbl; device->IDirectInputDevice8W_iface.lpVtbl = &dinput_device_w_vtbl;
device->ref = 1; device->ref = 1;
@ -2164,9 +2160,6 @@ HRESULT dinput_device_alloc( SIZE_T size, const struct dinput_device_vtbl *vtbl,
device->dinput = dinput; device->dinput = dinput;
IDirectInput_AddRef( &dinput->IDirectInput7A_iface ); IDirectInput_AddRef( &dinput->IDirectInput7A_iface );
device->vtbl = vtbl; device->vtbl = vtbl;
*out = device;
return DI_OK;
} }
static const GUID *object_instance_guid( const DIDEVICEOBJECTINSTANCEW *instance ) static const GUID *object_instance_guid( const DIDEVICEOBJECTINSTANCEW *instance )

View File

@ -123,8 +123,8 @@ struct dinput_device
struct object_properties *object_properties; struct object_properties *object_properties;
}; };
extern HRESULT dinput_device_alloc( SIZE_T size, const struct dinput_device_vtbl *vtbl, const GUID *guid, extern void dinput_device_init( struct dinput_device *device, const struct dinput_device_vtbl *vtbl,
struct dinput *dinput, void **out ) DECLSPEC_HIDDEN; const GUID *guid, struct dinput *dinput );
extern HRESULT dinput_device_init_device_format( IDirectInputDevice8W *iface ); extern HRESULT dinput_device_init_device_format( IDirectInputDevice8W *iface );
extern void dinput_device_destroy( IDirectInputDevice8W *iface ); extern void dinput_device_destroy( IDirectInputDevice8W *iface );

View File

@ -2049,8 +2049,8 @@ HRESULT hid_joystick_create_device( struct dinput *dinput, const GUID *guid, IDi
if (!IsEqualGUID( &device_path_guid, &instance.guidInstance )) return DIERR_DEVICENOTREG; if (!IsEqualGUID( &device_path_guid, &instance.guidInstance )) return DIERR_DEVICENOTREG;
} }
hr = dinput_device_alloc( sizeof(struct hid_joystick), &hid_joystick_vtbl, guid, dinput, (void **)&impl ); if (!(impl = calloc( 1, sizeof(*impl) ))) return E_OUTOFMEMORY;
if (FAILED(hr)) return hr; dinput_device_init( &impl->base, &hid_joystick_vtbl, guid, dinput );
impl->base.crit.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": hid_joystick.base.crit"); impl->base.crit.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": hid_joystick.base.crit");
impl->base.dwCoopLevel = DISCL_NONEXCLUSIVE | DISCL_BACKGROUND; impl->base.dwCoopLevel = DISCL_NONEXCLUSIVE | DISCL_BACKGROUND;
impl->base.read_event = CreateEventW( NULL, TRUE, FALSE, NULL ); impl->base.read_event = CreateEventW( NULL, TRUE, FALSE, NULL );

View File

@ -167,15 +167,14 @@ HRESULT keyboard_enum_device( DWORD type, DWORD flags, DIDEVICEINSTANCEW *instan
HRESULT keyboard_create_device( struct dinput *dinput, const GUID *guid, IDirectInputDevice8W **out ) HRESULT keyboard_create_device( struct dinput *dinput, const GUID *guid, IDirectInputDevice8W **out )
{ {
struct keyboard *impl; struct keyboard *impl;
HRESULT hr;
TRACE( "dinput %p, guid %s, out %p.\n", dinput, debugstr_guid( guid ), out ); TRACE( "dinput %p, guid %s, out %p.\n", dinput, debugstr_guid( guid ), out );
*out = NULL; *out = NULL;
if (!IsEqualGUID( &GUID_SysKeyboard, guid )) return DIERR_DEVICENOTREG; if (!IsEqualGUID( &GUID_SysKeyboard, guid )) return DIERR_DEVICENOTREG;
if (FAILED(hr = dinput_device_alloc( sizeof(struct keyboard), &keyboard_vtbl, guid, dinput, (void **)&impl ))) if (!(impl = calloc( 1, sizeof(*impl) ))) return E_OUTOFMEMORY;
return hr; dinput_device_init( &impl->base, &keyboard_vtbl, guid, dinput );
impl->base.crit.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": struct keyboard*->base.crit"); impl->base.crit.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": struct keyboard*->base.crit");
keyboard_enum_device( 0, 0, &impl->base.instance, dinput->dwVersion ); keyboard_enum_device( 0, 0, &impl->base.instance, dinput->dwVersion );

View File

@ -96,15 +96,14 @@ HRESULT mouse_create_device( struct dinput *dinput, const GUID *guid, IDirectInp
struct mouse *impl; struct mouse *impl;
HKEY hkey, appkey; HKEY hkey, appkey;
WCHAR buffer[20]; WCHAR buffer[20];
HRESULT hr;
TRACE( "dinput %p, guid %s, out %p\n", dinput, debugstr_guid( guid ), out ); TRACE( "dinput %p, guid %s, out %p\n", dinput, debugstr_guid( guid ), out );
*out = NULL; *out = NULL;
if (!IsEqualGUID( &GUID_SysMouse, guid )) return DIERR_DEVICENOTREG; if (!IsEqualGUID( &GUID_SysMouse, guid )) return DIERR_DEVICENOTREG;
if (FAILED(hr = dinput_device_alloc( sizeof(struct mouse), &mouse_vtbl, guid, dinput, (void **)&impl ))) if (!(impl = calloc( 1, sizeof(*impl) ))) return E_OUTOFMEMORY;
return hr; dinput_device_init( &impl->base, &mouse_vtbl, guid, dinput );
impl->base.crit.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": struct mouse*->base.crit"); impl->base.crit.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": struct mouse*->base.crit");
mouse_enum_device( 0, 0, &impl->base.instance, dinput->dwVersion ); mouse_enum_device( 0, 0, &impl->base.instance, dinput->dwVersion );