# HG changeset patch # User Bram Moolenaar # Date 1338556862 -7200 # Node ID f52d2ea0f81c20e6f026d74cec66b135d5470d2d # Parent 7a6efa56f3062592624c1162dabca45e9edb5c8f updated for version 7.3.535 Problem: Many #ifdefs for MB_MAXBYTES. Solution: Also define MB_MAXBYTES without the +multi_byte feature. Fix places where the buffer didn't include space for a NUL byte. diff --git a/src/arabic.c b/src/arabic.c --- a/src/arabic.c +++ b/src/arabic.c @@ -1066,7 +1066,7 @@ arabic_shape(c, ccp, c1p, prev_c, prev_c if (curr_c != c && ccp != NULL) { - char_u buf[MB_MAXBYTES]; + char_u buf[MB_MAXBYTES + 1]; /* Update the first byte of the character. */ (*mb_char2bytes)(curr_c, buf); diff --git a/src/edit.c b/src/edit.c --- a/src/edit.c +++ b/src/edit.c @@ -1648,11 +1648,7 @@ static int pc_status; #define PC_STATUS_RIGHT 1 /* right halve of double-wide char */ #define PC_STATUS_LEFT 2 /* left halve of double-wide char */ #define PC_STATUS_SET 3 /* pc_bytes was filled */ -#ifdef FEAT_MBYTE static char_u pc_bytes[MB_MAXBYTES + 1]; /* saved bytes */ -#else -static char_u pc_bytes[2]; /* saved bytes */ -#endif static int pc_attr; static int pc_row; static int pc_col; @@ -6819,11 +6815,7 @@ set_last_insert(c) char_u *s; vim_free(last_insert); -#ifdef FEAT_MBYTE last_insert = alloc(MB_MAXBYTES * 3 + 5); -#else - last_insert = alloc(6); -#endif if (last_insert != NULL) { s = last_insert; @@ -6861,7 +6853,7 @@ add_char2buf(c, s) char_u *s; { #ifdef FEAT_MBYTE - char_u temp[MB_MAXBYTES]; + char_u temp[MB_MAXBYTES + 1]; int i; int len; @@ -7423,7 +7415,7 @@ mb_replace_pop_ins(cc) int cc; { int n; - char_u buf[MB_MAXBYTES]; + char_u buf[MB_MAXBYTES + 1]; int i; int c; @@ -10109,11 +10101,7 @@ do_insert_char_pre(c) int c; { char_u *res; -#ifdef FEAT_MBYTE char_u buf[MB_MAXBYTES + 1]; -#else - char_u buf[2]; -#endif /* Return quickly when there is nothing to do. */ if (!has_insertcharpre()) diff --git a/src/eval.c b/src/eval.c --- a/src/eval.c +++ b/src/eval.c @@ -19170,11 +19170,7 @@ get_vim_var_list(idx) set_vim_var_char(c) int c; { -#ifdef FEAT_MBYTE - char_u buf[MB_MAXBYTES]; -#else - char_u buf[2]; -#endif + char_u buf[MB_MAXBYTES + 1]; #ifdef FEAT_MBYTE if (has_mbyte) diff --git a/src/getchar.c b/src/getchar.c --- a/src/getchar.c +++ b/src/getchar.c @@ -723,7 +723,7 @@ read_redo(init, old_redo) int c; #ifdef FEAT_MBYTE int n; - char_u buf[MB_MAXBYTES]; + char_u buf[MB_MAXBYTES + 1]; int i; #endif @@ -1072,7 +1072,7 @@ ins_char_typebuf(c) int c; { #ifdef FEAT_MBYTE - char_u buf[MB_MAXBYTES]; + char_u buf[MB_MAXBYTES + 1]; #else char_u buf[4]; #endif @@ -1547,7 +1547,7 @@ vgetc() int c, c2; #ifdef FEAT_MBYTE int n; - char_u buf[MB_MAXBYTES]; + char_u buf[MB_MAXBYTES + 1]; int i; #endif @@ -4335,11 +4335,7 @@ check_abbr(c, ptr, col, mincol) int scol; /* starting column of the abbr. */ int j; char_u *s; -#ifdef FEAT_MBYTE char_u tb[MB_MAXBYTES + 4]; -#else - char_u tb[4]; -#endif mapblock_T *mp; #ifdef FEAT_LOCALMAP mapblock_T *mp2; diff --git a/src/mbyte.c b/src/mbyte.c --- a/src/mbyte.c +++ b/src/mbyte.c @@ -708,7 +708,7 @@ codepage_invalid: */ n = (i & 0x80) ? 2 : 1; # else - char buf[MB_MAXBYTES]; + char buf[MB_MAXBYTES + 1]; # ifdef X_LOCALE # ifndef mblen # define mblen _Xmblen @@ -1953,7 +1953,7 @@ utfc_ptr2char_len(p, pcc, maxlen) /* * Convert the character at screen position "off" to a sequence of bytes. * Includes the composing characters. - * "buf" must at least have the length MB_MAXBYTES. + * "buf" must at least have the length MB_MAXBYTES + 1. * Only to be used when ScreenLinesUC[off] != 0. * Returns the produced number of bytes. */ diff --git a/src/misc1.c b/src/misc1.c --- a/src/misc1.c +++ b/src/misc1.c @@ -1932,7 +1932,7 @@ ins_char(c) int c; { #if defined(FEAT_MBYTE) || defined(PROTO) - char_u buf[MB_MAXBYTES]; + char_u buf[MB_MAXBYTES + 1]; int n; n = (*mb_char2bytes)(c, buf); diff --git a/src/screen.c b/src/screen.c --- a/src/screen.c +++ b/src/screen.c @@ -6621,16 +6621,17 @@ screen_putchar(c, row, col, attr) int row, col; int attr; { + char_u buf[MB_MAXBYTES + 1]; + #ifdef FEAT_MBYTE - char_u buf[MB_MAXBYTES + 1]; - - buf[(*mb_char2bytes)(c, buf)] = NUL; -#else - char_u buf[2]; - - buf[0] = c; - buf[1] = NUL; -#endif + if (has_mbyte) + buf[(*mb_char2bytes)(c, buf)] = NUL; + else +#endif + { + buf[0] = c; + buf[1] = NUL; + } screen_puts(buf, row, col, attr); } diff --git a/src/spell.c b/src/spell.c --- a/src/spell.c +++ b/src/spell.c @@ -13694,7 +13694,7 @@ similar_chars(slang, c1, c2) { int m1, m2; #ifdef FEAT_MBYTE - char_u buf[MB_MAXBYTES]; + char_u buf[MB_MAXBYTES + 1]; hashitem_T *hi; if (c1 >= 256) diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -715,6 +715,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 535, +/**/ 534, /**/ 533, diff --git a/src/vim.h b/src/vim.h --- a/src/vim.h +++ b/src/vim.h @@ -1703,6 +1703,8 @@ int vim_memcmp __ARGS((void *, void *, s * character of up to 6 bytes, or one 16-bit character of up to three bytes * plus six following composing characters of three bytes each. */ # define MB_MAXBYTES 21 +#else +# define MB_MAXBYTES 1 #endif #if (defined(FEAT_PROFILE) || defined(FEAT_RELTIME)) && !defined(PROTO) @@ -2017,6 +2019,7 @@ typedef int VimClipboard; /* This is req #pragma warning(disable : 4312) #endif +/* Note: a NULL argument for vim_realloc() is not portable, don't use it. */ #if defined(MEM_PROFILE) # define vim_realloc(ptr, size) mem_realloc((ptr), (size)) #else