cleanup setpriority thing to make it readable
[tinc] / src / tincd.c
index b0e95be..d359425 100644 (file)
@@ -161,8 +161,7 @@ static bool parse_options(int argc, char **argv)
 
                        case 'L':                               /* no detach */
 #ifndef HAVE_MLOCKALL
-                       /*      logger(LOG_ERR, _("%s not supported on this platform"), "mlockall()"); */
-                               logger(LOG_ERR, _("mlockall() not supported on this platform!"));
+                               logger(LOG_ERR, _("%s not supported on this platform"), "mlockall()");
                                return false;
 #else
                                do_mlock = true;
@@ -485,6 +484,15 @@ static bool drop_privs() {
        return true;
 }
 
+#ifdef HAVE_MINGW
+# define setpriority(level) SetPriorityClass(GetCurrentProcess(), level);
+#else
+# define NORMAL_PRIORITY_CLASS 0
+# define BELOW_NORMAL_PRIORITY_CLASS 10
+# define HIGH_PRIORITY_CLASS -10
+# define setpriority(level) nice(level)
+#endif
+
 int main(int argc, char **argv)
 {
        program_name = argv[0];
@@ -581,6 +589,23 @@ int main2(int argc, char **argv)
        if(!setup_network())
                goto end;
 
+        /* Change process priority */
+
+        char *priority = 0;
+
+        if(get_config_string(lookup_config(config_tree, "ProcessPriority"), &priority)) {
+                if(!strcasecmp(priority, "Normal"))
+                        setpriority(NORMAL_PRIORITY_CLASS);
+                else if(!strcasecmp(priority, "Low"))
+                        setpriority(BELOW_NORMAL_PRIORITY_CLASS);
+                else if(!strcasecmp(priority, "High"))
+                        setpriority(HIGH_PRIORITY_CLASS);
+                else {
+                        logger(LOG_ERR, _("Invalid priority `%s`!"), priority);
+                        goto end;
+                }
+        }
+
        /* drop privileges */
        if (!drop_privs())
                goto end;