From: John Tsiombikas Date: Wed, 11 Sep 2019 13:24:28 +0000 (+0000) Subject: A couple of fixes in fg_joystick_x11.c identified in bug report #249 X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=freeglut;a=commitdiff_plain;h=85fe5ac7b6efe580eab22820aa740a4b2dcafb0c A couple of fixes in fg_joystick_x11.c identified in bug report #249 - The correct way to set the O_NONBLOCK flag, is to OR that flag with existing flags. Previously we were overriding everything else and setting the flags value to O_NONBLOCK directly. Unlikely to cause a problem because we probably don't have any other flags in the newly opened file descriptor, but strictly spaking it was incorrect. - If ioctl JSIOCGAXES and JSIOCGBUTTONS could fail, as it stands, it would clobber the value of joy->num_axes/joy->num_buttons. It can't fail, but maybe in the future who knows. Let's be safe. git-svn-id: svn+ssh://svn.code.sf.net/p/freeglut/code/trunk/freeglut/freeglut@1848 7f0cb862-5218-0410-a997-914c9d46530a --- diff --git a/src/x11/fg_joystick_x11.c b/src/x11/fg_joystick_x11.c index 8c75bbe..bb21d7e 100644 --- a/src/x11/fg_joystick_x11.c +++ b/src/x11/fg_joystick_x11.c @@ -599,12 +599,12 @@ void fgPlatformJoystickOpen( SFG_Joystick* joy ) * to the upper byte of an uninitialized word doesn't work. * 9 April 2003 */ - ioctl( joy->pJoystick.fd, JSIOCGAXES, &u ); - joy->num_axes = u; - ioctl( joy->pJoystick.fd, JSIOCGBUTTONS, &u ); - joy->num_buttons = u; + if(ioctl(joy->pJoystick.fd, JSIOCGAXES, &u) != -1) + joy->num_axes = u; + if(ioctl(joy->pJoystick.fd, JSIOCGBUTTONS, &u) != -1) + joy->num_buttons = u; ioctl( joy->pJoystick.fd, JSIOCGNAME( sizeof( joy->name ) ), joy->name ); - fcntl( joy->pJoystick.fd, F_SETFL, O_NONBLOCK ); + fcntl(joy->pJoystick.fd, F_SETFL, fcntl(joy->pJoystick.fd, F_GETFL) | O_NONBLOCK); # endif /*