X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Ffreeglut_joystick.c;h=91fe2265179f5900576dafd0cf3c6a32a87f8d0a;hb=3c7c46e5846a39dde8be85c131e69cab1d8cb1ec;hp=e4bd53bb904a75406233df91102ee38eb282b9e7;hpb=81f7f85ade2f873ebee9afa3ad810046771cb5c3;p=freeglut diff --git a/src/freeglut_joystick.c b/src/freeglut_joystick.c index e4bd53b..91fe226 100644 --- a/src/freeglut_joystick.c +++ b/src/freeglut_joystick.c @@ -33,7 +33,7 @@ #include #include "freeglut_internal.h" -#if HAVE_SYS_PARAM_H +#ifdef HAVE_SYS_PARAM_H # include #endif @@ -69,13 +69,16 @@ #if TARGET_HOST_POSIX_X11 # define _JS_MAX_AXES 16 -# if HAVE_SYS_IOCTL_H +# ifdef HAVE_SYS_IOCTL_H # include # endif -# if HAVE_FCNTL_H +# ifdef HAVE_FCNTL_H # include # endif -# include +# ifdef HAVE_ERRNO_H +# include +# include +# endif # if defined(__FreeBSD__) || defined(__NetBSD__) /* XXX The below hack is done until freeglut's autoconf is updated. */ # define HAVE_USB_JS 1 @@ -230,19 +233,22 @@ static int fghJoystickFindUSBdev(char *name, char *out, int outlen) static int protection_warned = 0; for (i = 0; i < 16; i++) { - sprintf(buf, "%s%d", USBDEV, i); + snprintf(buf, sizeof(buf), "%s%d", USBDEV, i); f = open(buf, O_RDONLY); if (f >= 0) { cp = fghJoystickWalkUSBdev(f, name, out, outlen); close(f); if (cp) return 1; - } else if (errno == EACCES) { + } +#ifdef HAVE_ERRNO_H + else if (errno == EACCES) { if (!protection_warned) { fgWarning ( "Can't open %s for read!", buf ); protection_warned = 1; } } +#endif } return 0; } @@ -260,7 +266,11 @@ static int fghJoystickInitializeHID(struct os_specific_s *os, if ( ( rd = hid_get_report_desc( os->fd ) ) == 0 ) { +#ifdef HAVE_ERRNO_H fgWarning ( "error: %s: %s", os->fname, strerror( errno ) ); +#else + fgWarning ( "error: %s", os->fname ); +#endif return FALSE; } @@ -270,7 +280,11 @@ static int fghJoystickInitializeHID(struct os_specific_s *os, if( ioctl( os->fd, USB_GET_REPORT_ID, &report_id ) < 0) { /*** XXX {report_id} may not be the right variable? ***/ +#ifdef HAVE_ERRNO_H fgWarning ( "error: %s%d: %s", UHIDDEV, report_id, strerror( errno ) ); +#else + fgWarning ( "error: %s%d", UHIDDEV, report_id ); +#endif return FALSE; } @@ -663,7 +677,11 @@ static void fghJoystickRawRead( SFG_Joystick* joy, int* buttons, float* axes ) } } } +#ifdef HAVE_ERRNO_H if ( len < 0 && errno != EAGAIN ) +#else + if ( len < 0 ) +#endif { perror( joy->os->fname ); joy->error = 1; @@ -682,6 +700,7 @@ static void fghJoystickRawRead( SFG_Joystick* joy, int* buttons, float* axes ) if ( status != sizeof( struct js_event ) ) { +#ifdef HAVE_ERRNO_H if ( errno == EAGAIN ) { /* Use the old values */ @@ -692,6 +711,7 @@ static void fghJoystickRawRead( SFG_Joystick* joy, int* buttons, float* axes ) sizeof( float ) * joy->num_axes ); return; } +#endif fgWarning ( "%s", joy->fname ); joy->error = GL_TRUE; @@ -997,9 +1017,9 @@ static int fghJoystickGetOEMProductName ( SFG_Joystick* joy, char *buf, int buf_ return 0; /* Open .. MediaResources\CurrentJoystickSettings */ - sprintf ( buffer, "%s\\%s\\%s", - REGSTR_PATH_JOYCONFIG, joy->jsCaps.szRegKey, - REGSTR_KEY_JOYCURR ); + _snprintf ( buffer, sizeof(buffer), "%s\\%s\\%s", + REGSTR_PATH_JOYCONFIG, joy->jsCaps.szRegKey, + REGSTR_KEY_JOYCURR ); lr = RegOpenKeyEx ( HKEY_LOCAL_MACHINE, buffer, 0, KEY_QUERY_VALUE, &hKey); @@ -1009,7 +1029,7 @@ static int fghJoystickGetOEMProductName ( SFG_Joystick* joy, char *buf, int buf_ dwcb = sizeof(OEMKey); /* JOYSTICKID1-16 is zero-based; registry entries for VJOYD are 1-based. */ - sprintf ( buffer, "Joystick%d%s", joy->js_id + 1, REGSTR_VAL_JOYOEMNAME ); + _snprintf ( buffer, sizeof(buffer), "Joystick%d%s", joy->js_id + 1, REGSTR_VAL_JOYOEMNAME ); lr = RegQueryValueEx ( hKey, buffer, 0, 0, (LPBYTE) OEMKey, &dwcb); RegCloseKey ( hKey ); @@ -1017,7 +1037,7 @@ static int fghJoystickGetOEMProductName ( SFG_Joystick* joy, char *buf, int buf_ if ( lr != ERROR_SUCCESS ) return 0; /* Open OEM Key from ...MediaProperties */ - sprintf ( buffer, "%s\\%s", REGSTR_PATH_JOYOEM, OEMKey ); + _snprintf ( buffer, sizeof(buffer), "%s\\%s", REGSTR_PATH_JOYOEM, OEMKey ); lr = RegOpenKeyEx ( HKEY_LOCAL_MACHINE, buffer, 0, KEY_QUERY_VALUE, &hKey ); @@ -1039,7 +1059,7 @@ static int fghJoystickGetOEMProductName ( SFG_Joystick* joy, char *buf, int buf_ static void fghJoystickOpen( SFG_Joystick* joy ) { - int i; + int i = 0; #if TARGET_HOST_MACINTOSH OSStatus err; #endif @@ -1060,8 +1080,8 @@ static void fghJoystickOpen( SFG_Joystick* joy ) # ifdef JS_NEW unsigned char u; # else -# if defined( __linux__ ) - int counter; +# if defined( __linux__ ) || TARGET_HOST_SOLARIS + int counter = 0; # endif # endif #endif @@ -1298,8 +1318,10 @@ static void fghJoystickOpen( SFG_Joystick* joy ) joy->os->fd = open( joy->os->fname, O_RDONLY | O_NONBLOCK); +#ifdef HAVE_ERRNO_H if( joy->os->fd < 0 && errno == EACCES ) fgWarning ( "%s exists but is not readable by you", joy->os->fname ); +#endif joy->error =( joy->os->fd < 0 ); @@ -1325,7 +1347,7 @@ static void fghJoystickOpen( SFG_Joystick* joy ) if( joy->error ) return; - sprintf( joyfname, "%s/.joy%drc", getenv( "HOME" ), joy->id ); + snprintf( joyfname, sizeof(joyfname), "%s/.joy%drc", getenv( "HOME" ), joy->id ); joyfile = fopen( joyfname, "r" ); joy->error =( joyfile == NULL ); @@ -1394,7 +1416,7 @@ static void fghJoystickOpen( SFG_Joystick* joy ) # endif #endif -#if defined( __linux__ ) +#if defined( __linux__ ) || TARGET_HOST_SOLARIS /* Default for older Linux systems. */ joy->num_axes = 2; joy->num_buttons = 32; @@ -1488,7 +1510,7 @@ static void fghJoystickInit( int ident ) #if TARGET_HOST_MACINTOSH fgJoystick[ ident ]->id = ident; - sprintf( fgJoystick[ ident ]->fname, "/dev/js%d", ident ); /* FIXME */ + snprintf( fgJoystick[ ident ]->fname, sizeof(fgJoystick[ ident ]->fname), "/dev/js%d", ident ); /* FIXME */ fgJoystick[ ident ]->error = GL_FALSE; #endif @@ -1563,18 +1585,18 @@ static void fghJoystickInit( int ident ) if( ident < USB_IDENT_OFFSET ) fgJoystick[ ident ]->os->is_analog = 1; if( fgJoystick[ ident ]->os->is_analog ) - sprintf( fgJoystick[ ident ]->os->fname, "%s%d", AJSDEV, ident ); + snprintf( fgJoystick[ ident ]->os->fname, sizeof(fgJoystick[ ident ]->os->fname), "%s%d", AJSDEV, ident ); else - sprintf( fgJoystick[ ident ]->os->fname, "%s%d", UHIDDEV, + snprintf( fgJoystick[ ident ]->os->fname, sizeof(fgJoystick[ ident ]->os->fname), "%s%d", UHIDDEV, ident - USB_IDENT_OFFSET ); # elif defined( __linux__ ) fgJoystick[ ident ]->id = ident; fgJoystick[ ident ]->error = GL_FALSE; - sprintf( fgJoystick[ident]->fname, "/dev/input/js%d", ident ); + snprintf( fgJoystick[ident]->fname, sizeof(fgJoystick[ident]->fname), "/dev/input/js%d", ident ); if( access( fgJoystick[ ident ]->fname, F_OK ) != 0 ) - sprintf( fgJoystick[ ident ]->fname, "/dev/js%d", ident ); + snprintf( fgJoystick[ ident ]->fname, sizeof(fgJoystick[ ident ]->fname), "/dev/js%d", ident ); # endif #endif @@ -1688,9 +1710,6 @@ int fgJoystickDetect( void ) fgInitialiseJoysticks (); - if ( !fgJoystick ) - return 0; - if ( !fgState.JoysticksInitialised ) return 0;