X-Git-Url: http://git.iain.cx/?a=blobdiff_plain;f=nssm.cpp;h=498a213abea9455ec7b14d58e4e5b8bdb8db7f4e;hb=2cd1c7c29ef4d2d3df3c5afd3ca6c788aede2bef;hp=9f3174fb2417857a4dccc78bf1517799fb982699;hpb=03f6899464b863fc2dd05e7c8e5047e0c1b9281d;p=nssm.git diff --git a/nssm.cpp b/nssm.cpp index 9f3174f..498a213 100644 --- a/nssm.cpp +++ b/nssm.cpp @@ -75,9 +75,25 @@ static void check_console() { FreeConsole(); } +int num_cpus() { + DWORD_PTR i, affinity, system_affinity; + if (! GetProcessAffinityMask(GetCurrentProcess(), &affinity, &system_affinity)) return 64; + for (i = 0; system_affinity & (1LL << i); i++); + return (int) i; +} + int _tmain(int argc, TCHAR **argv) { check_console(); +#ifdef UNICODE + /* + Ensure we write in UTF-16 mode, so that non-ASCII characters don't get + mangled. If we were compiled in ANSI mode it won't work. + */ + _setmode(_fileno(stdout), _O_U16TEXT); + _setmode(_fileno(stderr), _O_U16TEXT); +#endif + /* Remember if we are admin */ check_admin(); @@ -92,6 +108,7 @@ int _tmain(int argc, TCHAR **argv) { if (str_equiv(argv[1], _T("pause"))) exit(control_service(SERVICE_CONTROL_PAUSE, argc - 2, argv + 2)); if (str_equiv(argv[1], _T("continue"))) exit(control_service(SERVICE_CONTROL_CONTINUE, argc - 2, argv + 2)); if (str_equiv(argv[1], _T("status"))) exit(control_service(SERVICE_CONTROL_INTERROGATE, argc - 2, argv + 2)); + if (str_equiv(argv[1], _T("rotate"))) exit(control_service(NSSM_SERVICE_CONTROL_ROTATE, argc - 2, argv + 2)); if (str_equiv(argv[1], _T("install"))) { if (! is_admin) { print_message(stderr, NSSM_MESSAGE_NOT_ADMINISTRATOR_CANNOT_INSTALL);