changeset 12138:bee3751f3d4e v8.0.0949

patch 8.0.0949: winpty.dll name is fixed commit https://github.com/vim/vim/commit/9e13aa7729486d79a530ecae1a7a95d10da27d61 Author: Bram Moolenaar <Bram@vim.org> Date: Wed Aug 16 23:14:08 2017 +0200 patch 8.0.0949: winpty.dll name is fixed Problem: winpty.dll name is fixed. Solution: Add the 'winptydll' option. Make the default name depend on whether it is a 32-bit or 64-bit build. (idea by Yasuhiro Matsumoto, closes #1978)
author Christian Brabandt <cb@256bit.org>
date Wed, 16 Aug 2017 23:15:03 +0200
parents 7b1eedab0ff1
children 3235ff91288c
files runtime/doc/options.txt src/option.c src/option.h src/terminal.c src/version.c
diffstat 5 files changed, 41 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -8831,6 +8831,20 @@ A jump table for the options with a shor
 	large number, it will cause errors when opening more than a few
 	windows.  A value of 0 to 12 is reasonable.
 
+						*'winptydll'*
+'winptydll'		string	(default "winpty32.dll" or "winpty64.dll")
+			global
+			{not in Vi}
+			{only available when compiled with the |terminal|
+			feature on MS-Windows}
+	Specifies the name of the winpty shared library, used for the
+	|:terminal| command. The default depends on whether was build as a
+	32-bit or 64-bit executable.  If not found, "win32pty.dll" is tried as
+	a fallback.
+	Environment variables are expanded |:set_env|.
+	This option cannot be set from a |modeline| or in the |sandbox|, for
+	security reasons.
+
 						*'winwidth'* *'wiw'* *E592*
 'winwidth' 'wiw'	number	(default 20)
 			global
--- a/src/option.c
+++ b/src/option.c
@@ -3098,6 +3098,20 @@ static struct vimoption options[] =
 			    (char_u *)NULL, PV_NONE,
 #endif
 			    {(char_u *)1L, (char_u *)0L} SCRIPTID_INIT},
+    {"winptydll", NULL,	    P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
+#if defined(WIN3264) && defined(TERMINAL)
+			    (char_u *)&p_winptydll, PV_NONE, {
+# ifdef _WIN64
+			    (char_u *)"winpty64.dll",
+# else
+			    (char_u *)"winpty32.dll",
+# endif
+				(char_u *)0L}
+#else
+			    (char_u *)NULL, PV_NONE,
+			    {(char_u *)0L, (char_u *)0L}
+#endif
+			    SCRIPTID_INIT},
     {"winwidth",   "wiw",   P_NUM|P_VI_DEF,
 #ifdef FEAT_WINDOWS
 			    (char_u *)&p_wiw, PV_NONE,
--- a/src/option.h
+++ b/src/option.h
@@ -966,6 +966,9 @@ EXTERN long	p_wmh;		/* 'winminheight' */
 EXTERN long	p_wmw;		/* 'winminwidth' */
 EXTERN long	p_wiw;		/* 'winwidth' */
 #endif
+#if defined(WIN3264) && defined(TERMINAL)
+EXTERN char_u	*p_winptydll;	/* 'winptydll' */
+#endif
 EXTERN int	p_ws;		/* 'wrapscan' */
 EXTERN int	p_write;	/* 'write' */
 EXTERN int	p_wa;		/* 'writeany' */
--- a/src/terminal.c
+++ b/src/terminal.c
@@ -38,6 +38,7 @@
  * in tl_scrollback are no longer used.
  *
  * TODO:
+ * - make [range]terminal pipe [range] lines to the terminal
  * - implement term_setsize()
  * - add test for giving error for invalid 'termsize' value.
  * - support minimal size when 'termsize' is "rows*cols".
@@ -2768,11 +2769,15 @@ dyn_winpty_init(void)
     /* No need to initialize twice. */
     if (hWinPtyDLL)
 	return 1;
-    /* Load winpty.dll */
-    hWinPtyDLL = vimLoadLib(WINPTY_DLL);
+    /* Load winpty.dll, prefer using the 'winptydll' option, fall back to just
+     * winpty.dll. */
+    if (*p_winptydll != NUL)
+	hWinPtyDLL = vimLoadLib((char *)p_winptydll);
+    if (!hWinPtyDLL)
+	hWinPtyDLL = vimLoadLib(WINPTY_DLL);
     if (!hWinPtyDLL)
     {
-	EMSG2(_(e_loadlib), WINPTY_DLL);
+	EMSG2(_(e_loadlib), *p_winptydll != NUL ? p_winptydll : WINPTY_DLL);
 	return 0;
     }
     for (i = 0; winpty_entry[i].name != NULL
--- a/src/version.c
+++ b/src/version.c
@@ -770,6 +770,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    949,
+/**/
     948,
 /**/
     947,