To: vim-dev@vim.org Subject: Patch 6.3b.015 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit ------------ Patch 6.3b.015 Problem: Get lalloc(0) error when using "p" in Visual mode while 'clipboard' contains "autoselect,unnamed". (Mark Wagonner) Solution: Avoid allocating zero bytes. Obtain the clipboard when necessary. Files: src/ops.c *** ../vim-6.3b.014/src/ops.c Sun May 16 22:38:45 2004 --- src/ops.c Tue May 25 19:52:26 2004 *************** *** 864,869 **** --- 864,898 ---- y_previous = y_current; } + #ifdef FEAT_CLIPBOARD + /* + * When "regname" is a clipboard register, obtain the selection. If it's not + * available return zero, otherwise return "regname". + */ + static int may_get_selection __ARGS((int regname)); + + static int + may_get_selection(regname) + int regname; + { + if (regname == '*') + { + if (!clip_star.available) + regname = 0; + else + clip_get_selection(&clip_star); + } + else if (regname == '+') + { + if (!clip_plus.available) + regname = 0; + else + clip_get_selection(&clip_plus); + } + return regname; + } + #endif + #if defined(FEAT_VISUAL) || defined(PROTO) /* * Obtain the contents of a "normal" register. The register is made empty. *************** *** 877,882 **** --- 906,921 ---- static struct yankreg *reg; int i; + #ifdef FEAT_CLIPBOARD + /* When Visual area changed, may have to update selection. Obtain the + * selection too. */ + if (name == '*' && clip_star.available && clip_isautosel()) + { + clip_update_selection(); + may_get_selection(name); + } + #endif + get_yank_register(name, 0); reg = (struct yankreg *)alloc((unsigned)sizeof(struct yankreg)); if (reg != NULL) *************** *** 885,892 **** if (copy) { /* If we run out of memory some or all of the lines are empty. */ ! reg->y_array = (char_u **)alloc((unsigned)(sizeof(char_u *) ! * reg->y_size)); if (reg->y_array != NULL) { for (i = 0; i < reg->y_size; ++i) --- 924,934 ---- if (copy) { /* If we run out of memory some or all of the lines are empty. */ ! if (reg->y_size == 0) ! reg->y_array = NULL; ! else ! reg->y_array = (char_u **)alloc((unsigned)(sizeof(char_u *) ! * reg->y_size)); if (reg->y_array != NULL) { for (i = 0; i < reg->y_size; ++i) *************** *** 1048,1082 **** } return OK; } - - #ifdef FEAT_CLIPBOARD - /* - * When "regname" is a clipboard register, obtain the selection. If it's not - * available return zero, otherwise return "regname". - */ - static int may_get_selection __ARGS((int regname)); - - static int - may_get_selection(regname) - int regname; - { - if (regname == '*') - { - if (!clip_star.available) - regname = 0; - else - clip_get_selection(&clip_star); - } - else if (regname == '+') - { - if (!clip_plus.available) - regname = 0; - else - clip_get_selection(&clip_plus); - } - return regname; - } - #endif /* * execute a yank register: copy it into the stuff buffer --- 1090,1095 ---- *** ../vim-6.3b.014/src/version.c Sun May 30 20:29:49 2004 --- src/version.c Sun May 30 20:30:30 2004 *************** *** 643,644 **** --- 643,646 ---- { /* Add new patch number below this line */ + /**/ + 15, /**/ -- hundred-and-one symptoms of being an internet addict: 5. You find yourself brainstorming for new subjects to search. /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ Project leader for A-A-P -- http://www.A-A-P.org /// \\\ Buy at Amazon and help AIDS victims -- http://ICCF.nl/click1.html ///