From 258a600ea4fea24fdd7e2e0ddcef998232cd3533 Mon Sep 17 00:00:00 2001
From: meilinxiaoxue <meilinxiaoxue@sohu.com>
Date: Fri, 27 Sep 2024 13:34:21 +0800
Subject: [PATCH] bugfix: handle space in file name

---
 src/main.cpp | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/src/main.cpp b/src/main.cpp
index 53e2435..5c38901 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -470,18 +470,19 @@ int WINAPI wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev_instance, _
 		// Otherwise assume the argument is a filename to open
 		else {
 			// Otherwise assume switch is for nvim initialization
-			const size_t arg_len = wcslen(cmd_line_args[i]) + 1 /* space */;
-			if (nvim_cmd_len + arg_len >= 32767) {
+			const size_t arg_len = wcslen(cmd_line_args[i])  /* space */;
+			if (nvim_cmd_len + arg_len + 4 >= 32767) {
 				MessageBoxA(NULL, "ERROR: File path too long", "Nvy", MB_OK | MB_ICONERROR);
 				return 1;
 			}
-			wchar_t *tmp = static_cast<wchar_t *>(realloc(nvim_cmd, sizeof(wchar_t) * (nvim_cmd_len + arg_len + 1)));
+			size_t tmp_len = sizeof(wchar_t) * (nvim_cmd_len + arg_len + 4);
+			wchar_t *tmp = static_cast<wchar_t *>(realloc(nvim_cmd, tmp_len));
 			if (tmp) {
 				nvim_cmd = tmp;
-				nvim_cmd[nvim_cmd_len] = L' ';
-				wmemcpy_s(nvim_cmd + nvim_cmd_len + 1, arg_len, cmd_line_args[i], arg_len);
-				nvim_cmd_len += arg_len;
-				nvim_cmd[nvim_cmd_len] = 0;
+				nvim_cmd_len = tmp_len;
+				wcscat_s(nvim_cmd, tmp_len, L" \"");
+				wcscat_s(nvim_cmd, tmp_len,cmd_line_args[i]);
+				wcscat_s(nvim_cmd, tmp_len, L"\"");
 			} else {
 				break; // not enough memory to continue
 			}