core/logic/GameConfigs.cpp
changeset 3664 3db8a3ec8d56
parent 3320 f1ccb4a17a06
child 3961 0dc477c29792
     1.1 --- a/core/logic/GameConfigs.cpp	Mon Aug 13 14:59:31 2012 -0400
     1.2 +++ b/core/logic/GameConfigs.cpp	Sun Oct 14 18:10:46 2012 -0400
     1.3 @@ -525,9 +525,16 @@
     1.4  					s_TempSig.library, 
     1.5  					m_CurFile);
     1.6  			} else {
     1.7 -#if defined PLATFORM_POSIX
     1.8  				if (s_TempSig.sig[0] == '@')
     1.9  				{
    1.10 +#if defined PLATFORM_WINDOWS
    1.11 +					MEMORY_BASIC_INFORMATION mem;
    1.12 +
    1.13 +					if (VirtualQuery(addrInBase, &mem, sizeof(mem)))
    1.14 +						final_addr = g_MemUtils.ResolveSymbol(mem.AllocationBase, &s_TempSig.sig[1]);
    1.15 +					else
    1.16 +						smcore.LogError("[SM] Unable to find library \"%s\" in memory (gameconf \"%s\")", s_TempSig.library, m_File);
    1.17 +#elif defined PLATFORM_POSIX
    1.18  					Dl_info info;
    1.19  					/* GNU only: returns 0 on error, inconsistent! >:[ */
    1.20  					if (dladdr(addrInBase, &info) != 0)
    1.21 @@ -550,12 +557,12 @@
    1.22  							s_TempSig.library,
    1.23  							m_File);
    1.24  					}
    1.25 +#endif
    1.26  				}
    1.27  				if (final_addr)
    1.28  				{
    1.29  					goto skip_find;
    1.30  				}
    1.31 -#endif
    1.32  				/* First, preprocess the signature */
    1.33  				unsigned char real_sig[511];
    1.34  				size_t real_bytes;
    1.35 @@ -572,9 +579,7 @@
    1.36  				}
    1.37  			}
    1.38  
    1.39 -#if defined PLATFORM_POSIX
    1.40  skip_find:
    1.41 -#endif
    1.42  			m_Sigs.replace(m_offset, final_addr);
    1.43  			m_ParseState = PSTATE_GAMEDEFS_SIGNATURES;
    1.44