patch 9.1.1169: using global variable for get_insert()/get_lambda_name()
Problem: using global variable for get_insert()/get_lambda_name()
(after v9.1.1151)
Solution: let the functions return a string_T object instead
(Yee Cheng Chin)
In #16720, `get_insert()` was modified to store a string length in a
global variable to be queried immediately by another `get_insert_len()`
function, which is somewhat fragile. Instead, just have the function
itself return a `string_T` object instead. Also do the same for
`get_lambda_name()` which has similar issues.
closes: #16775
Signed-off-by: Yee Cheng Chin <ychin.git@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
diff --git a/src/edit.c b/src/edit.c
index 808aae1..f15a19d 100644
--- a/src/edit.c
+++ b/src/edit.c
@@ -415,14 +415,10 @@
* Get the current length of the redo buffer, those characters have to be
* skipped if we want to get to the inserted characters.
*/
- ptr = get_inserted();
- if (ptr == NULL)
- new_insert_skip = 0;
- else
- {
- new_insert_skip = (int)get_inserted_len();
- vim_free(ptr);
- }
+ string_T inserted = get_inserted();
+ new_insert_skip = (int)inserted.length;
+ if (inserted.string != NULL)
+ vim_free(inserted.string);
old_indent = 0;
@@ -2445,7 +2441,7 @@
int nomove) // <c-\><c-o>, don't move cursor
{
int cc;
- char_u *ptr;
+ string_T inserted;
stop_redo_ins();
replace_flush(); // abandon replace stack
@@ -2455,16 +2451,16 @@
* Don't do it when "restart_edit" was set and nothing was inserted,
* otherwise CTRL-O w and then <Left> will clear "last_insert".
*/
- ptr = get_inserted();
- int added = ptr == NULL ? 0 : (int)get_inserted_len() - new_insert_skip;
+ inserted = get_inserted();
+ int added = inserted.string == NULL ? 0 : (int)inserted.length - new_insert_skip;
if (did_restart_edit == 0 || added > 0)
{
vim_free(last_insert);
- last_insert = ptr;
+ last_insert = inserted.string;
last_insert_skip = added < 0 ? 0 : new_insert_skip;
}
else
- vim_free(ptr);
+ vim_free(inserted.string);
if (!arrow_used && end_insert_pos != NULL)
{