updated for version 7.0108
diff --git a/src/GvimExt/gvimext.cpp b/src/GvimExt/gvimext.cpp
index 5a175d3..c204a0c 100644
--- a/src/GvimExt/gvimext.cpp
+++ b/src/GvimExt/gvimext.cpp
@@ -38,10 +38,14 @@
 HRESULT hres = 0;
 UINT cbFiles = 0;
 
+/* The buffers size used to be MAX_PATH (256 bytes), but that's not always
+ * enough */
+#define BUFSIZE 1100
+
 //
 // Get the name of the Gvim executable to use, with the path.
 // When "runtime" is non-zero, we were called to find the runtime directory.
-// Returns the path in name[MAX_PATH].  It's empty when it fails.
+// Returns the path in name[BUFSIZE].  It's empty when it fails.
 //
     static void
 getGvimName(char *name, int runtime)
@@ -54,7 +58,7 @@
     if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Vim\\Gvim", 0,
 				       KEY_READ, &keyhandle) == ERROR_SUCCESS)
     {
-	hlen = MAX_PATH;
+	hlen = BUFSIZE;
 	if (RegQueryValueEx(keyhandle, "path", 0, NULL, (BYTE *)name, &hlen)
 							     != ERROR_SUCCESS)
 	    name[0] = 0;
@@ -82,7 +86,7 @@
 }
 
 //
-// Get the Vim runtime directory into buf[MAX_PATH].
+// Get the Vim runtime directory into buf[BUFSIZE].
 // The result is empty when it failed.
 // When it works, the path ends in a slash or backslash.
 //
@@ -218,8 +222,8 @@
     static void
 dyn_gettext_load(void)
 {
-    char    szBuff[MAX_PATH];
-    char    szLang[MAX_PATH];
+    char    szBuff[BUFSIZE];
+    char    szLang[BUFSIZE];
     DWORD   len;
     HKEY    keyhandle;
     int	    gotlang = 0;
@@ -231,7 +235,7 @@
     if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Vim\\Gvim", 0,
 				       KEY_READ, &keyhandle) == ERROR_SUCCESS)
     {
-	len = MAX_PATH;
+	len = BUFSIZE;
 	if (RegQueryValueEx(keyhandle, "lang", 0, NULL, (BYTE*)szBuff, &len)
 							     == ERROR_SUCCESS)
 	{
@@ -249,7 +253,7 @@
 	// LOCALE_SABBREVLANGNAME gives us three letters, like "enu", we use
 	// only the first two.
 	len = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SABBREVLANGNAME,
-						    (LPTSTR)szBuff, MAX_PATH);
+						    (LPTSTR)szBuff, BUFSIZE);
 	if (len >= 2 && _strnicmp(szBuff, "en", 2) != 0)
 	{
 	    // There are a few exceptions (probably more)
@@ -615,11 +619,11 @@
     // Now display all the vim instances
     for (int i = 0; i < m_cntOfHWnd; i++)
     {
-	char title[MAX_PATH];
-	char temp[MAX_PATH];
+	char title[BUFSIZE];
+	char temp[BUFSIZE];
 
 	// Obtain window title, continue if can not
-	if (GetWindowText(m_hWnd[i], title, MAX_PATH - 1) == 0)
+	if (GetWindowText(m_hWnd[i], title, BUFSIZE - 1) == 0)
 	    continue;
 	// Truncate the title before the path, keep the file name
 	char *pos = strchr(title, '(');
@@ -630,8 +634,8 @@
 	    *pos = 0;
 	}
 	// Now concatenate
-	strncpy(temp, _("Edit with existing Vim - "), MAX_PATH - 1);
-	strncat(temp, title, MAX_PATH - 1);
+	strncpy(temp, _("Edit with existing Vim - "), BUFSIZE - 1);
+	strncat(temp, title, BUFSIZE - 1);
 	InsertMenu(hMenu,
 		indexMenu++,
 		MF_STRING|MF_BYPOSITION,
@@ -750,7 +754,7 @@
 
 BOOL CALLBACK CShellExt::EnumWindowsProc(HWND hWnd, LPARAM lParam)
 {
-    char temp[MAX_PATH];
+    char temp[BUFSIZE];
 
     // First do a bunch of check
     // No invisible window
@@ -807,8 +811,8 @@
     static char *
 searchpath(char *name)
 {
-    static char widename[2 * MAX_PATH];
-    static char location[2 * MAX_PATH + 2];
+    static char widename[2 * BUFSIZE];
+    static char location[2 * BUFSIZE + 2];
 
     // There appears to be a bug in FindExecutableA() on Windows NT.
     // Use FindExecutableW() instead...
@@ -816,12 +820,12 @@
     if (g_PlatformId == VER_PLATFORM_WIN32_NT)
     {
 	MultiByteToWideChar(CP_ACP, 0, (LPCTSTR)name, -1,
-		(LPWSTR)widename, MAX_PATH);
+		(LPWSTR)widename, BUFSIZE);
 	if (FindExecutableW((LPCWSTR)widename, (LPCWSTR)"",
 		    (LPWSTR)location) > (HINSTANCE)32)
 	{
 	    WideCharToMultiByte(CP_ACP, 0, (LPWSTR)location, -1,
-		    (LPSTR)widename, 2 * MAX_PATH, NULL, NULL);
+		    (LPSTR)widename, 2 * BUFSIZE, NULL, NULL);
 	    return widename;
 	}
     }
@@ -842,8 +846,8 @@
 				   LPCSTR pszParam,
 				   int iShowCmd)
 {
-    char m_szFileUserClickedOn[MAX_PATH];
-    char cmdStr[MAX_PATH];
+    char m_szFileUserClickedOn[BUFSIZE];
+    char cmdStr[BUFSIZE];
     UINT i;
 
     for (i = 0; i < cbFiles; i++)
@@ -856,7 +860,7 @@
 	getGvimName(cmdStr, 0);
 	strcat(cmdStr, " \"");
 
-	if ((strlen(cmdStr) + strlen(m_szFileUserClickedOn) + 2) < MAX_PATH)
+	if ((strlen(cmdStr) + strlen(m_szFileUserClickedOn) + 2) < BUFSIZE)
 	{
 	    strcat(cmdStr, m_szFileUserClickedOn);
 	    strcat(cmdStr, "\"");
@@ -913,13 +917,13 @@
 				   int iShowCmd,
 				   int useDiff)
 {
-    char	m_szFileUserClickedOn[MAX_PATH];
+    char	m_szFileUserClickedOn[BUFSIZE];
     char	*cmdStr;
     size_t	cmdlen;
     size_t	len;
     UINT i;
 
-    cmdlen = MAX_PATH;
+    cmdlen = BUFSIZE;
     cmdStr = (char *)malloc(cmdlen);
     getGvimName(cmdStr, 0);
     if (useDiff)
@@ -934,7 +938,7 @@
 	len = strlen(cmdStr) + strlen(m_szFileUserClickedOn) + 4;
 	if (len > cmdlen)
 	{
-	    cmdlen = len + MAX_PATH;
+	    cmdlen = len + BUFSIZE;
 	    cmdStr = (char *)realloc(cmdStr, cmdlen);
 	}
 	strcat(cmdStr, " \"");