patch 7.4.1940
Problem: "gd" hangs in some situations. (Eric Biggers)
Solution: Remove the SEARCH_START flag when looping. Add a test.
diff --git a/src/normal.c b/src/normal.c
index d9948ec..c0a54b6 100644
--- a/src/normal.c
+++ b/src/normal.c
@@ -4250,7 +4250,7 @@
int len,
int locally,
int thisblock,
- int searchflags) /* flags passed to searchit() */
+ int flags_arg) /* flags passed to searchit() */
{
char_u *pat;
pos_T old_pos;
@@ -4261,6 +4261,7 @@
int save_p_scs;
int retval = OK;
int incll;
+ int searchflags = flags_arg;
if ((pat = alloc(len + 7)) == NULL)
return FAIL;
@@ -4346,8 +4347,10 @@
/* For finding a local variable and the match is before the "{" search
* to find a later match. For K&R style function declarations this
- * skips the function header without types. */
+ * skips the function header without types. Remove SEARCH_START from
+ * flags to avoid getting stuck at one position. */
found_pos = curwin->w_cursor;
+ searchflags &= ~SEARCH_START;
}
if (t == FAIL)