summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYegappan Lakshmanan <yegappan@yahoo.com>2022-11-13 22:38:10 +0000
committerBram Moolenaar <Bram@vim.org>2022-11-13 22:38:10 +0000
commit68353e5270fca45daffee5b5f882853cdfa40f76 (patch)
tree0e007ca3af75cbe87aaac14a7771d5a140c757da
parent398a26f7fcd58fbc6e2329f892edbb7479a971bb (diff)
patch 9.0.0876: code is indented more than neededv9.0.0876
Problem: Code is indented more than needed. Solution: Split ExpandEscape() in two. (Yegappan Lakshmanan, closes #11539)
-rw-r--r--src/cmdexpand.c168
-rw-r--r--src/version.c2
2 files changed, 91 insertions, 79 deletions
diff --git a/src/cmdexpand.c b/src/cmdexpand.c
index 2dbde4ef77..1f4791aa39 100644
--- a/src/cmdexpand.c
+++ b/src/cmdexpand.c
@@ -92,94 +92,104 @@ sort_func_compare(const void *s1, const void *s2)
* Escape special characters in the cmdline completion matches.
*/
static void
-ExpandEscape(
+wildescape(
expand_T *xp,
char_u *str,
int numfiles,
- char_u **files,
- int options)
+ char_u **files)
{
- int i;
char_u *p;
int vse_what = xp->xp_context == EXPAND_BUFFERS
? VSE_BUFFER : VSE_NONE;
- // May change home directory back to "~"
- if (options & WILD_HOME_REPLACE)
- tilde_replace(str, numfiles, files);
-
- if (options & WILD_ESCAPE)
+ if (xp->xp_context == EXPAND_FILES
+ || xp->xp_context == EXPAND_FILES_IN_PATH
+ || xp->xp_context == EXPAND_SHELLCMD
+ || xp->xp_context == EXPAND_BUFFERS
+ || xp->xp_context == EXPAND_DIRECTORIES)
{
- if (xp->xp_context == EXPAND_FILES
- || xp->xp_context == EXPAND_FILES_IN_PATH
- || xp->xp_context == EXPAND_SHELLCMD
- || xp->xp_context == EXPAND_BUFFERS
- || xp->xp_context == EXPAND_DIRECTORIES)
+ // Insert a backslash into a file name before a space, \, %, #
+ // and wildmatch characters, except '~'.
+ for (int i = 0; i < numfiles; ++i)
{
- // Insert a backslash into a file name before a space, \, %, #
- // and wildmatch characters, except '~'.
- for (i = 0; i < numfiles; ++i)
+ // for ":set path=" we need to escape spaces twice
+ if (xp->xp_backslash == XP_BS_THREE)
{
- // for ":set path=" we need to escape spaces twice
- if (xp->xp_backslash == XP_BS_THREE)
+ p = vim_strsave_escaped(files[i], (char_u *)" ");
+ if (p != NULL)
{
+ vim_free(files[i]);
+ files[i] = p;
+#if defined(BACKSLASH_IN_FILENAME)
p = vim_strsave_escaped(files[i], (char_u *)" ");
if (p != NULL)
{
vim_free(files[i]);
files[i] = p;
-#if defined(BACKSLASH_IN_FILENAME)
- p = vim_strsave_escaped(files[i], (char_u *)" ");
- if (p != NULL)
- {
- vim_free(files[i]);
- files[i] = p;
- }
-#endif
}
+#endif
}
+ }
#ifdef BACKSLASH_IN_FILENAME
- p = vim_strsave_fnameescape(files[i], vse_what);
+ p = vim_strsave_fnameescape(files[i], vse_what);
#else
- p = vim_strsave_fnameescape(files[i],
- xp->xp_shell ? VSE_SHELL : vse_what);
+ p = vim_strsave_fnameescape(files[i],
+ xp->xp_shell ? VSE_SHELL : vse_what);
#endif
- if (p != NULL)
- {
- vim_free(files[i]);
- files[i] = p;
- }
-
- // If 'str' starts with "\~", replace "~" at start of
- // files[i] with "\~".
- if (str[0] == '\\' && str[1] == '~' && files[i][0] == '~')
- escape_fname(&files[i]);
+ if (p != NULL)
+ {
+ vim_free(files[i]);
+ files[i] = p;
}
- xp->xp_backslash = XP_BS_NONE;
- // If the first file starts with a '+' escape it. Otherwise it
- // could be seen as "+cmd".
- if (*files[0] == '+')
- escape_fname(&files[0]);
+ // If 'str' starts with "\~", replace "~" at start of
+ // files[i] with "\~".
+ if (str[0] == '\\' && str[1] == '~' && files[i][0] == '~')
+ escape_fname(&files[i]);
}
- else if (xp->xp_context == EXPAND_TAGS)
+ xp->xp_backslash = XP_BS_NONE;
+
+ // If the first file starts with a '+' escape it. Otherwise it
+ // could be seen as "+cmd".
+ if (*files[0] == '+')
+ escape_fname(&files[0]);
+ }
+ else if (xp->xp_context == EXPAND_TAGS)
+ {
+ // Insert a backslash before characters in a tag name that
+ // would terminate the ":tag" command.
+ for (int i = 0; i < numfiles; ++i)
{
- // Insert a backslash before characters in a tag name that
- // would terminate the ":tag" command.
- for (i = 0; i < numfiles; ++i)
+ p = vim_strsave_escaped(files[i], (char_u *)"\\|\"");
+ if (p != NULL)
{
- p = vim_strsave_escaped(files[i], (char_u *)"\\|\"");
- if (p != NULL)
- {
- vim_free(files[i]);
- files[i] = p;
- }
+ vim_free(files[i]);
+ files[i] = p;
}
}
}
}
/*
+ * Escape special characters in the cmdline completion matches.
+ */
+ static void
+ExpandEscape(
+ expand_T *xp,
+ char_u *str,
+ int numfiles,
+ char_u **files,
+ int options)
+{
+ // May change home directory back to "~"
+ if (options & WILD_HOME_REPLACE)
+ tilde_replace(str, numfiles, files);
+
+ if (options & WILD_ESCAPE)
+ wildescape(xp, str, numfiles, files);
+}
+
+/*
* Return FAIL if this is not an appropriate context in which to do
* completion of anything, return OK if it is (even if there are no matches).
* For the caller, this means that the character is just passed through like a
@@ -3238,7 +3248,6 @@ expand_shellcmd_onedir(
garray_T *gap)
{
int ret;
- int i;
hash_T hash;
hashitem_T *hi;
@@ -3249,35 +3258,36 @@ expand_shellcmd_onedir(
// Expand matches in one directory of $PATH.
ret = expand_wildcards(1, &buf, numMatches, matches, flags);
- if (ret == OK)
+ if (ret != OK)
+ return;
+
+ if (ga_grow(gap, *numMatches) == FAIL)
{
- if (ga_grow(gap, *numMatches) == FAIL)
- FreeWild(*numMatches, *matches);
- else
+ FreeWild(*numMatches, *matches);
+ return;
+ }
+
+ for (int i = 0; i < *numMatches; ++i)
+ {
+ char_u *name = (*matches)[i];
+
+ if (STRLEN(name) > l)
{
- for (i = 0; i < *numMatches; ++i)
+ // Check if this name was already found.
+ hash = hash_hash(name + l);
+ hi = hash_lookup(ht, name + l, hash);
+ if (HASHITEM_EMPTY(hi))
{
- char_u *name = (*matches)[i];
-
- if (STRLEN(name) > l)
- {
- // Check if this name was already found.
- hash = hash_hash(name + l);
- hi = hash_lookup(ht, name + l, hash);
- if (HASHITEM_EMPTY(hi))
- {
- // Remove the path that was prepended.
- STRMOVE(name, name + l);
- ((char_u **)gap->ga_data)[gap->ga_len++] = name;
- hash_add_item(ht, hi, name, hash);
- name = NULL;
- }
- }
- vim_free(name);
+ // Remove the path that was prepended.
+ STRMOVE(name, name + l);
+ ((char_u **)gap->ga_data)[gap->ga_len++] = name;
+ hash_add_item(ht, hi, name, hash);
+ name = NULL;
}
- vim_free(*matches);
}
+ vim_free(name);
}
+ vim_free(*matches);
}
/*
diff --git a/src/version.c b/src/version.c
index 9a459eac46..868118d0c7 100644
--- a/src/version.c
+++ b/src/version.c
@@ -696,6 +696,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 876,
+/**/
875,
/**/
874,