r550 - in trunk: . code/cgame code/client code/game code/q3_ui code/qcommon code/server code/ui code/unix code/win32

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Sat Feb 18 14:07:24 EST 2006


Author: ludwig
Date: 2006-02-18 14:07:23 -0500 (Sat, 18 Feb 2006)
New Revision: 550

Modified:
   trunk/README
   trunk/code/cgame/cg_main.c
   trunk/code/cgame/cg_syscalls.c
   trunk/code/client/cl_cgame.c
   trunk/code/client/cl_ui.c
   trunk/code/game/g_main.c
   trunk/code/game/g_syscalls.c
   trunk/code/q3_ui/ui_main.c
   trunk/code/qcommon/common.c
   trunk/code/qcommon/q_shared.h
   trunk/code/qcommon/qcommon.h
   trunk/code/qcommon/vm.c
   trunk/code/qcommon/vm_interpreted.c
   trunk/code/qcommon/vm_local.h
   trunk/code/qcommon/vm_x86.c
   trunk/code/server/sv_game.c
   trunk/code/ui/ui_main.c
   trunk/code/ui/ui_syscalls.c
   trunk/code/unix/unix_main.c
   trunk/code/win32/win_main.c
Log:
- change long to intptr_t for 64bit windows compatability
- change vmMain arguments back to int. 64bit types are apparently not
  needed there. Only the syscall function needs them.


Modified: trunk/README
===================================================================
--- trunk/README	2006-02-18 19:03:06 UTC (rev 549)
+++ trunk/README	2006-02-18 19:07:23 UTC (rev 550)
@@ -148,11 +148,19 @@
   If you wish to compile external mods as shared libraries on a 64bit platform,
   and the mod source is derived from the id Q3 SDK, you will need to modify the
   interface code a little. Open the files ending in _syscalls.c and change
-  every instance of int to long in the declaration of the syscall function
+  every instance of int to intptr_t in the declaration of the syscall function
   pointer and the dllEntry function. Also find the vmMain function for each
-  module (usually in cg_main.c g_main.c etc.) and similarly replace every
-  instance of int in the prototype with long.
+  module (usually in cg_main.c g_main.c etc.) and similarly replace the return
+  value in the prototype with intptr_t (arg0, arg1, ...stay int).
 
+  Add the following code snippet to q_shared.h:
+
+    #ifdef Q3_VM
+    typedef int intptr_t;
+    #else
+    #include <stdint.h>
+    #endif
+
   Note if you simply wish to run mods on a 64bit platform you do not need to
   recompile anything since by default Q3 uses a virtual machine system.
 

Modified: trunk/code/cgame/cg_main.c
===================================================================
--- trunk/code/cgame/cg_main.c	2006-02-18 19:03:06 UTC (rev 549)
+++ trunk/code/cgame/cg_main.c	2006-02-18 19:07:23 UTC (rev 550)
@@ -43,7 +43,7 @@
 This must be the very first function compiled into the .q3vm file
 ================
 */
