diff options
Diffstat (limited to 'data/vim/patches/8.1.0688')
-rw-r--r-- | data/vim/patches/8.1.0688 | 896 |
1 files changed, 0 insertions, 896 deletions
diff --git a/data/vim/patches/8.1.0688 b/data/vim/patches/8.1.0688 deleted file mode 100644 index 283d8700e..000000000 --- a/data/vim/patches/8.1.0688 +++ /dev/null @@ -1,896 +0,0 @@ -To: vim_dev@googlegroups.com -Subject: Patch 8.1.0688 -Fcc: outbox -From: Bram Moolenaar <Bram@moolenaar.net> -Mime-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit ------------- - -Patch 8.1.0688 -Problem: Text properties are not restored by undo. -Solution: Also save text properties for undo. -Files: src/structs.h, src/undo.c, src/memline.c, src/proto/memline.pro - - -*** ../vim-8.1.0687/src/structs.h 2019-01-01 19:47:17.854123944 +0100 ---- src/structs.h 2019-01-04 00:16:36.240809643 +0100 -*************** -*** 347,352 **** ---- 347,360 ---- - * structures used for undo - */ - -+ // One line saved for undo. After the NUL terminated text there might be text -+ // properties, thus ul_len can be larger than STRLEN(ul_line) + 1. -+ typedef struct { -+ char_u *ul_line; // text of the line -+ long ul_len; // length of the line including NUL, plus text -+ // properties -+ } undoline_T; -+ - typedef struct u_entry u_entry_T; - typedef struct u_header u_header_T; - struct u_entry -*************** -*** 355,361 **** - linenr_T ue_top; /* number of line above undo block */ - linenr_T ue_bot; /* number of line below undo block */ - linenr_T ue_lcount; /* linecount when u_save called */ -! char_u **ue_array; /* array of lines in undo block */ - long ue_size; /* number of lines in ue_array */ - #ifdef U_DEBUG - int ue_magic; /* magic number to check allocation */ ---- 363,369 ---- - linenr_T ue_top; /* number of line above undo block */ - linenr_T ue_bot; /* number of line below undo block */ - linenr_T ue_lcount; /* linecount when u_save called */ -! undoline_T *ue_array; /* array of lines in undo block */ - long ue_size; /* number of lines in ue_array */ - #ifdef U_DEBUG - int ue_magic; /* magic number to check allocation */ -*************** -*** 2167,2173 **** - /* - * variables for "U" command in undo.c - */ -! char_u *b_u_line_ptr; /* saved line for "U" command */ - linenr_T b_u_line_lnum; /* line number of line in u_line */ - colnr_T b_u_line_colnr; /* optional column number */ - ---- 2175,2181 ---- - /* - * variables for "U" command in undo.c - */ -! undoline_T b_u_line_ptr; /* saved line for "U" command */ - linenr_T b_u_line_lnum; /* line number of line in u_line */ - colnr_T b_u_line_colnr; /* optional column number */ - -*** ../vim-8.1.0687/src/undo.c 2018-09-30 21:43:17.207693209 +0200 ---- src/undo.c 2019-01-04 14:57:06.670029116 +0100 -*************** -*** 125,131 **** - #endif - - #define U_ALLOC_LINE(size) lalloc((long_u)(size), FALSE) -- static char_u *u_save_line(linenr_T); - - /* used in undo_end() to report number of added and deleted lines */ - static long u_newcount, u_oldcount; ---- 125,130 ---- -*************** -*** 353,358 **** ---- 352,379 ---- - } - - /* -+ * u_save_line(): save an allocated copy of line "lnum" into "ul". -+ * Returns FAIL when out of memory. -+ */ -+ static int -+ u_save_line(undoline_T *ul, linenr_T lnum) -+ { -+ char_u *line = ml_get(lnum); -+ -+ if (curbuf->b_ml.ml_line_len == 0) -+ { -+ ul->ul_len = 1; -+ ul->ul_line = vim_strsave((char_u *)""); -+ } -+ else -+ { -+ ul->ul_len = curbuf->b_ml.ml_line_len; -+ ul->ul_line = vim_memsave(line, ul->ul_len); -+ } -+ return ul->ul_line == NULL ? FAIL : OK; -+ } -+ -+ /* - * Common code for various ways to save text before a change. - * "top" is the line above the first changed line. - * "bot" is the line below the last changed line. -*************** -*** 664,671 **** - - if (size > 0) - { -! if ((uep->ue_array = (char_u **)U_ALLOC_LINE( -! sizeof(char_u *) * size)) == NULL) - { - u_freeentry(uep, 0L); - goto nomem; ---- 685,692 ---- - - if (size > 0) - { -! if ((uep->ue_array = (undoline_T *)U_ALLOC_LINE( -! sizeof(undoline_T) * size)) == NULL) - { - u_freeentry(uep, 0L); - goto nomem; -*************** -*** 678,684 **** - u_freeentry(uep, i); - return FAIL; - } -! if ((uep->ue_array[i] = u_save_line(lnum++)) == NULL) - { - u_freeentry(uep, i); - goto nomem; ---- 699,705 ---- - u_freeentry(uep, i); - return FAIL; - } -! if (u_save_line(&uep->ue_array[i], lnum++) == FAIL) - { - u_freeentry(uep, i); - goto nomem; -*************** -*** 1111,1116 **** ---- 1132,1139 ---- - vim_free(ptr); - return NULL; - } -+ // In case there are text properties there already is a NUL, but -+ // checking for that is more expensive than just adding a dummy byte. - ptr[len] = NUL; - #ifdef FEAT_CRYPT - if (bi->bi_state != NULL && bi->bi_buffer == NULL) -*************** -*** 1126,1132 **** - static int - serialize_header(bufinfo_T *bi, char_u *hash) - { -! int len; - buf_T *buf = bi->bi_buf; - FILE *fp = bi->bi_fp; - char_u time_buf[8]; ---- 1149,1155 ---- - static int - serialize_header(bufinfo_T *bi, char_u *hash) - { -! long len; - buf_T *buf = bi->bi_buf; - FILE *fp = bi->bi_fp; - char_u time_buf[8]; -*************** -*** 1148,1154 **** - buf->b_p_key, &header, &header_len); - if (bi->bi_state == NULL) - return FAIL; -! len = (int)fwrite(header, (size_t)header_len, (size_t)1, fp); - vim_free(header); - if (len != 1) - { ---- 1171,1177 ---- - buf->b_p_key, &header, &header_len); - if (bi->bi_state == NULL) - return FAIL; -! len = (long)fwrite(header, (size_t)header_len, (size_t)1, fp); - vim_free(header); - if (len != 1) - { -*************** -*** 1181,1189 **** - - /* buffer-specific data */ - undo_write_bytes(bi, (long_u)buf->b_ml.ml_line_count, 4); -! len = buf->b_u_line_ptr != NULL ? (int)STRLEN(buf->b_u_line_ptr) : 0; - undo_write_bytes(bi, (long_u)len, 4); -! if (len > 0 && fwrite_crypt(bi, buf->b_u_line_ptr, (size_t)len) == FAIL) - return FAIL; - undo_write_bytes(bi, (long_u)buf->b_u_line_lnum, 4); - undo_write_bytes(bi, (long_u)buf->b_u_line_colnr, 4); ---- 1204,1213 ---- - - /* buffer-specific data */ - undo_write_bytes(bi, (long_u)buf->b_ml.ml_line_count, 4); -! len = buf->b_u_line_ptr.ul_line == NULL -! ? 0 : STRLEN(buf->b_u_line_ptr.ul_line); - undo_write_bytes(bi, (long_u)len, 4); -! if (len > 0 && fwrite_crypt(bi, buf->b_u_line_ptr.ul_line, (size_t)len) == FAIL) - return FAIL; - undo_write_bytes(bi, (long_u)buf->b_u_line_lnum, 4); - undo_write_bytes(bi, (long_u)buf->b_u_line_colnr, 4); -*************** -*** 1360,1369 **** - undo_write_bytes(bi, (long_u)uep->ue_size, 4); - for (i = 0; i < uep->ue_size; ++i) - { -! len = STRLEN(uep->ue_array[i]); - if (undo_write_bytes(bi, (long_u)len, 4) == FAIL) - return FAIL; -! if (len > 0 && fwrite_crypt(bi, uep->ue_array[i], len) == FAIL) - return FAIL; - } - return OK; ---- 1384,1395 ---- - undo_write_bytes(bi, (long_u)uep->ue_size, 4); - for (i = 0; i < uep->ue_size; ++i) - { -! // Text is written without the text properties, since we cannot restore -! // the text property types. -! len = STRLEN(uep->ue_array[i].ul_line); - if (undo_write_bytes(bi, (long_u)len, 4) == FAIL) - return FAIL; -! if (len > 0 && fwrite_crypt(bi, uep->ue_array[i].ul_line, len) == FAIL) - return FAIL; - } - return OK; -*************** -*** 1374,1380 **** - { - int i; - u_entry_T *uep; -! char_u **array = NULL; - char_u *line; - int line_len; - ---- 1400,1406 ---- - { - int i; - u_entry_T *uep; -! undoline_T *array = NULL; - char_u *line; - int line_len; - -*************** -*** 1392,1404 **** - if (uep->ue_size > 0) - { - if (uep->ue_size < LONG_MAX / (int)sizeof(char_u *)) -! array = (char_u **)U_ALLOC_LINE(sizeof(char_u *) * uep->ue_size); - if (array == NULL) - { - *error = TRUE; - return uep; - } -! vim_memset(array, 0, sizeof(char_u *) * uep->ue_size); - } - uep->ue_array = array; - ---- 1418,1430 ---- - if (uep->ue_size > 0) - { - if (uep->ue_size < LONG_MAX / (int)sizeof(char_u *)) -! array = (undoline_T *)U_ALLOC_LINE(sizeof(undoline_T) * uep->ue_size); - if (array == NULL) - { - *error = TRUE; - return uep; - } -! vim_memset(array, 0, sizeof(undoline_T) * uep->ue_size); - } - uep->ue_array = array; - -*************** -*** 1417,1423 **** - *error = TRUE; - return uep; - } -! array[i] = line; - } - return uep; - } ---- 1443,1450 ---- - *error = TRUE; - return uep; - } -! array[i].ul_line = line; -! array[i].ul_len = line_len + 1; - } - return uep; - } -*************** -*** 1610,1616 **** - - /* If there is no undo information at all, quit here after deleting any - * existing undo file. */ -! if (buf->b_u_numhead == 0 && buf->b_u_line_ptr == NULL) - { - if (p_verbose > 0) - verb_msg((char_u *)_("Skipping undo file write, nothing to undo")); ---- 1637,1643 ---- - - /* If there is no undo information at all, quit here after deleting any - * existing undo file. */ -! if (buf->b_u_numhead == 0 && buf->b_u_line_ptr.ul_line == NULL) - { - if (p_verbose > 0) - verb_msg((char_u *)_("Skipping undo file write, nothing to undo")); -*************** -*** 1771,1777 **** - char_u *file_name; - FILE *fp; - long version, str_len; -! char_u *line_ptr = NULL; - linenr_T line_lnum; - colnr_T line_colnr; - linenr_T line_count; ---- 1798,1804 ---- - char_u *file_name; - FILE *fp; - long version, str_len; -! undoline_T line_ptr; - linenr_T line_lnum; - colnr_T line_colnr; - linenr_T line_count; -*************** -*** 1798,1803 **** ---- 1825,1833 ---- - bufinfo_T bi; - - vim_memset(&bi, 0, sizeof(bi)); -+ line_ptr.ul_len = 0; -+ line_ptr.ul_line = NULL; -+ - if (name == NULL) - { - file_name = u_get_undo_file_name(curbuf->b_ffname, TRUE); -*************** -*** 1917,1923 **** - if (str_len < 0) - goto error; - if (str_len > 0) -! line_ptr = read_string_decrypt(&bi, str_len); - line_lnum = (linenr_T)undo_read_4c(&bi); - line_colnr = (colnr_T)undo_read_4c(&bi); - if (line_lnum < 0 || line_colnr < 0) ---- 1947,1956 ---- - if (str_len < 0) - goto error; - if (str_len > 0) -! { -! line_ptr.ul_line = read_string_decrypt(&bi, str_len); -! line_ptr.ul_len = str_len + 1; -! } - line_lnum = (linenr_T)undo_read_4c(&bi); - line_colnr = (colnr_T)undo_read_4c(&bi); - if (line_lnum < 0 || line_colnr < 0) -*************** -*** 2098,2104 **** - goto theend; - - error: -! vim_free(line_ptr); - if (uhp_table != NULL) - { - for (i = 0; i < num_read_uhps; i++) ---- 2131,2137 ---- - goto theend; - - error: -! vim_free(line_ptr.ul_line); - if (uhp_table != NULL) - { - for (i = 0; i < num_read_uhps; i++) -*************** -*** 2596,2602 **** - static void - u_undoredo(int undo) - { -! char_u **newarray = NULL; - linenr_T oldsize; - linenr_T newsize; - linenr_T top, bot; ---- 2629,2635 ---- - static void - u_undoredo(int undo) - { -! undoline_T *newarray = NULL; - linenr_T oldsize; - linenr_T newsize; - linenr_T top, bot; -*************** -*** 2669,2676 **** - * undoing auto-formatting puts the cursor in the previous - * line. */ - for (i = 0; i < newsize && i < oldsize; ++i) -! if (STRCMP(uep->ue_array[i], ml_get(top + 1 + i)) != 0) - break; - if (i == newsize && newlnum == MAXLNUM && uep->ue_next == NULL) - { - newlnum = top; ---- 2702,2714 ---- - * undoing auto-formatting puts the cursor in the previous - * line. */ - for (i = 0; i < newsize && i < oldsize; ++i) -! { -! char_u *p = ml_get(top + 1 + i); -! -! if (curbuf->b_ml.ml_line_len != uep->ue_array[i].ul_len -! || memcmp(uep->ue_array[i].ul_line, p, curbuf->b_ml.ml_line_len) != 0) - break; -+ } - if (i == newsize && newlnum == MAXLNUM && uep->ue_next == NULL) - { - newlnum = top; -*************** -*** 2689,2698 **** - /* delete the lines between top and bot and save them in newarray */ - if (oldsize > 0) - { -! if ((newarray = (char_u **)U_ALLOC_LINE( -! sizeof(char_u *) * oldsize)) == NULL) - { -! do_outofmem_msg((long_u)(sizeof(char_u *) * oldsize)); - /* - * We have messed up the entry list, repair is impossible. - * we have to free the rest of the list. ---- 2727,2736 ---- - /* delete the lines between top and bot and save them in newarray */ - if (oldsize > 0) - { -! if ((newarray = (undoline_T *)U_ALLOC_LINE( -! sizeof(undoline_T) * oldsize)) == NULL) - { -! do_outofmem_msg((long_u)(sizeof(undoline_T) * oldsize)); - /* - * We have messed up the entry list, repair is impossible. - * we have to free the rest of the list. -*************** -*** 2709,2715 **** - for (lnum = bot - 1, i = oldsize; --i >= 0; --lnum) - { - /* what can we do when we run out of memory? */ -! if ((newarray[i] = u_save_line(lnum)) == NULL) - do_outofmem_msg((long_u)0); - /* remember we deleted the last line in the buffer, and a - * dummy empty line will be inserted */ ---- 2747,2753 ---- - for (lnum = bot - 1, i = oldsize; --i >= 0; --lnum) - { - /* what can we do when we run out of memory? */ -! if (u_save_line(&newarray[i], lnum) == FAIL) - do_outofmem_msg((long_u)0); - /* remember we deleted the last line in the buffer, and a - * dummy empty line will be inserted */ -*************** -*** 2726,2740 **** - { - for (lnum = top, i = 0; i < newsize; ++i, ++lnum) - { -! /* -! * If the file is empty, there is an empty line 1 that we -! * should get rid of, by replacing it with the new line -! */ - if (empty_buffer && lnum == 0) -! ml_replace((linenr_T)1, uep->ue_array[i], TRUE); - else -! ml_append(lnum, uep->ue_array[i], (colnr_T)0, FALSE); -! vim_free(uep->ue_array[i]); - } - vim_free((char_u *)uep->ue_array); - } ---- 2764,2776 ---- - { - for (lnum = top, i = 0; i < newsize; ++i, ++lnum) - { -! // If the file is empty, there is an empty line 1 that we -! // should get rid of, by replacing it with the new line. - if (empty_buffer && lnum == 0) -! ml_replace_len((linenr_T)1, uep->ue_array[i].ul_line, uep->ue_array[i].ul_len, TRUE, TRUE); - else -! ml_append(lnum, uep->ue_array[i].ul_line, (colnr_T)uep->ue_array[i].ul_len, FALSE); -! vim_free(uep->ue_array[i].ul_line); - } - vim_free((char_u *)uep->ue_array); - } -*************** -*** 3172,3184 **** - - for (lnum = 1; lnum < curbuf->b_ml.ml_line_count - && lnum <= uep->ue_size; ++lnum) -! if (STRCMP(ml_get_buf(curbuf, lnum, FALSE), -! uep->ue_array[lnum - 1]) != 0) - { - CLEAR_POS(&(uhp->uh_cursor)); - uhp->uh_cursor.lnum = lnum; - return; - } - if (curbuf->b_ml.ml_line_count != uep->ue_size) - { - /* lines added or deleted at the end, put the cursor there */ ---- 3208,3224 ---- - - for (lnum = 1; lnum < curbuf->b_ml.ml_line_count - && lnum <= uep->ue_size; ++lnum) -! { -! char_u *p = ml_get_buf(curbuf, lnum, FALSE); -! -! if (uep->ue_array[lnum - 1].ul_len != curbuf->b_ml.ml_line_len -! || memcmp(p, uep->ue_array[lnum - 1].ul_line, uep->ue_array[lnum - 1].ul_len) != 0) - { - CLEAR_POS(&(uhp->uh_cursor)); - uhp->uh_cursor.lnum = lnum; - return; - } -+ } - if (curbuf->b_ml.ml_line_count != uep->ue_size) - { - /* lines added or deleted at the end, put the cursor there */ -*************** -*** 3383,3389 **** - u_freeentry(u_entry_T *uep, long n) - { - while (n > 0) -! vim_free(uep->ue_array[--n]); - vim_free((char_u *)uep->ue_array); - #ifdef U_DEBUG - uep->ue_magic = 0; ---- 3423,3429 ---- - u_freeentry(u_entry_T *uep, long n) - { - while (n > 0) -! vim_free(uep->ue_array[--n].ul_line); - vim_free((char_u *)uep->ue_array); - #ifdef U_DEBUG - uep->ue_magic = 0; -*************** -*** 3400,3411 **** - buf->b_u_newhead = buf->b_u_oldhead = buf->b_u_curhead = NULL; - buf->b_u_synced = TRUE; - buf->b_u_numhead = 0; -! buf->b_u_line_ptr = NULL; - buf->b_u_line_lnum = 0; - } - - /* -! * save the line "lnum" for the "U" command - */ - void - u_saveline(linenr_T lnum) ---- 3440,3452 ---- - buf->b_u_newhead = buf->b_u_oldhead = buf->b_u_curhead = NULL; - buf->b_u_synced = TRUE; - buf->b_u_numhead = 0; -! buf->b_u_line_ptr.ul_line = NULL; -! buf->b_u_line_ptr.ul_len = 0; - buf->b_u_line_lnum = 0; - } - - /* -! * Save the line "lnum" for the "U" command. - */ - void - u_saveline(linenr_T lnum) -*************** -*** 3420,3426 **** - curbuf->b_u_line_colnr = curwin->w_cursor.col; - else - curbuf->b_u_line_colnr = 0; -! if ((curbuf->b_u_line_ptr = u_save_line(lnum)) == NULL) - do_outofmem_msg((long_u)0); - } - ---- 3461,3467 ---- - curbuf->b_u_line_colnr = curwin->w_cursor.col; - else - curbuf->b_u_line_colnr = 0; -! if (u_save_line(&curbuf->b_u_line_ptr, lnum) == FAIL) - do_outofmem_msg((long_u)0); - } - -*************** -*** 3431,3439 **** - void - u_clearline(void) - { -! if (curbuf->b_u_line_ptr != NULL) - { -! VIM_CLEAR(curbuf->b_u_line_ptr); - curbuf->b_u_line_lnum = 0; - } - } ---- 3472,3481 ---- - void - u_clearline(void) - { -! if (curbuf->b_u_line_ptr.ul_line != NULL) - { -! VIM_CLEAR(curbuf->b_u_line_ptr.ul_line); -! curbuf->b_u_line_ptr.ul_len = 0; - curbuf->b_u_line_lnum = 0; - } - } -*************** -*** 3447,3478 **** - void - u_undoline(void) - { -! colnr_T t; -! char_u *oldp; - - if (undo_off) - return; - -! if (curbuf->b_u_line_ptr == NULL - || curbuf->b_u_line_lnum > curbuf->b_ml.ml_line_count) - { - beep_flush(); - return; - } - -! /* first save the line for the 'u' command */ - if (u_savecommon(curbuf->b_u_line_lnum - 1, - curbuf->b_u_line_lnum + 1, (linenr_T)0, FALSE) == FAIL) - return; -! oldp = u_save_line(curbuf->b_u_line_lnum); -! if (oldp == NULL) - { - do_outofmem_msg((long_u)0); - return; - } -! ml_replace(curbuf->b_u_line_lnum, curbuf->b_u_line_ptr, TRUE); - changed_bytes(curbuf->b_u_line_lnum, 0); -- vim_free(curbuf->b_u_line_ptr); - curbuf->b_u_line_ptr = oldp; - - t = curbuf->b_u_line_colnr; ---- 3489,3518 ---- - void - u_undoline(void) - { -! colnr_T t; -! undoline_T oldp; - - if (undo_off) - return; - -! if (curbuf->b_u_line_ptr.ul_line == NULL - || curbuf->b_u_line_lnum > curbuf->b_ml.ml_line_count) - { - beep_flush(); - return; - } - -! // first save the line for the 'u' command - if (u_savecommon(curbuf->b_u_line_lnum - 1, - curbuf->b_u_line_lnum + 1, (linenr_T)0, FALSE) == FAIL) - return; -! if (u_save_line(&oldp, curbuf->b_u_line_lnum) == FAIL) - { - do_outofmem_msg((long_u)0); - return; - } -! ml_replace_len(curbuf->b_u_line_lnum, curbuf->b_u_line_ptr.ul_line, curbuf->b_u_line_ptr.ul_len, TRUE, FALSE); - changed_bytes(curbuf->b_u_line_lnum, 0); - curbuf->b_u_line_ptr = oldp; - - t = curbuf->b_u_line_colnr; -*************** -*** 3491,3507 **** - { - while (buf->b_u_oldhead != NULL) - u_freeheader(buf, buf->b_u_oldhead, NULL); -! vim_free(buf->b_u_line_ptr); -! } -! -! /* -! * u_save_line(): allocate memory and copy line 'lnum' into it. -! * Returns NULL when out of memory. -! */ -! static char_u * -! u_save_line(linenr_T lnum) -! { -! return vim_strsave(ml_get(lnum)); - } - - /* ---- 3531,3537 ---- - { - while (buf->b_u_oldhead != NULL) - u_freeheader(buf, buf->b_u_oldhead, NULL); -! vim_free(buf->b_u_line_ptr.ul_line); - } - - /* -*** ../vim-8.1.0687/src/memline.c 2019-01-03 21:55:28.441763295 +0100 ---- src/memline.c 2019-01-04 12:26:05.397062087 +0100 -*************** -*** 3217,3227 **** - - if (line != NULL) - len = (colnr_T)STRLEN(line); -! return ml_replace_len(lnum, line, len, copy); - } - - int -! ml_replace_len(linenr_T lnum, char_u *line_arg, colnr_T len_arg, int copy) - { - char_u *line = line_arg; - colnr_T len = len_arg; ---- 3217,3238 ---- - - if (line != NULL) - len = (colnr_T)STRLEN(line); -! return ml_replace_len(lnum, line, len, FALSE, copy); - } - -+ /* -+ * Replace a line for the current buffer. Like ml_replace() with: -+ * "len_arg" is the length of the text, excluding NUL. -+ * If "has_props" is TRUE then "line_arg" includes the text properties and -+ * "len_arg" includes the NUL of the text. -+ */ - int -! ml_replace_len( -! linenr_T lnum, -! char_u *line_arg, -! colnr_T len_arg, -! int has_props, -! int copy) - { - char_u *line = line_arg; - colnr_T len = len_arg; -*************** -*** 3233,3240 **** - if (curbuf->b_ml.ml_mfp == NULL && open_buffer(FALSE, NULL, 0) == FAIL) - return FAIL; - -! if (copy && (line = vim_strnsave(line, len)) == NULL) /* allocate memory */ -! return FAIL; - #ifdef FEAT_NETBEANS_INTG - if (netbeans_active()) - { ---- 3244,3264 ---- - if (curbuf->b_ml.ml_mfp == NULL && open_buffer(FALSE, NULL, 0) == FAIL) - return FAIL; - -! if (!has_props) -! ++len; // include the NUL after the text -! if (copy) -! { -! // copy the line to allocated memory -! #ifdef FEAT_TEXT_PROP -! if (has_props) -! line = vim_memsave(line, len); -! else -! #endif -! line = vim_strnsave(line, len - 1); -! if (line == NULL) -! return FAIL; -! } -! - #ifdef FEAT_NETBEANS_INTG - if (netbeans_active()) - { -*************** -*** 3249,3262 **** - curbuf->b_ml.ml_flags &= ~ML_LINE_DIRTY; - - #ifdef FEAT_TEXT_PROP -! if (curbuf->b_has_textprop) - // Need to fetch the old line to copy over any text properties. - ml_get_buf(curbuf, lnum, TRUE); - #endif - } - - #ifdef FEAT_TEXT_PROP -! if (curbuf->b_has_textprop) - { - size_t oldtextlen = STRLEN(curbuf->b_ml.ml_line_ptr) + 1; - ---- 3273,3286 ---- - curbuf->b_ml.ml_flags &= ~ML_LINE_DIRTY; - - #ifdef FEAT_TEXT_PROP -! if (curbuf->b_has_textprop && !has_props) - // Need to fetch the old line to copy over any text properties. - ml_get_buf(curbuf, lnum, TRUE); - #endif - } - - #ifdef FEAT_TEXT_PROP -! if (curbuf->b_has_textprop && !has_props) - { - size_t oldtextlen = STRLEN(curbuf->b_ml.ml_line_ptr) + 1; - -*************** -*** 3266,3276 **** - size_t textproplen = curbuf->b_ml.ml_line_len - oldtextlen; - - // Need to copy over text properties, stored after the text. -! newline = alloc(len + 1 + (int)textproplen); - if (newline != NULL) - { -! mch_memmove(newline, line, len + 1); -! mch_memmove(newline + len + 1, curbuf->b_ml.ml_line_ptr + oldtextlen, textproplen); - vim_free(line); - line = newline; - len += (colnr_T)textproplen; ---- 3290,3300 ---- - size_t textproplen = curbuf->b_ml.ml_line_len - oldtextlen; - - // Need to copy over text properties, stored after the text. -! newline = alloc(len + (int)textproplen); - if (newline != NULL) - { -! mch_memmove(newline, line, len); -! mch_memmove(newline + len, curbuf->b_ml.ml_line_ptr + oldtextlen, textproplen); - vim_free(line); - line = newline; - len += (colnr_T)textproplen; -*************** -*** 3279,3289 **** - } - #endif - -! if (curbuf->b_ml.ml_flags & ML_LINE_DIRTY) /* same line allocated */ -! vim_free(curbuf->b_ml.ml_line_ptr); /* free it */ - - curbuf->b_ml.ml_line_ptr = line; -! curbuf->b_ml.ml_line_len = len + 1; - curbuf->b_ml.ml_line_lnum = lnum; - curbuf->b_ml.ml_flags = (curbuf->b_ml.ml_flags | ML_LINE_DIRTY) & ~ML_EMPTY; - ---- 3303,3313 ---- - } - #endif - -! if (curbuf->b_ml.ml_flags & ML_LINE_DIRTY) // same line allocated -! vim_free(curbuf->b_ml.ml_line_ptr); // free it - - curbuf->b_ml.ml_line_ptr = line; -! curbuf->b_ml.ml_line_len = len; - curbuf->b_ml.ml_line_lnum = lnum; - curbuf->b_ml.ml_flags = (curbuf->b_ml.ml_flags | ML_LINE_DIRTY) & ~ML_EMPTY; - -*** ../vim-8.1.0687/src/proto/memline.pro 2018-12-13 22:17:52.877941474 +0100 ---- src/proto/memline.pro 2019-01-04 12:01:57.866003664 +0100 -*************** -*** 24,30 **** - int ml_append(linenr_T lnum, char_u *line, colnr_T len, int newfile); - int ml_append_buf(buf_T *buf, linenr_T lnum, char_u *line, colnr_T len, int newfile); - int ml_replace(linenr_T lnum, char_u *line, int copy); -! int ml_replace_len(linenr_T lnum, char_u *line_arg, colnr_T len_arg, int copy); - int ml_delete(linenr_T lnum, int message); - void ml_setmarked(linenr_T lnum); - linenr_T ml_firstmarked(void); ---- 24,30 ---- - int ml_append(linenr_T lnum, char_u *line, colnr_T len, int newfile); - int ml_append_buf(buf_T *buf, linenr_T lnum, char_u *line, colnr_T len, int newfile); - int ml_replace(linenr_T lnum, char_u *line, int copy); -! int ml_replace_len(linenr_T lnum, char_u *line_arg, colnr_T len_arg, int has_props, int copy); - int ml_delete(linenr_T lnum, int message); - void ml_setmarked(linenr_T lnum); - linenr_T ml_firstmarked(void); -*** ../vim-8.1.0687/src/version.c 2019-01-03 23:10:28.338798991 +0100 ---- src/version.c 2019-01-03 23:49:46.821265249 +0100 -*************** -*** 801,802 **** ---- 801,804 ---- - { /* Add new patch number below this line */ -+ /**/ -+ 688, - /**/ - --- -hundred-and-one symptoms of being an internet addict: -102. When filling out your driver's license application, you give - your IP address. - - /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ -/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ -\\\ an exciting new programming language -- http://www.Zimbu.org /// - \\\ help me help AIDS victims -- http://ICCF-Holland.org /// |