\r
extern imports_t imports;\r
\r
-static enum { NSSM_EXIT_RESTART, NSSM_EXIT_IGNORE, NSSM_EXIT_REALLY, NSSM_EXIT_UNCLEAN } exit_actions;\r
-static const char *exit_action_strings[] = { "Restart", "Ignore", "Exit", "Suicide", 0 };\r
+const char *exit_action_strings[] = { "Restart", "Ignore", "Exit", "Suicide", 0 };\r
\r
static inline int throttle_milliseconds(unsigned long throttle) {\r
/* pow() operates on doubles. */\r
void cleanup_nssm_service(nssm_service_t *service) {\r
if (! service) return;\r
if (service->env) HeapFree(GetProcessHeap(), 0, service->env);\r
+ if (service->env_extra) HeapFree(GetProcessHeap(), 0, service->env_extra);\r
if (service->handle) CloseServiceHandle(service->handle);\r
if (service->process_handle) CloseHandle(service->process_handle);\r
if (service->wait_handle) UnregisterWait(service->process_handle);\r
/* Arguments are optional */\r
size_t flagslen = 0;\r
size_t s = 0;\r
- size_t i;\r
+ int i;\r
for (i = 2; i < argc; i++) flagslen += strlen(argv[i]) + 1;\r
if (! flagslen) flagslen = 1;\r
\r
}\r
\r
/* Work out directory name */\r
- size_t len = strlen(service->exe);\r
- for (i = len; i && service->exe[i] != '\\' && service->exe[i] != '/'; i--);\r
- memmove(service->dir, service->exe, i);\r
- service->dir[i] = '\0';\r
+ memmove(service->dir, service->exe, sizeof(service->dir));\r
+ strip_basename(service->dir);\r
\r
int ret = install_service(service);\r
cleanup_nssm_service(service);\r