-long vmMain( long command, long arg0, long arg1, long arg2, long arg3, long arg4, long arg5, long arg6, long arg7, long arg8, long arg9, long arg10, long arg11  ) {
+intptr_t vmMain( int command, int arg0, int arg1, int arg2, int arg3, int arg4, int arg5, int arg6, int arg7, int arg8, int arg9, int arg10, int arg11  ) {
 
 	switch ( command ) {
 	case CG_INIT:

Modified: trunk/code/cgame/cg_syscalls.c
===================================================================
--- trunk/code/cgame/cg_syscalls.c	2006-02-18 19:03:06 UTC (rev 549)
+++ trunk/code/cgame/cg_syscalls.c	2006-02-18 19:07:23 UTC (rev 550)
@@ -28,10 +28,10 @@
 
 #include "cg_local.h"
 
-static long (QDECL *syscall)( long arg, ... ) = (long (QDECL *)( long, ...))-1;
+static intptr_t (QDECL *syscall)( intptr_t arg, ... ) = (intptr_t (QDECL *)( intptr_t, ...))-1;
 
 
-void dllEntry( long (QDECL  *syscallptr)( long arg,... ) ) {
+void dllEntry( intptr_t (QDECL  *syscallptr)( intptr_t arg,... ) ) {
 	syscall = syscallptr;
 }
 

Modified: trunk/code/client/cl_cgame.c
===================================================================
--- trunk/code/client/cl_cgame.c	2006-02-18 19:03:06 UTC (rev 549)
+++ trunk/code/client/cl_cgame.c	2006-02-18 19:07:23 UTC (rev 550)
@@ -412,7 +412,7 @@
 The cgame module is making a system call
 ====================
 */
-long CL_CgameSystemCalls( long *args ) {
+intptr_t CL_CgameSystemCalls( intptr_t *args ) {
 	switch( args[0] ) {
 	case CG_PRINT:
 		Com_Printf( "%s", VMA(1) );

Modified: trunk/code/client/cl_ui.c
===================================================================
--- trunk/code/client/cl_ui.c	2006-02-18 19:03:06 UTC (rev 549)
+++ trunk/code/client/cl_ui.c	2006-02-18 19:07:23 UTC (rev 550)
@@ -764,7 +764,7 @@
 The ui module is making a system call
 ====================
 */
-long CL_UISystemCalls( long *args ) {
+intptr_t CL_UISystemCalls( intptr_t *args ) {
 	switch( args[0] ) {
 	case UI_ERROR:
 		Com_Error( ERR_DROP, "%s", VMA(1) );

Modified: trunk/code/game/g_main.c
===================================================================
--- trunk/code/game/g_main.c	2006-02-18 19:03:06 UTC (rev 549)
+++ trunk/code/game/g_main.c	2006-02-18 19:07:23 UTC (rev 550)
@@ -200,7 +200,7 @@
 This must be the very first function compiled into the .q3vm file
 ================
 */
-long vmMain( long command, long arg0, long arg1, long arg2, long arg3, long arg4, long arg5, long arg6, long arg7, long arg8, long arg9, long arg10, long arg11  ) {
+intptr_t vmMain( int command, int arg0, int arg1, int arg2, int arg3, int arg4, int arg5, int arg6, int arg7, int arg8, int arg9, int arg10, int arg11  ) {
 	switch ( command ) {
 	case GAME_INIT:
 		G_InitGame( arg0, arg1, arg2 );
@@ -209,7 +209,7 @@
 		G_ShutdownGame( arg0 );
 		return 0;
 	case GAME_CLIENT_CONNECT:
-		return (long)ClientConnect( arg0, arg1, arg2 );
+		return (intptr_t)ClientConnect( arg0, arg1, arg2 );
 	case GAME_CLIENT_THINK:
 		ClientThink( arg0 );
 		return 0;

Modified: trunk/code/game/g_syscalls.c
===================================================================
--- trunk/code/game/g_syscalls.c	2006-02-18 19:03:06 UTC (rev 549)
+++ trunk/code/game/g_syscalls.c	2006-02-18 19:07:23 UTC (rev 550)
@@ -28,10 +28,10 @@
 #error "Do not use in VM build"
 #endif
 
-static long (QDECL *syscall)( long arg, ... ) = (long (QDECL *)( long, ...))-1;
+static intptr_t (QDECL *syscall)( intptr_t arg, ... ) = (intptr_t (QDECL *)( intptr_t, ...))-1;
 
 
-void dllEntry( long (QDECL *syscallptr)( long arg,... ) ) {
+void dllEntry( intptr_t (QDECL *syscallptr)( intptr_t arg,... ) ) {
 	syscall = syscallptr;
 }
 

Modified: trunk/code/q3_ui/ui_main.c
===================================================================
--- trunk/code/q3_ui/ui_main.c	2006-02-18 19:03:06 UTC (rev 549)
+++ trunk/code/q3_ui/ui_main.c	2006-02-18 19:07:23 UTC (rev 550)
@@ -40,7 +40,7 @@
 This must be the very first function compiled into the .qvm file
 ================
 */
-long vmMain( long command, long arg0, long arg1, long arg2, long arg3, long arg4, long arg5, long arg6, long arg7, long arg8, long arg9, long arg10, long arg11  ) {
+intptr_t vmMain( int command, int arg0, int arg1, int arg2, int arg3, int arg4, int arg5, int arg6, int arg7, int arg8, int arg9, int arg10, int arg11  ) {
 	switch ( command ) {
 	case UI_GETAPIVERSION:
 		return UI_API_VERSION;

Modified: trunk/code/qcommon/common.c
===================================================================
--- trunk/code/qcommon/common.c	2006-02-18 19:03:06 UTC (rev 549)
+++ trunk/code/qcommon/common.c	2006-02-18 19:07:23 UTC (rev 550)
@@ -928,7 +928,7 @@
 	//
 	size += sizeof(memblock_t);	// account for size of block header
 	size += 4;					// space for memory trash tester
-	size = PAD(size, sizeof(long));		// align to 32/64 bit boundary
+	size = PAD(size, sizeof(intptr_t));		// align to 32/64 bit boundary
 	
 	base = rover = zone->rover;
 	start = base->prev;
@@ -1530,7 +1530,7 @@
 		Com_Error( ERR_FATAL, "Hunk data failed to allocate %i megs", s_hunkTotal / (1024*1024) );
 	}
 	// cacheline align
-	s_hunkData = (byte *) ( ( (long)s_hunkData + 31 ) & ~31 );
+	s_hunkData = (byte *) ( ( (intptr_t)s_hunkData + 31 ) & ~31 );
 	Hunk_Clear();
 
 	Cmd_AddCommand( "meminfo", Com_Meminfo_f );
@@ -1750,7 +1750,7 @@
 
 	Hunk_SwapBanks();
 
-	size = PAD(size, sizeof(long)) + sizeof( hunkHeader_t );
+	size = PAD(size, sizeof(intptr_t)) + sizeof( hunkHeader_t );
 
 	if ( hunk_temp->temp + hunk_permanent->permanent + size > s_hunkTotal ) {
 		Com_Error( ERR_DROP, "Hunk_AllocateTempMemory: failed on %i", size );

Modified: trunk/code/qcommon/q_shared.h
===================================================================
--- trunk/code/qcommon/q_shared.h	2006-02-18 19:03:06 UTC (rev 549)
+++ trunk/code/qcommon/q_shared.h	2006-02-18 19:07:23 UTC (rev 550)
@@ -102,6 +102,12 @@
 
 //=============================================================
 
+#ifdef Q3_VM
+typedef int intptr_t;
+#else
+#include <inttypes.h>
+#endif
+
 typedef unsigned char 		byte;
 
 typedef enum {qfalse, qtrue}	qboolean;

Modified: trunk/code/qcommon/qcommon.h
===================================================================
--- trunk/code/qcommon/qcommon.h	2006-02-18 19:03:06 UTC (rev 549)
+++ trunk/code/qcommon/qcommon.h	2006-02-18 19:07:23 UTC (rev 550)
@@ -317,7 +317,7 @@
 } sharedTraps_t;
 
 void	VM_Init( void );
-vm_t	*VM_Create( const char *module, long (*systemCalls)(long *), 
+vm_t	*VM_Create( const char *module, intptr_t (*systemCalls)(intptr_t *), 
 				   vmInterpret_t interpret );
 // module should be bare: "cgame", not "cgame.dll" or "vm/cgame.qvm"
 
@@ -325,18 +325,18 @@
 void	VM_Clear(void);
 vm_t	*VM_Restart( vm_t *vm );
 
-long		QDECL VM_Call( vm_t *vm, long callNum, ... );
+intptr_t		QDECL VM_Call( vm_t *vm, int callNum, ... );
 
 void	VM_Debug( int level );
 
-void	*VM_ArgPtr( long intValue );
-void	*VM_ExplicitArgPtr( vm_t *vm, long intValue );
+void	*VM_ArgPtr( intptr_t intValue );
+void	*VM_ExplicitArgPtr( vm_t *vm, intptr_t intValue );
 
 #define	VMA(x) VM_ArgPtr(args[x])
-static ID_INLINE float _vmf(long x)
+static ID_INLINE float _vmf(intptr_t x)
 {
 	union {
-		long l;
+		intptr_t l;
 		float f;
 	} t;
 	t.l = x;
@@ -963,8 +963,8 @@
 
 // general development dll loading for virtual machine testing
 // fqpath param added 7/20/02 by T.Ray - Sys_LoadDll is only called in vm.c at this time
-void	* QDECL Sys_LoadDll( const char *name, char *fqpath , long (QDECL **entryPoint)(long, ...),
-				  long (QDECL *systemcalls)(long, ...) );
+void	* QDECL Sys_LoadDll( const char *name, char *fqpath , intptr_t (QDECL **entryPoint)(int, ...),
+				  intptr_t (QDECL *systemcalls)(intptr_t, ...) );
 void	Sys_UnloadDll( void *dllHandle );
 
 void	Sys_UnloadGame( void );

Modified: trunk/code/qcommon/vm.c
===================================================================
--- trunk/code/qcommon/vm.c	2006-02-18 19:03:06 UTC (rev 549)
+++ trunk/code/qcommon/vm.c	2006-02-18 19:07:23 UTC (rev 550)
@@ -329,10 +329,10 @@
  
 ============
 */
-long QDECL VM_DllSyscall( long arg, ... ) {
+intptr_t QDECL VM_DllSyscall( intptr_t arg, ... ) {
 #if !id386
   // rcg010206 - see commentary above
-  long args[16];
+  intptr_t args[16];
   int i;
   va_list ap;
   
@@ -340,7 +340,7 @@
   
   va_start(ap, arg);
   for (i = 1; i < sizeof (args) / sizeof (args[i]); i++)
-    args[i] = va_arg(ap, long);
+    args[i] = va_arg(ap, intptr_t);
   va_end(ap);
   
   return currentVM->systemCall( args );
@@ -471,7 +471,7 @@
 	// DLL's can't be restarted in place
 	if ( vm->dllHandle ) {
 		char	name[MAX_QPATH];
-		long	(*systemCall)( long *parms );
+		intptr_t	(*systemCall)( intptr_t *parms );
 		
 		systemCall = vm->systemCall;	
 		Q_strncpyz( name, vm->name, sizeof( name ) );
@@ -507,7 +507,7 @@
 
 #define	STACK_SIZE	0x20000
 
-vm_t *VM_Create( const char *module, long (*systemCalls)(long *), 
+vm_t *VM_Create( const char *module, intptr_t (*systemCalls)(intptr_t *), 
 				vmInterpret_t interpret ) {
 	vm_t		*vm;
 	vmHeader_t	*header;
@@ -648,7 +648,7 @@
 	lastVM = NULL;
 }
 
-void *VM_ArgPtr( long intValue ) {
+void *VM_ArgPtr( intptr_t intValue ) {
 	if ( !intValue ) {
 		return NULL;
 	}
@@ -664,7 +664,7 @@
 	}
 }
 
-void *VM_ExplicitArgPtr( vm_t *vm, long intValue ) {
+void *VM_ExplicitArgPtr( vm_t *vm, intptr_t intValue ) {
 	if ( !intValue ) {
 		return NULL;
 	}
@@ -709,9 +709,9 @@
 #define	MAX_STACK	256
 #define	STACK_MASK	(MAX_STACK-1)
 
-long	QDECL VM_Call( vm_t *vm, long callnum, ... ) {
+intptr_t	QDECL VM_Call( vm_t *vm, int callnum, ... ) {
 	vm_t	*oldVM;
-	int		r;
+	intptr_t r;
 	int i;
 
 	if ( !vm ) {
@@ -729,11 +729,11 @@
 	// if we have a dll loaded, call it directly
 	if ( vm->entryPoint ) {
 		//rcg010207 -  see dissertation at top of VM_DllSyscall() in this file.
-		long args[10];
+		int args[10];
 		va_list ap;
 		va_start(ap, callnum);
 		for (i = 0; i < sizeof (args) / sizeof (args[i]); i++) {
-			args[i] = va_arg(ap, long);
+			args[i] = va_arg(ap, int);
 		}
 		va_end(ap);
 
@@ -758,7 +758,7 @@
 		a.callnum = callnum;
 		va_start(ap, callnum);
 		for (i = 0; i < sizeof (a.args) / sizeof (a.args[0]); i++) {
-			a.args[i] = va_arg(ap, long);
+			a.args[i] = va_arg(ap, int);
 		}
 		va_end(ap);
 #ifndef NO_VM_COMPILED
@@ -886,6 +886,6 @@
 		f = fopen("syscalls.log", "w" );
 	}
 	callnum++;
-	fprintf(f, "%i: %li (%i) = %i %i %i %i\n", callnum, (long)(args - (int *)currentVM->dataBase),
+	fprintf(f, "%i: %"PRIiPTR" (%i) = %i %i %i %i\n", callnum, (intptr_t)(args - (int *)currentVM->dataBase),
 		args[0], args[1], args[2], args[3], args[4] );
 }

Modified: trunk/code/qcommon/vm_interpreted.c
===================================================================
--- trunk/code/qcommon/vm_interpreted.c	2006-02-18 19:03:06 UTC (rev 549)
+++ trunk/code/qcommon/vm_interpreted.c	2006-02-18 19:07:23 UTC (rev 550)
@@ -493,7 +493,7 @@
 
 				src = (int *)&image[ r0&dataMask ];
 				dest = (int *)&image[ r1&dataMask ];
-				if ( ( (long)src | (long)dest | count ) & 3 ) {
+				if ( ( (intptr_t)src | (intptr_t)dest | count ) & 3 ) {
 					// happens in westernq3
 					Com_Printf( S_COLOR_YELLOW "Warning: OP_BLOCK_COPY not dword aligned\n");
 				}
@@ -534,16 +534,16 @@
 
 //VM_LogSyscalls( (int *)&image[ programStack + 4 ] );
 				{
-					long* argptr = (long *)&image[ programStack + 4 ];
+					intptr_t* argptr = (intptr_t *)&image[ programStack + 4 ];
 				#if __WORDSIZE == 64
 				// the vm has ints on the stack, we expect
 				// longs so we have to convert it
-					long argarr[16];
+					intptr_t argarr[16];
 					int i;
 					for (i = 0; i < 16; ++i) {
 						argarr[i] = *(int*)&image[ programStack + 4 + 4*i ];
-						argptr = argarr;
 					}
+					argptr = argarr;
 				#endif
 					r = vm->systemCall( argptr );
 				}

Modified: trunk/code/qcommon/vm_local.h
===================================================================
--- trunk/code/qcommon/vm_local.h	2006-02-18 19:03:06 UTC (rev 549)
+++ trunk/code/qcommon/vm_local.h	2006-02-18 19:07:23 UTC (rev 550)
@@ -127,7 +127,7 @@
     // DO NOT MOVE OR CHANGE THESE WITHOUT CHANGING THE VM_OFFSET_* DEFINES
     // USED BY THE ASM CODE
     int			programStack;		// the vm may be recursively entered
-    long			(*systemCall)( long *parms );
+    intptr_t			(*systemCall)( intptr_t *parms );
 
 	//------------------------------------
    
@@ -135,7 +135,8 @@
 
 	// for dynamic linked modules
 	void		*dllHandle;
-	long			(QDECL *entryPoint)( long callNum, ... );
+	intptr_t			(QDECL *entryPoint)( int callNum, ... );
+	void (*destroy)(vm_t* self);
 
 	// for interpreted modules
 	qboolean	currentlyInterpreting;

Modified: trunk/code/qcommon/vm_x86.c
===================================================================
--- trunk/code/qcommon/vm_x86.c	2006-02-18 19:03:06 UTC (rev 549)
+++ trunk/code/qcommon/vm_x86.c	2006-02-18 19:07:23 UTC (rev 550)
@@ -192,7 +192,7 @@
 	currentVM->programStack = callProgramStack - 4;
 	*(int *)((byte *)currentVM->dataBase + callProgramStack + 4) = callSyscallNum;
 	//VM_LogSyscalls((int *)((byte *)currentVM->dataBase + callProgramStack + 4) );
-	*(callOpStack2+1) = currentVM->systemCall( (long *)((byte *)currentVM->dataBase + callProgramStack + 4) );
+	*(callOpStack2+1) = currentVM->systemCall( (intptr_t *)((byte *)currentVM->dataBase + callProgramStack + 4) );
 
  	currentVM = savedVM;
 }

Modified: trunk/code/server/sv_game.c
===================================================================
--- trunk/code/server/sv_game.c	2006-02-18 19:03:06 UTC (rev 549)
+++ trunk/code/server/sv_game.c	2006-02-18 19:07:23 UTC (rev 550)
@@ -305,7 +305,7 @@
 The module is making a system call
 ====================
 */
-long SV_GameSystemCalls( long *args ) {
+intptr_t SV_GameSystemCalls( intptr_t *args ) {
 	switch( args[0] ) {
 	case G_PRINT:
 		Com_Printf( "%s", VMA(1) );

Modified: trunk/code/ui/ui_main.c
===================================================================
--- trunk/code/ui/ui_main.c	2006-02-18 19:03:06 UTC (rev 549)
+++ trunk/code/ui/ui_main.c	2006-02-18 19:07:23 UTC (rev 550)
@@ -165,7 +165,7 @@
 void _UI_MouseEvent( int dx, int dy );
 void _UI_Refresh( int realtime );
 qboolean _UI_IsFullscreen( void );
-long vmMain( long command, long arg0, long arg1, long arg2, long arg3, long arg4, long arg5, long arg6, long arg7, long arg8, long arg9, long arg10, long arg11  ) {
+intptr_t vmMain( int command, int arg0, int arg1, int arg2, int arg3, int arg4, int arg5, int arg6, int arg7, int arg8, int arg9, int arg10, int arg11  ) {
   switch ( command ) {
 	  case UI_GETAPIVERSION:
 		  return UI_API_VERSION;

Modified: trunk/code/ui/ui_syscalls.c
===================================================================
--- trunk/code/ui/ui_syscalls.c	2006-02-18 19:03:06 UTC (rev 549)
+++ trunk/code/ui/ui_syscalls.c	2006-02-18 19:07:23 UTC (rev 550)
@@ -28,9 +28,9 @@
 #error "Do not use in VM build"
 #endif
 
-static long (QDECL *syscall)( long arg, ... ) = (long (QDECL *)( long, ...))-1;
+static intptr_t (QDECL *syscall)( intptr_t arg, ... ) = (intptr_t (QDECL *)( intptr_t, ...))-1;
 
-void dllEntry( long (QDECL *syscallptr)( long arg,... ) ) {
+void dllEntry( intptr_t (QDECL *syscallptr)( intptr_t arg,... ) ) {
 	syscall = syscallptr;
 }
 

Modified: trunk/code/unix/unix_main.c
===================================================================
--- trunk/code/unix/unix_main.c	2006-02-18 19:03:06 UTC (rev 549)
+++ trunk/code/unix/unix_main.c	2006-02-18 19:07:23 UTC (rev 550)
@@ -766,11 +766,11 @@
 }
 
 void *Sys_LoadDll( const char *name, char *fqpath ,
-                   long (**entryPoint)(long, ...),
-                   long (*systemcalls)(long, ...) ) 
+                   intptr_t (**entryPoint)(int, ...),
+                   intptr_t (*systemcalls)(intptr_t, ...) ) 
 {
   void *libHandle;
-  void  (*dllEntry)( long (*syscallptr)(long, ...) );
+  void  (*dllEntry)( intptr_t (*syscallptr)(intptr_t, ...) );
   char  curpath[MAX_OSPATH];
   char  fname[MAX_OSPATH];
   char  *basepath;

Modified: trunk/code/win32/win_main.c
===================================================================
--- trunk/code/win32/win_main.c	2006-02-18 19:03:06 UTC (rev 549)
+++ trunk/code/win32/win_main.c	2006-02-18 19:07:23 UTC (rev 550)
@@ -526,10 +526,10 @@
 // fqpath param added 7/20/02 by T.Ray - Sys_LoadDll is only called in vm.c at this time
 // fqpath will be empty if dll not loaded, otherwise will hold fully qualified path of dll module loaded
 // fqpath buffersize must be at least MAX_QPATH+1 bytes long
-void * QDECL Sys_LoadDll( const char *name, char *fqpath , long (QDECL **entryPoint)(long, ...),
-				  long (QDECL *systemcalls)(long, ...) ) {
+void * QDECL Sys_LoadDll( const char *name, char *fqpath , intptr_t (QDECL **entryPoint)(intptr_t, ...),
+				  intptr_t (QDECL *systemcalls)(intptr_t, ...) ) {
 	HINSTANCE	libHandle;
-	void	(QDECL *dllEntry)( long (QDECL *syscallptr)(long, ...) );
+	void	(QDECL *dllEntry)( intptr_t (QDECL *syscallptr)(intptr_t, ...) );
 	char	*basepath;
 	char	*cdpath;
 	char	*gamedir;
@@ -606,8 +606,8 @@
 	}
 #endif
 
-	dllEntry = ( void (QDECL *)(long (QDECL *)( long, ... ) ) )GetProcAddress( libHandle, "dllEntry" ); 
-	*entryPoint = (long (QDECL *)(long,...))GetProcAddress( libHandle, "vmMain" );
+	dllEntry = ( void (QDECL *)(intptr_t (QDECL *)( intptr_t, ... ) ) )GetProcAddress( libHandle, "dllEntry" ); 
+	*entryPoint = (intptr_t (QDECL *)(intptr_t,...))GetProcAddress( libHandle, "vmMain" );
 	if ( !*entryPoint || !dllEntry ) {
 		FreeLibrary( libHandle );
 		return NULL;




More information about the quake3-commits mailing list