Fixed print_message() when out of memory.
[nssm.git] / service.cpp
index b246443..aff8cbb 100644 (file)
@@ -90,7 +90,7 @@ int pre_install_service(int argc, TCHAR **argv) {
   if (argc < 2) return nssm_gui(IDD_INSTALL, service);\r
 \r
   if (! service) {\r
-    print_message(stderr, NSSM_EVENT_OUT_OF_MEMORY, _T("service"), _T("pre_install_service()"));\r
+    print_message(stderr, NSSM_MESSAGE_OUT_OF_MEMORY, _T("service"), _T("pre_install_service()"));\r
     return 1;\r
   }\r
   _sntprintf_s(service->exe, _countof(service->exe), _TRUNCATE, _T("%s"), argv[1]);\r
@@ -155,7 +155,7 @@ int pre_edit_service(int argc, TCHAR **argv) {
   if (error == ERROR_INSUFFICIENT_BUFFER) {\r
     qsc = (QUERY_SERVICE_CONFIG *) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, bufsize);\r
     if (! qsc) {\r
-      print_message(stderr, NSSM_EVENT_OUT_OF_MEMORY, _T("QUERY_SERVICE_CONFIG"), _T("pre_edit_service()"), 0);\r
+      print_message(stderr, NSSM_MESSAGE_OUT_OF_MEMORY, _T("QUERY_SERVICE_CONFIG"), _T("pre_edit_service()"), 0);\r
       return 4;\r
     }\r
   }\r
@@ -199,12 +199,16 @@ int pre_edit_service(int argc, TCHAR **argv) {
       HeapFree(GetProcessHeap(), 0, qsc);\r
       CloseHandle(service->handle);\r
       CloseServiceHandle(services);\r
-      print_message(stderr, NSSM_EVENT_OUT_OF_MEMORY, _T("username"), _T("pre_edit_service()"));\r
+      print_message(stderr, NSSM_MESSAGE_OUT_OF_MEMORY, _T("username"), _T("pre_edit_service()"));\r
       return 4;\r
     }\r
   }\r
   _sntprintf_s(service->displayname, _countof(service->displayname), _TRUNCATE, _T("%s"), qsc->lpDisplayName);\r
 \r
+  /* Get the canonical service name. We open it case insensitively. */\r
+  bufsize = _countof(service->name);\r
+  GetServiceKeyName(services, service->displayname, service->name, &bufsize);\r
+\r
   /* Remember the executable in case it isn't NSSM. */\r
   _sntprintf_s(service->image, _countof(service->image), _TRUNCATE, _T("%s"), qsc->lpBinaryPathName);\r
   HeapFree(GetProcessHeap(), 0, qsc);\r
@@ -218,7 +222,7 @@ int pre_edit_service(int argc, TCHAR **argv) {
       if (! info) {\r
         CloseHandle(service->handle);\r
         CloseServiceHandle(services);\r
-        print_message(stderr, NSSM_EVENT_OUT_OF_MEMORY, _T("SERVICE_DELAYED_AUTO_START_INFO"), _T("pre_edit_service()"));\r
+        print_message(stderr, NSSM_MESSAGE_OUT_OF_MEMORY, _T("SERVICE_DELAYED_AUTO_START_INFO"), _T("pre_edit_service()"));\r
         return 5;\r
       }\r
 \r
@@ -250,7 +254,7 @@ int pre_edit_service(int argc, TCHAR **argv) {
     if (! description) {\r
       CloseHandle(service->handle);\r
       CloseServiceHandle(services);\r
-      print_message(stderr, NSSM_EVENT_OUT_OF_MEMORY, _T("SERVICE_CONFIG_DESCRIPTION"), _T("pre_edit_service()"));\r
+      print_message(stderr, NSSM_MESSAGE_OUT_OF_MEMORY, _T("SERVICE_CONFIG_DESCRIPTION"), _T("pre_edit_service()"));\r
       return 6;\r
     }\r
 \r
@@ -440,6 +444,12 @@ int remove_service(nssm_service_t *service) {
     return 3;\r
   }\r
 \r
+  /* Get the canonical service name. We open it case insensitively. */\r
+  unsigned long bufsize = _countof(service->displayname);\r
+  GetServiceDisplayName(services, service->name, service->displayname, &bufsize);\r
+  bufsize = _countof(service->name);\r
+  GetServiceKeyName(services, service->displayname, service->name, &bufsize);\r
+\r
   /* Try to delete the service */\r
   if (! DeleteService(service->handle)) {\r
     print_message(stderr, NSSM_MESSAGE_DELETESERVICE_FAILED);\r