Annotation of embedaddon/ntp/ports/winnt/libntp/setpriority.c, revision 1.1.1.1

1.1       misho       1: #include <config.h>
                      2: #include <windows.h>
                      3: #include <stdio.h>
                      4: #include <sys/resource.h>      /* our private version */
                      5: #include "ntp_machine.h"
                      6: #include "ntp_stdlib.h"
                      7: #include "ntp_syslog.h"
                      8: #include "ntp_debug.h"
                      9: #include "ntp_fp.h"
                     10: #include "ntp.h"
                     11: #include "clockstuff.h"
                     12: 
                     13: 
                     14: /*
                     15:  * setpriority
                     16:  *
                     17:  * to reduce the #ifdef forest in the portable code,
                     18:  * we emulate the BSD setpriority interface:
                     19:  *
                     20:  *             if (-1 == setpriority(PRIO_PROCESS, 0, NTP_PRIO))
                     21:  *                     msyslog(LOG_ERR, "setpriority() error: %m");
                     22:  *
                     23:  * However, since the Windows port of ntpd has always raised its
                     24:  * priority (to realtime if allowed, or silently downgraded to 
                     25:  * high by the system if not) with or without -N.  Changing that
                     26:  * now would endanger users who upgrade the binary without adding
                     27:  * -N to its invocation.  Instsrv assumes ntpd.exe is installed
                     28:  * with no command-line arguments.
                     29:  *
                     30:  * This routine is used by utilities as well as ntpd itself, so
                     31:  * it checks if the priority is already high or realtime and 
                     32:  * logs no complaints in that case, to avoid duplicating.  ntpd
                     33:  * will have raised the priority to one of those in
                     34:  * init_winnt_time, while the utilities will rely on this
                     35:  * code.
                     36:  *
                     37:  */
                     38: 
                     39: int setpriority(
                     40:                int which,
                     41:                int who,
                     42:                int prio
                     43:                )
                     44: {
                     45:        BOOL success;
                     46:        DWORD prio_class;
                     47: 
                     48:        if (PRIO_PROCESS != which || who || NTP_PRIO != prio) {
                     49:                DPRINTF(1,("windows setpriority() clone needs work.\n"));
                     50:        }
                     51: 
                     52:        prio_class = GetPriorityClass(GetCurrentProcess());
                     53:        
                     54:        if (HIGH_PRIORITY_CLASS == prio_class ||
                     55:            REALTIME_PRIORITY_CLASS == prio_class)
                     56:                return 0;
                     57: 
                     58:        success = SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS);
                     59: 
                     60:        if (!success) {
                     61:                msyslog(LOG_ERR, "Unable to raise priority: %m"); 
                     62:                errno = EPERM;
                     63:                return -1;
                     64:        }
                     65: 
                     66:        prio_class = GetPriorityClass(GetCurrentProcess());
                     67: 
                     68:        if (REALTIME_PRIORITY_CLASS == prio_class)
                     69:                msyslog(LOG_INFO, "Raised to realtime priority class");
                     70:        else if (HIGH_PRIORITY_CLASS == prio_class)
                     71:                msyslog(LOG_ERR,  "Raised to high priority class, realtime "
                     72:                                  "requires Increase Scheduling Priority "
                     73:                                  "privilege (enabled with secpol.msc).");
                     74:        else
                     75:                msyslog(LOG_ERR,  "Unexpected process priority class %d",
                     76:                                 prio_class);
                     77: 
                     78:        return 0; 
                     79: }
                     80: 
                     81: /*
                     82:  * InitSockets -- once known as Win32InitSockets()
                     83:  *
                     84:  * This doesn't have much to do with setpriority but we
                     85:  * want the routine in libntp and this is a convenient
                     86:  * existing Windows-only libntp source file.
                     87:  */
                     88: void
                     89: InitSockets(
                     90:        void
                     91:        )
                     92: {
                     93:        WORD wVersionRequested;
                     94:        WSADATA wsaData;
                     95:        int err;
                     96: 
                     97:        /* Need Winsock 2.0 or better */
                     98:        wVersionRequested = MAKEWORD(2, 0);
                     99:  
                    100:        err = WSAStartup(wVersionRequested, &wsaData);
                    101:        if ( err != 0 ) {
                    102:                fprintf(stderr, "No useable winsock.dll: %s\n", strerror(err));
                    103:                SetLastError(err);
                    104:                msyslog(LOG_ERR, "No usable winsock.dll: %m");
                    105:                exit(1);
                    106:        }
                    107: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>