Compiler food.
authorIain Patterson <me@iain.cx>
Fri, 22 Nov 2013 12:25:33 +0000 (12:25 +0000)
committerIain Patterson <me@iain.cx>
Fri, 22 Nov 2013 13:59:12 +0000 (13:59 +0000)
Make strip_basename() non-static so it can be used elsewhere,
particularly in cases where int and size_t are different sizes, ie on
32-bit builds.

gui.cpp
nssm.cpp
nssm.h
service.cpp

diff --git a/gui.cpp b/gui.cpp
index 4bcb144..e28c044 100644 (file)
--- a/gui.cpp
+++ b/gui.cpp
@@ -4,15 +4,6 @@ static enum { NSSM_TAB_APPLICATION, NSSM_TAB_SHUTDOWN, NSSM_TAB_EXIT, NSSM_TAB_I
 static HWND tablist[NSSM_NUM_TABS];\r
 static int selected_tab;\r
 \r
-static void strip_basename(char *buffer) {\r
-  size_t len = strlen(buffer);\r
-  size_t i;\r
-  for (i = len; i && buffer[i] != '\\' && buffer[i] != '/'; i--);\r
-  /* X:\ is OK. */\r
-  if (i && buffer[i-1] == ':') i++;\r
-  buffer[i] = '\0';\r
-}\r
-\r
 int nssm_gui(int resource, char *name) {\r
   /* Create window */\r
   HWND dlg = CreateDialog(0, MAKEINTRESOURCE(resource), 0, install_dlg);\r
index 0ce8664..a60c378 100644 (file)
--- a/nssm.cpp
+++ b/nssm.cpp
@@ -13,6 +13,16 @@ int str_equiv(const char *a, const char *b) {
   }\r
 }\r
 \r
+/* Remove basename of a path. */\r
+void strip_basename(char *buffer) {\r
+  size_t len = strlen(buffer);\r
+  size_t i;\r
+  for (i = len; i && buffer[i] != '\\' && buffer[i] != '/'; i--);\r
+  /* X:\ is OK. */\r
+  if (i && buffer[i-1] == ':') i++;\r
+  buffer[i] = '\0';\r
+}\r
+\r
 /* How to use me correctly */\r
 int usage(int ret) {\r
   print_message(stderr, NSSM_MESSAGE_USAGE, NSSM_VERSION, NSSM_DATE);\r
diff --git a/nssm.h b/nssm.h
index 566a66f..1ee4ae2 100644 (file)
--- a/nssm.h
+++ b/nssm.h
@@ -16,6 +16,7 @@
 #include "gui.h"\r
 \r
 int str_equiv(const char *, const char *);\r
+void strip_basename(char *);\r
 \r
 #define NSSM "nssm"\r
 #define NSSM_VERSION "2.18"\r
index ea5a460..077c1e8 100644 (file)
@@ -69,7 +69,7 @@ int pre_install_service(int argc, char **argv) {
   /* 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
@@ -87,10 +87,8 @@ int pre_install_service(int argc, char **argv) {
   }\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