X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=sys_shared.c;h=91f72d41294aa9d14d6572ca6f3a09ee7b3a5d3b;hb=eb59c580e111af2abb37775ef320151776fe84d1;hp=ed4a487f1c7369cb599b1452f57880212738ba7b;hpb=427c73e03f1af5ace70bf75db4d1b1661a6a6492;p=xonotic%2Fdarkplaces.git diff --git a/sys_shared.c b/sys_shared.c index ed4a487f..91f72d41 100644 --- a/sys_shared.c +++ b/sys_shared.c @@ -1,4 +1,3 @@ - #include "quakedef.h" # include #ifndef WIN32 @@ -11,19 +10,36 @@ static char sys_timestring[128]; char *Sys_TimeString(const char *timeformat) { time_t mytime = time(NULL); +#if _MSC_VER >= 1400 + struct tm mytm; + localtime_s(&mytm, &mytime); + strftime(sys_timestring, sizeof(sys_timestring), timeformat, &mytm); +#else strftime(sys_timestring, sizeof(sys_timestring), timeformat, localtime(&mytime)); +#endif return sys_timestring; } extern qboolean host_shuttingdown; -void Sys_Quit (void) +void Sys_Quit (int returnvalue) { + if (COM_CheckParm("-profilegameonly")) + Sys_AllowProfiling(false); host_shuttingdown = true; Host_Shutdown(); - exit(0); + exit(returnvalue); +} + +void Sys_AllowProfiling(qboolean enable) +{ +#if defined(__linux__) || defined(__FreeBSD__) +int moncontrol(int); + moncontrol(enable); +#endif } + /* =============================================================================== @@ -41,57 +57,74 @@ qboolean Sys_LoadLibrary (const char** dllnames, dllhandle_t* handle, const dllf if (handle == NULL) return false; +#ifndef WIN32 +#ifdef PREFER_PRELOAD + dllhandle = dlopen(NULL, RTLD_LAZY | RTLD_GLOBAL); + if(dllhandle) + { + for (func = fcts; func && func->name != NULL; func++) + if (!(*func->funcvariable = (void *) Sys_GetProcAddress (dllhandle, func->name))) + { + dlclose(dllhandle); + goto notfound; + } + Con_Printf ("All of %s's functions were already linked in! Not loading dynamically...\n", dllnames[0]); + *handle = dllhandle; + return true; + } +notfound: +#endif +#endif + // Initializations for (func = fcts; func && func->name != NULL; func++) *func->funcvariable = NULL; // Try every possible name + Con_Printf ("Trying to load library..."); for (i = 0; dllnames[i] != NULL; i++) { + Con_Printf (" \"%s\"", dllnames[i]); #ifdef WIN32 dllhandle = LoadLibrary (dllnames[i]); #else - dllhandle = dlopen (dllnames[i], RTLD_LAZY); + dllhandle = dlopen (dllnames[i], RTLD_LAZY | RTLD_GLOBAL); #endif if (dllhandle) break; - - Con_Printf ("Can't load \"%s\".\n", dllnames[i]); } - // No DLL found - if (! dllhandle) + // see if the names can be loaded relative to the executable path + // (this is for Mac OSX which does not check next to the executable) + if (!dllhandle && strrchr(com_argv[0], '/')) { - // see if the names can be loaded relative to the executable path - // (this is for Mac OSX which does not check next to the executable) - if (strrchr(com_argv[0], '/')) + char path[MAX_OSPATH]; + strlcpy(path, com_argv[0], sizeof(path)); + strrchr(path, '/')[1] = 0; + for (i = 0; dllnames[i] != NULL; i++) { - char path[MAX_OSPATH]; - strlcpy(path, com_argv[0], sizeof(path)); - strrchr(path, '/')[1] = 0; - for (i = 0; dllnames[i] != NULL; i++) - { - char temp[MAX_OSPATH]; - strlcpy(temp, path, sizeof(temp)); - strlcat(temp, dllnames[i], sizeof(temp)); + char temp[MAX_OSPATH]; + strlcpy(temp, path, sizeof(temp)); + strlcat(temp, dllnames[i], sizeof(temp)); + Con_Printf (" \"%s\"", temp); #ifdef WIN32 - dllhandle = LoadLibrary (temp); + dllhandle = LoadLibrary (temp); #else - dllhandle = dlopen (temp, RTLD_LAZY); + dllhandle = dlopen (temp, RTLD_LAZY | RTLD_GLOBAL); #endif - if (dllhandle) - break; - - Con_Printf ("Can't load \"%s\".\n", temp); - } - if (! dllhandle) - return false; + if (dllhandle) + break; } - else - return false; } - Con_Printf("\"%s\" loaded.\n", dllnames[i]); + // No DLL found + if (! dllhandle) + { + Con_Printf(" - failed.\n"); + return false; + } + + Con_Printf(" - loaded.\n"); // Get the function adresses for (func = fcts; func && func->name != NULL; func++)