X-Git-Url: http://git.iain.cx/?a=blobdiff_plain;f=service.cpp;h=077c1e8b2c39b017fd2e25fe9c6449d7d5bb2270;hb=8aa782adfab4d63e4115fead833c864fe43d4cbc;hp=906ac640ae6faa91ece9d2b42ae78af2f870f3f3;hpb=b3a4446ab363b5895aa2e04c645ed5d5dfa00442;p=nssm.git diff --git a/service.cpp b/service.cpp index 906ac64..077c1e8 100644 --- a/service.cpp +++ b/service.cpp @@ -43,6 +43,7 @@ nssm_service_t *alloc_nssm_service() { void cleanup_nssm_service(nssm_service_t *service) { if (! service) return; if (service->env) HeapFree(GetProcessHeap(), 0, service->env); + if (service->env_extra) HeapFree(GetProcessHeap(), 0, service->env_extra); if (service->handle) CloseServiceHandle(service->handle); if (service->process_handle) CloseHandle(service->process_handle); if (service->wait_handle) UnregisterWait(service->process_handle); @@ -68,7 +69,7 @@ int pre_install_service(int argc, char **argv) { /* Arguments are optional */ size_t flagslen = 0; size_t s = 0; - size_t i; + int i; for (i = 2; i < argc; i++) flagslen += strlen(argv[i]) + 1; if (! flagslen) flagslen = 1; @@ -86,10 +87,8 @@ int pre_install_service(int argc, char **argv) { } /* Work out directory name */ - size_t len = strlen(service->exe); - for (i = len; i && service->exe[i] != '\\' && service->exe[i] != '/'; i--); - memmove(service->dir, service->exe, i); - service->dir[i] = '\0'; + memmove(service->dir, service->exe, sizeof(service->dir)); + strip_basename(service->dir); int ret = install_service(service); cleanup_nssm_service(service);