Fixed regression in file browser.
authorIain Patterson <me@iain.cx>
Sat, 18 Jan 2014 13:43:06 +0000 (13:43 +0000)
committerIain Patterson <me@iain.cx>
Sat, 18 Jan 2014 13:43:06 +0000 (13:43 +0000)
The GUI file browser was the only place in the code we were using new
and delete[] instead of HeapAlloc() and HeapFree().
The previous commit overlooked that fact and introduced a compiler error
by assuming that lpstrFile was a buffer of a known size instead of being
allocated with new.
Fix the regression and use HeapAlloc()/HeapFree() for consistency.

gui.cpp

diff --git a/gui.cpp b/gui.cpp
index 3f34943..2c20286 100644 (file)
--- a/gui.cpp
+++ b/gui.cpp
@@ -746,15 +746,17 @@ void browse(HWND window, TCHAR *current, unsigned long flags, ...) {
     va_end(arg);\r
     /* Remainder of the buffer is already zeroed */\r
   }\r
-  ofn.lpstrFile = new TCHAR[PATH_LENGTH];\r
-  if (flags & OFN_NOVALIDATE) {\r
-    /* Directory hack. */\r
-    _sntprintf_s(ofn.lpstrFile, _countof(ofn.lpstrFile), _TRUNCATE, _T(":%s:"), message_string(NSSM_GUI_BROWSE_FILTER_DIRECTORIES));\r
-    ofn.nMaxFile = DIR_LENGTH;\r
-  }\r
-  else {
-    _sntprintf_s(ofn.lpstrFile, _countof(ofn.lpstrFile), _TRUNCATE, _T("%s"), current);\r
-    ofn.nMaxFile = PATH_LENGTH;\r
+  ofn.lpstrFile = (TCHAR *) HeapAlloc(GetProcessHeap(), 0, PATH_LENGTH * sizeof(TCHAR));\r
+  if (ofn.lpstrFile) {
+    if (flags & OFN_NOVALIDATE) {\r
+      /* Directory hack. */\r
+      _sntprintf_s(ofn.lpstrFile, PATH_LENGTH, _TRUNCATE, _T(":%s:"), message_string(NSSM_GUI_BROWSE_FILTER_DIRECTORIES));\r
+      ofn.nMaxFile = DIR_LENGTH;\r
+    }\r
+    else {
+      _sntprintf_s(ofn.lpstrFile, PATH_LENGTH, _TRUNCATE, _T("%s"), current);\r
+      ofn.nMaxFile = PATH_LENGTH;\r
+    }
   }
   ofn.lpstrTitle = message_string(NSSM_GUI_BROWSE_TITLE);\r
   ofn.Flags = OFN_EXPLORER | OFN_HIDEREADONLY | OFN_PATHMUSTEXIST | flags;\r
@@ -765,8 +767,7 @@ void browse(HWND window, TCHAR *current, unsigned long flags, ...) {
     SendMessage(window, WM_SETTEXT, 0, (LPARAM) ofn.lpstrFile);\r
   }\r
   if (ofn.lpstrFilter) HeapFree(GetProcessHeap(), 0, (void *) ofn.lpstrFilter);\r
-\r
-  delete[] ofn.lpstrFile;\r
+  if (ofn.lpstrFile) HeapFree(GetProcessHeap(), 0, ofn.lpstrFile);
 }\r
 \r
 INT_PTR CALLBACK tab_dlg(HWND tab, UINT message, WPARAM w, LPARAM l) {\r