]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - sys_shared.c
allow control over User-Agent:
[xonotic/darkplaces.git] / sys_shared.c
index 34fd2f7ae6098feaf904f51d573f46ee5be4259d..d033323a9d0f161be28698dea7bf3ef0d0bac411 100644 (file)
@@ -434,10 +434,23 @@ void Sys_Sleep(int microseconds)
        if(sys_debugsleep.integer)
        {
                t = Sys_DirtyTime() - t;
-               printf("%d %d # debugsleep\n", microseconds, (unsigned int)(t * 1000000));
+               Sys_PrintfToTerminal("%d %d # debugsleep\n", microseconds, (unsigned int)(t * 1000000));
        }
 }
 
+void Sys_PrintfToTerminal(const char *fmt, ...)
+{
+       va_list argptr;
+       char msg[MAX_INPUTLINE];
+
+       va_start(argptr,fmt);
+       dpvsnprintf(msg,sizeof(msg),fmt,argptr);
+       va_end(argptr);
+
+       Sys_PrintToTerminal(msg);
+}
+
+#ifndef WIN32
 static const char *Sys_FindInPATH(const char *name, char namesep, const char *PATH, char pathsep, char *buf, size_t bufsize)
 {
        const char *p = PATH;
@@ -460,6 +473,7 @@ static const char *Sys_FindInPATH(const char *name, char namesep, const char *PA
        }
        return name;
 }
+#endif
 
 static const char *Sys_FindExecutableName(void)
 {
@@ -549,3 +563,70 @@ qboolean Sys_HaveSSE2(void)
        return false;
 }
 #endif
+
+/// called to set process priority for dedicated servers
+#if defined(__linux__)
+#include <sys/resource.h>
+#include <errno.h>
+static int nicelevel;
+static qboolean nicepossible;
+static qboolean isnice;
+void Sys_InitProcessNice (void)
+{
+       struct rlimit lim;
+       nicepossible = false;
+       if(COM_CheckParm("-nonice"))
+               return;
+       errno = 0;
+       nicelevel = getpriority(PRIO_PROCESS, 0);
+       if(errno)
+       {
+               Con_Printf("Kernel does not support reading process priority - cannot use niceness\n");
+               return;
+       }
+       if(getrlimit(RLIMIT_NICE, &lim))
+       {
+               Con_Printf("Kernel does not support lowering nice level again - cannot use niceness\n");
+               return;
+       }
+       if(lim.rlim_cur != RLIM_INFINITY && nicelevel < (int) (20 - lim.rlim_cur))
+       {
+               Con_Printf("Current nice level is below the soft limit - cannot use niceness\n");
+               return;
+       }
+       nicepossible = true;
+       isnice = false;
+}
+void Sys_MakeProcessNice (void)
+{
+       if(!nicepossible)
+               return;
+       if(isnice)
+               return;
+       Con_DPrintf("Process is becoming 'nice'...\n");
+       if(setpriority(PRIO_PROCESS, 0, 19))
+               Con_Printf("Failed to raise nice level to %d\n", 19);
+       isnice = true;
+}
+void Sys_MakeProcessMean (void)
+{
+       if(!nicepossible)
+               return;
+       if(!isnice)
+               return;
+       Con_DPrintf("Process is becoming 'mean'...\n");
+       if(setpriority(PRIO_PROCESS, 0, nicelevel))
+               Con_Printf("Failed to lower nice level to %d\n", nicelevel);
+       isnice = false;
+}
+#else
+void Sys_InitProcessNice (void)
+{
+}
+void Sys_MakeProcessNice (void)
+{
+}
+void Sys_MakeProcessMean (void)
+{
+}
+#endif