Added strip_basename() function.
[nssm.git] / gui.cpp
diff --git a/gui.cpp b/gui.cpp
index 3d51236..5ceb33f 100644 (file)
--- a/gui.cpp
+++ b/gui.cpp
@@ -1,5 +1,14 @@
 #include "nssm.h"\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
@@ -28,6 +37,7 @@ int nssm_gui(int resource, char *name) {
   /* Go! */\r
   MSG message;\r
   while (GetMessage(&message, 0, 0, 0)) {\r
+    if (IsDialogMessage(dlg, &message)) continue;\r
     TranslateMessage(&message);\r
     DispatchMessage(&message);\r
   }\r
@@ -154,8 +164,8 @@ int remove(HWND window) {
 void browse(HWND window) {\r
   if (! window) return;\r
 \r
-  unsigned long bufsize = 256;\r
-  unsigned long len = bufsize;\r
+  size_t bufsize = 256;\r
+  size_t len = bufsize;\r
   OPENFILENAME ofn;\r
   ZeroMemory(&ofn, sizeof(ofn));\r
   ofn.lStructSize = sizeof(ofn);\r
@@ -164,18 +174,18 @@ void browse(HWND window) {
   if (ofn.lpstrFilter) {\r
     ZeroMemory((void *) ofn.lpstrFilter, bufsize);\r
     char *localised = message_string(NSSM_GUI_BROWSE_FILTER_APPLICATIONS);\r
-    _snprintf((char *) ofn.lpstrFilter, bufsize, localised);\r
+    _snprintf_s((char *) ofn.lpstrFilter, bufsize, _TRUNCATE, localised);\r
     /* "Applications" + NULL + "*.exe" + NULL */\r
     len = strlen(localised) + 1;\r
     LocalFree(localised);\r
-    _snprintf((char *) ofn.lpstrFilter + len, bufsize - len, "*.exe");\r
+    _snprintf_s((char *) ofn.lpstrFilter + len, bufsize - len, _TRUNCATE, "*.exe");\r
     /* "All files" + NULL + "*.*" + NULL */\r
     len += 6;\r
     localised = message_string(NSSM_GUI_BROWSE_FILTER_ALL_FILES);\r
-    _snprintf((char *) ofn.lpstrFilter + len, bufsize - len, localised);\r
+    _snprintf_s((char *) ofn.lpstrFilter + len, bufsize - len, _TRUNCATE, localised);\r
     len += strlen(localised) + 1;\r
     LocalFree(localised);\r
-    _snprintf((char *) ofn.lpstrFilter + len, bufsize - len, "*.*");\r
+    _snprintf_s((char *) ofn.lpstrFilter + len, bufsize - len, _TRUNCATE, "*.*");\r
     /* Remainder of the buffer is already zeroed */\r
   }\r
   ofn.lpstrFile = new char[MAX_PATH];\r
@@ -204,11 +214,11 @@ INT_PTR CALLBACK install_dlg(HWND window, UINT message, WPARAM w, LPARAM l) {
       switch (LOWORD(w)) {\r
         /* OK button */\r
         case IDC_OK:\r
-          PostQuitMessage(install(window));\r
+          if (! install(window)) PostQuitMessage(0);\r
           break;\r
 \r
         /* Cancel button */\r
-        case IDC_CANCEL:\r
+        case IDCANCEL:\r
           DestroyWindow(window);\r
           break;\r
 \r
@@ -219,7 +229,7 @@ INT_PTR CALLBACK install_dlg(HWND window, UINT message, WPARAM w, LPARAM l) {
 \r
         /* Remove button */\r
         case IDC_REMOVE:\r
-          PostQuitMessage(remove(window));\r
+          if (! remove(window)) PostQuitMessage(0);\r
           break;\r
       }\r
       return 1;\r