Prevent exceeding array bounds in X11 key-repeat detection
[freeglut] / src / freeglut_init.c
index e25404f..43d3e25 100644 (file)
@@ -65,12 +65,12 @@ SFG_State fgState = { { -1, -1, GL_FALSE },  /* Position */
                       GL_FALSE,              /* UseCurrentContext */
                       GL_FALSE,              /* GLDebugSwitch */
                       GL_FALSE,              /* XSyncSwitch */
-                      GL_FALSE,              /* IgnoreKeyRepeat */
+                      GL_TRUE,               /* KeyRepeat */
                       0xffffffff,            /* Modifiers */
                       0,                     /* FPSInterval */
                       0,                     /* SwapCount */
                       0,                     /* SwapTime */
-#if TARGET_HOST_WIN32
+#if TARGET_HOST_WIN32 || TARGET_HOST_WINCE
                       { 0, GL_FALSE },       /* Time */
 #else
                       { { 0, 0 }, GL_FALSE },
@@ -142,7 +142,7 @@ void fgInitialize( const char* displayName )
         FALSE
     );
 
-#elif TARGET_HOST_WIN32
+#elif TARGET_HOST_WIN32 || TARGET_HOST_WINCE
 
     WNDCLASS wc;
     ATOM atom;
@@ -152,7 +152,8 @@ void fgInitialize( const char* displayName )
      */
     fgDisplay.Instance = GetModuleHandle( NULL );
 
-    atom = GetClassInfo( fgDisplay.Instance, "FREEGLUT", &wc );
+    atom = GetClassInfo( fgDisplay.Instance, _T("FREEGLUT"), &wc );
+
     if( atom == 0 )
     {
         ZeroMemory( &wc, sizeof(WNDCLASS) );
@@ -165,19 +166,24 @@ void fgInitialize( const char* displayName )
          * XXX Old code had "| CS_DBCLCKS" commented out.  Plans for the
          * XXX future?  Dead-end idea?
          */
-        wc.style          = CS_OWNDC | CS_HREDRAW | CS_VREDRAW;
         wc.lpfnWndProc    = fgWindowProc;
         wc.cbClsExtra     = 0;
         wc.cbWndExtra     = 0;
         wc.hInstance      = fgDisplay.Instance;
-        wc.hIcon          = LoadIcon( fgDisplay.Instance, "GLUT_ICON" );
+        wc.hIcon          = LoadIcon( fgDisplay.Instance, _T("GLUT_ICON") );
+
+#if TARGET_HOST_WIN32
+        wc.style          = CS_OWNDC | CS_HREDRAW | CS_VREDRAW;
         if (!wc.hIcon)
           wc.hIcon        = LoadIcon( NULL, IDI_WINLOGO );
+#else //TARGET_HOST_WINCE
+        wc.style          = CS_HREDRAW | CS_VREDRAW;
+#endif
 
         wc.hCursor        = LoadCursor( NULL, IDC_ARROW );
         wc.hbrBackground  = NULL;
         wc.lpszMenuName   = NULL;
-        wc.lpszClassName  = "FREEGLUT";
+        wc.lpszClassName  = _T("FREEGLUT");
 
         /*
          * Register the window class
@@ -204,8 +210,10 @@ void fgInitialize( const char* displayName )
 
 #endif
 
+#if !TARGET_HOST_WINCE
     fgJoystickInit( 0 );
     fgJoystickInit( 1 );
+#endif /* !TARGET_HOST_WINCE */
 
     fgState.Initialised = GL_TRUE;
 }
@@ -249,7 +257,9 @@ void fgDeinitialize( void )
         free( timer );
     }
 
+#if !TARGET_HOST_WINCE
     fgJoystickClose( );
+#endif /* !TARGET_HOST_WINCE */
 
     fgState.Initialised = GL_FALSE;
 
@@ -272,7 +282,7 @@ void fgDeinitialize( void )
     fgState.ActionOnWindowClose = GLUT_ACTION_EXIT;
     fgState.ExecState           = GLUT_EXEC_STATE_INIT;
 
-    fgState.IgnoreKeyRepeat = GL_TRUE;
+    fgState.KeyRepeat       = GL_FALSE;
     fgState.Modifiers       = 0xffffffff;
 
     fgState.GameModeSize.X  = 640;
@@ -321,7 +331,7 @@ void fgDeinitialize( void )
  * Everything inside the following #ifndef is copied from the X sources.
  */
 
-#if TARGET_HOST_WIN32
+#if TARGET_HOST_WIN32 || TARGET_HOST_WINCE
 
 /*
 
@@ -516,6 +526,7 @@ void FGAPIENTRY glutInit( int* pargc, char** argv )
     fgElapsedTime( );
 
     /* check if GLUT_FPS env var is set */
+#if !TARGET_HOST_WINCE
     {
         const char *fps = getenv( "GLUT_FPS" );
         if( fps )
@@ -612,6 +623,8 @@ void FGAPIENTRY glutInit( int* pargc, char** argv )
         }
     }
 
+#endif /* TARGET_HOST_WINCE */
+
     /*
      * Have the display created now. If there wasn't a "-display"
      * in the program arguments, we will use the DISPLAY environment