dinput - Allow the use of the standard Joystick GUID when calling CreateDevice

Vitaliy Margolen wine-devel at kievinfo.com
Sun Jul 29 12:15:21 CDT 2007


Peter Dons Tychsen wrote:
> Hello again Wine!
> 
> Here is a small fix for dinput which fixes application which call
> CreateDevice with the standard Joystick GUID instead of the GUID
> supplied in the enumeration callback. 

The patch looks good, and I see what you trying to fix. It would be
nice if you add some tests for this. MSDN is pretty explicit about
what GUIDs could be used there.

Few nitpicks about your patch:

> -static BOOL IsJoystickGUID(REFGUID guid)
> +/******************************************************************************
> +  *     Acquire : gets exclusive control of the joystick
> +  */
> +static CHAR IsJoystickGUID(REFGUID guid)
>  {
> 
Comment are good, but only when they are correct. Also you probably should
rename this function to something like get_joystick_index.

> +  return -1;
>  }
> 
>  static HRESULT joydev_create_deviceA(IDirectInputImpl *dinput, REFGUID rguid, REFIID riid, LPDIRECTINPUTDEVICEA* pdev)
>  {
> -  if ((IsEqualGUID(&GUID_Joystick,rguid)) ||
> -      (IsJoystickGUID(rguid))) {
> +  CHAR index;

Why CHAR? the Data3 defined as "unsigned short Data3;". That is what
you really should use. BTW be careful with that "return -1;" it won't
be < 0 for unsigned anymore.

> -    GUID wine_joystick = DInput_Wine_Joystick_GUID;
> -    GUID dev_guid = *guid;
> +  GUID wine_joystick = DInput_Wine_Joystick_GUID;
> +  GUID dev_guid = *guid;
Please do not reformat the code. It should be 4-spaces indentation, not 2.

And while you changing this, don't forget to change joystick_linuxinput.c as well.
They should be kept in sync.


Vitaliy.



More information about the wine-devel mailing list