diff options
author | Sam Bingner <sam@bingner.com> | 2019-06-05 22:02:50 -1000 |
---|---|---|
committer | Sam Bingner <sam@bingner.com> | 2019-06-05 22:02:50 -1000 |
commit | a255618e22152ca2e5fd361a3d0762e9db20dd80 (patch) | |
tree | 5c98f76c0de0785b8d5b58ac622da34f0d024a8f /data/vim/patches/8.1.0772 | |
parent | 1b1fa61507a809a66f053a8523f883b2b6a2f487 (diff) |
Update vim to 8.1.1471
Diffstat (limited to 'data/vim/patches/8.1.0772')
-rw-r--r-- | data/vim/patches/8.1.0772 | 326 |
1 files changed, 326 insertions, 0 deletions
diff --git a/data/vim/patches/8.1.0772 b/data/vim/patches/8.1.0772 new file mode 100644 index 000000000..c2dee756c --- /dev/null +++ b/data/vim/patches/8.1.0772 @@ -0,0 +1,326 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0772 +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.0772 +Problem: The sign_define_by_name() function is too long. +Solution: Split it into smaller functions. (Yegappan Lakshmanan, + closes #3819) +Files: src/sign.c + + +*** ../vim-8.1.0771/src/sign.c 2019-01-17 17:36:42.495509219 +0100 +--- src/sign.c 2019-01-18 22:00:14.645875627 +0100 +*************** +*** 727,732 **** +--- 727,866 ---- + } + + /* ++ * Allocate a new sign ++ */ ++ static sign_T * ++ alloc_new_sign(char_u *name) ++ { ++ sign_T *sp; ++ sign_T *lp; ++ int start = next_sign_typenr; ++ ++ // Allocate a new sign. ++ sp = (sign_T *)alloc_clear_id((unsigned)sizeof(sign_T), ++ aid_sign_define_by_name); ++ if (sp == NULL) ++ return NULL; ++ ++ // Check that next_sign_typenr is not already being used. ++ // This only happens after wrapping around. Hopefully ++ // another one got deleted and we can use its number. ++ for (lp = first_sign; lp != NULL; ) ++ { ++ if (lp->sn_typenr == next_sign_typenr) ++ { ++ ++next_sign_typenr; ++ if (next_sign_typenr == MAX_TYPENR) ++ next_sign_typenr = 1; ++ if (next_sign_typenr == start) ++ { ++ vim_free(sp); ++ emsg(_("E612: Too many signs defined")); ++ return NULL; ++ } ++ lp = first_sign; // start all over ++ continue; ++ } ++ lp = lp->sn_next; ++ } ++ ++ sp->sn_typenr = next_sign_typenr; ++ if (++next_sign_typenr == MAX_TYPENR) ++ next_sign_typenr = 1; // wrap around ++ ++ sp->sn_name = vim_strsave(name); ++ if (sp->sn_name == NULL) // out of memory ++ { ++ vim_free(sp); ++ return NULL; ++ } ++ ++ return sp; ++ } ++ ++ /* ++ * Initialize the icon information for a new sign ++ */ ++ static void ++ sign_define_init_icon(sign_T *sp, char_u *icon) ++ { ++ vim_free(sp->sn_icon); ++ sp->sn_icon = vim_strsave(icon); ++ backslash_halve(sp->sn_icon); ++ # ifdef FEAT_SIGN_ICONS ++ if (gui.in_use) ++ { ++ out_flush(); ++ if (sp->sn_image != NULL) ++ gui_mch_destroy_sign(sp->sn_image); ++ sp->sn_image = gui_mch_register_sign(sp->sn_icon); ++ } ++ # endif ++ } ++ ++ /* ++ * Initialize the text for a new sign ++ */ ++ static int ++ sign_define_init_text(sign_T *sp, char_u *text) ++ { ++ char_u *s; ++ char_u *endp; ++ int cells; ++ int len; ++ ++ endp = text + (int)STRLEN(text); ++ ++ // Remove backslashes so that it is possible to use a space. ++ for (s = text; s + 1 < endp; ++s) ++ if (*s == '\\') ++ { ++ STRMOVE(s, s + 1); ++ --endp; ++ } ++ ++ // Count cells and check for non-printable chars ++ # ifdef FEAT_MBYTE ++ if (has_mbyte) ++ { ++ cells = 0; ++ for (s = text; s < endp; s += (*mb_ptr2len)(s)) ++ { ++ if (!vim_isprintc((*mb_ptr2char)(s))) ++ break; ++ cells += (*mb_ptr2cells)(s); ++ } ++ } ++ else ++ # endif ++ { ++ for (s = text; s < endp; ++s) ++ if (!vim_isprintc(*s)) ++ break; ++ cells = (int)(s - text); ++ } ++ ++ // Currently sign text must be one or two display cells ++ if (s != endp || cells < 1 || cells > 2) ++ { ++ semsg(_("E239: Invalid sign text: %s"), text); ++ return FAIL; ++ } ++ ++ vim_free(sp->sn_text); ++ // Allocate one byte more if we need to pad up ++ // with a space. ++ len = (int)(endp - text + ((cells == 1) ? 1 : 0)); ++ sp->sn_text = vim_strnsave(text, len); ++ ++ // For single character sign text, pad with a space. ++ if (sp->sn_text != NULL && cells == 1) ++ STRCPY(sp->sn_text + len - 1, " "); ++ ++ return OK; ++ } ++ ++ /* + * Define a new sign or update an existing sign + */ + int +*************** +*** 743,790 **** + sp = sign_find(name, &sp_prev); + if (sp == NULL) + { +! sign_T *lp; +! int start = next_sign_typenr; +! +! // Allocate a new sign. +! sp = (sign_T *)alloc_clear_id((unsigned)sizeof(sign_T), +! aid_sign_define_by_name); + if (sp == NULL) + return FAIL; + +- // Check that next_sign_typenr is not already being used. +- // This only happens after wrapping around. Hopefully +- // another one got deleted and we can use its number. +- for (lp = first_sign; lp != NULL; ) +- { +- if (lp->sn_typenr == next_sign_typenr) +- { +- ++next_sign_typenr; +- if (next_sign_typenr == MAX_TYPENR) +- next_sign_typenr = 1; +- if (next_sign_typenr == start) +- { +- vim_free(sp); +- emsg(_("E612: Too many signs defined")); +- return FAIL; +- } +- lp = first_sign; // start all over +- continue; +- } +- lp = lp->sn_next; +- } +- +- sp->sn_typenr = next_sign_typenr; +- if (++next_sign_typenr == MAX_TYPENR) +- next_sign_typenr = 1; // wrap around +- +- sp->sn_name = vim_strsave(name); +- if (sp->sn_name == NULL) // out of memory +- { +- vim_free(sp); +- return FAIL; +- } +- + // add the new sign to the list of signs + if (sp_prev == NULL) + first_sign = sp; +--- 877,886 ---- + sp = sign_find(name, &sp_prev); + if (sp == NULL) + { +! sp = alloc_new_sign(name); + if (sp == NULL) + return FAIL; + + // add the new sign to the list of signs + if (sp_prev == NULL) + first_sign = sp; +*************** +*** 794,866 **** + + // set values for a defined sign. + if (icon != NULL) +! { +! vim_free(sp->sn_icon); +! sp->sn_icon = vim_strsave(icon); +! backslash_halve(sp->sn_icon); +! # ifdef FEAT_SIGN_ICONS +! if (gui.in_use) +! { +! out_flush(); +! if (sp->sn_image != NULL) +! gui_mch_destroy_sign(sp->sn_image); +! sp->sn_image = gui_mch_register_sign(sp->sn_icon); +! } +! # endif +! } + +! if (text != NULL) +! { +! char_u *s; +! char_u *endp; +! int cells; +! int len; +! +! endp = text + (int)STRLEN(text); +! for (s = text; s + 1 < endp; ++s) +! if (*s == '\\') +! { +! // Remove a backslash, so that it is possible +! // to use a space. +! STRMOVE(s, s + 1); +! --endp; +! } +! # ifdef FEAT_MBYTE +! // Count cells and check for non-printable chars +! if (has_mbyte) +! { +! cells = 0; +! for (s = text; s < endp; s += (*mb_ptr2len)(s)) +! { +! if (!vim_isprintc((*mb_ptr2char)(s))) +! break; +! cells += (*mb_ptr2cells)(s); +! } +! } +! else +! # endif +! { +! for (s = text; s < endp; ++s) +! if (!vim_isprintc(*s)) +! break; +! cells = (int)(s - text); +! } +! // Currently must be one or two display cells +! if (s != endp || cells < 1 || cells > 2) +! { +! semsg(_("E239: Invalid sign text: %s"), text); +! return FAIL; +! } +! +! vim_free(sp->sn_text); +! // Allocate one byte more if we need to pad up +! // with a space. +! len = (int)(endp - text + ((cells == 1) ? 1 : 0)); +! sp->sn_text = vim_strnsave(text, len); +! +! if (sp->sn_text != NULL && cells == 1) +! STRCPY(sp->sn_text + len - 1, " "); +! } + + if (linehl != NULL) + sp->sn_line_hl = syn_check_group(linehl, (int)STRLEN(linehl)); +--- 890,899 ---- + + // set values for a defined sign. + if (icon != NULL) +! sign_define_init_icon(sp, icon); + +! if (text != NULL && (sign_define_init_text(sp, text) == FAIL)) +! return FAIL; + + if (linehl != NULL) + sp->sn_line_hl = syn_check_group(linehl, (int)STRLEN(linehl)); +*** ../vim-8.1.0771/src/version.c 2019-01-18 21:45:14.593232311 +0100 +--- src/version.c 2019-01-18 21:59:53.034047592 +0100 +*************** +*** 793,794 **** +--- 793,796 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 772, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +246. You use up your free 1 Gbyte in two days. + + /// 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 /// |