Fixed warnings on Linux where GCC under padantic complained ISO C casting wasn't...
[freeglut] / src / fg_init.c
index a408bbe..b8a38f7 100644 (file)
@@ -681,18 +681,23 @@ void FGAPIENTRY glutInitErrorFuncUcall( FGErrorUC callback, FGCBUserData userDat
     fgState.ErrorFuncData = userData;
 }
 
-static void glutInitErrorFuncCallback( const char *fmt, va_list ap, FGCBUserData userData )
+static void fghInitErrorFuncCallback( const char *fmt, va_list ap, FGCBUserData userData )
 {
-    FGError callback = (FGError)userData;
-    callback( fmt, ap );
+    FGError* callback = (FGError*)&userData;
+    (*callback)( fmt, ap );
 }
 
 void FGAPIENTRY glutInitErrorFunc( FGError callback )
 {
-  if (callback)
-    glutInitErrorFuncUcall( glutInitErrorFuncCallback, (FGCBUserData)callback );
-  else
-    glutInitErrorFuncUcall( NULL, NULL );
+    if (callback)
+    {
+        FGError* reference = &callback;
+        glutInitErrorFuncUcall( fghInitErrorFuncCallback, *((FGCBUserData*)reference) );
+    }
+    else
+    {
+        glutInitErrorFuncUcall( NULL, NULL );
+    }
 }
 
 /*
@@ -705,18 +710,23 @@ void FGAPIENTRY glutInitWarningFuncUcall( FGWarningUC callback, FGCBUserData use
     fgState.WarningFuncData = userData;
 }
 
-static void glutInitWarningFuncCallback( const char *fmt, va_list ap, FGCBUserData userData )
+static void fghInitWarningFuncCallback( const char *fmt, va_list ap, FGCBUserData userData )
 {
-    FGWarning callback = (FGWarning)userData;
-    callback( fmt, ap );
+    FGWarning* callback = (FGWarning*)&userData;
+    (*callback)( fmt, ap );
 }
 
 void FGAPIENTRY glutInitWarningFunc( FGWarning callback )
 {
-  if (callback)
-    glutInitWarningFuncUcall( glutInitWarningFuncCallback, (FGCBUserData)callback );
-  else
-    glutInitWarningFuncUcall( NULL, NULL );
+    if (callback)
+    {
+        FGWarning* reference = &callback;
+        glutInitWarningFuncUcall( fghInitWarningFuncCallback, *((FGCBUserData*)reference) );
+    }
+    else
+    {
+        glutInitWarningFuncUcall( NULL, NULL );
+    }
 }
 
 /*** END OF FILE ***/