patch 9.0.0284: using static buffer for multiple completion functions

Problem:    Using static buffer for multiple completion functions.
Solution:   Use one buffer in expand_T.
diff --git a/src/cmdhist.c b/src/cmdhist.c
index 6256fd9..0619e82 100644
--- a/src/cmdhist.c
+++ b/src/cmdhist.c
@@ -99,15 +99,15 @@
     char_u *
 get_history_arg(expand_T *xp UNUSED, int idx)
 {
-    static char_u compl[2] = { NUL, NUL };
-    char *short_names = ":=@>?/";
-    int short_names_count = (int)STRLEN(short_names);
-    int history_name_count = ARRAY_LENGTH(history_names) - 1;
+    char    *short_names = ":=@>?/";
+    int	    short_names_count = (int)STRLEN(short_names);
+    int	    history_name_count = ARRAY_LENGTH(history_names) - 1;
 
     if (idx < short_names_count)
     {
-	compl[0] = (char_u)short_names[idx];
-	return compl;
+	xp->xp_buf[0] = (char_u)short_names[idx];
+	xp->xp_buf[1] = NUL;
+	return xp->xp_buf;
     }
     if (idx < short_names_count + history_name_count)
 	return (char_u *)history_names[idx - short_names_count];
diff --git a/src/misc1.c b/src/misc1.c
index 6383922..e8216a0 100644
--- a/src/misc1.c
+++ b/src/misc1.c
@@ -2016,18 +2016,14 @@
     expand_T	*xp UNUSED,
     int		idx)
 {
-# if defined(AMIGA)
-    /*
-     * No environ[] on the Amiga.
-     */
+#if defined(AMIGA)
+    // No environ[] on the Amiga.
     return NULL;
-# else
+#else
 # ifndef __WIN32__
     // Borland C++ 5.2 has this in a header file.
     extern char		**environ;
 # endif
-# define ENVNAMELEN 100
-    static char_u	name[ENVNAMELEN];
     char_u		*str;
     int			n;
 
@@ -2035,15 +2031,15 @@
     if (str == NULL)
 	return NULL;
 
-    for (n = 0; n < ENVNAMELEN - 1; ++n)
+    for (n = 0; n < EXPAND_BUF_LEN - 1; ++n)
     {
 	if (str[n] == '=' || str[n] == NUL)
 	    break;
-	name[n] = str[n];
+	xp->xp_buf[n] = str[n];
     }
-    name[n] = NUL;
-    return name;
-# endif
+    xp->xp_buf[n] = NUL;
+    return xp->xp_buf;
+#endif
 }
 
 /*
diff --git a/src/structs.h b/src/structs.h
index 28cfa00..fc44d23 100644
--- a/src/structs.h
+++ b/src/structs.h
@@ -598,6 +598,8 @@
     int		xp_col;			// cursor position in line
     char_u	**xp_files;		// list of files
     char_u	*xp_line;		// text being completed
+#define EXPAND_BUF_LEN 256
+    char_u	xp_buf[EXPAND_BUF_LEN];	// buffer for returned match
 } expand_T;
 
 /*
diff --git a/src/syntax.c b/src/syntax.c
index 1fc2054..c68e001 100644
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -6420,11 +6420,8 @@
  * expansion.
  */
     char_u *
-get_syntax_name(expand_T *xp UNUSED, int idx)
+get_syntax_name(expand_T *xp, int idx)
 {
-#define CBUFFER_LEN 256
-    static char_u	cbuffer[CBUFFER_LEN]; // TODO: better solution
-
     switch (expand_what)
     {
 	case EXP_SUBCMD:
@@ -6452,9 +6449,9 @@
 	{
 	    if (idx < curwin->w_s->b_syn_clusters.ga_len)
 	    {
-		vim_snprintf((char *)cbuffer, CBUFFER_LEN, "@%s",
+		vim_snprintf((char *)xp->xp_buf, EXPAND_BUF_LEN, "@%s",
 					 SYN_CLSTR(curwin->w_s)[idx].scl_name);
-		return cbuffer;
+		return xp->xp_buf;
 	    }
 	    else
 		return NULL;
diff --git a/src/version.c b/src/version.c
index c3fbe5f..2e48687 100644
--- a/src/version.c
+++ b/src/version.c
@@ -708,6 +708,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    284,
+/**/
     283,
 /**/
     282,