Skip to content

Commit fa52c64

Browse files
committed
Merge remote-tracking branch 'vim/master'
2 parents 7f4c26a + bfd096d commit fa52c64

14 files changed

Lines changed: 95 additions & 55 deletions

src/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2131,6 +2131,7 @@ test_arglist \
21312131
test_set \
21322132
test_signs \
21332133
test_sort \
2134+
test_source_utf8 \
21342135
test_startup \
21352136
test_startup_utf8 \
21362137
test_stat \

src/eval.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4087,11 +4087,11 @@ eval6(
40874087
{
40884088
#ifdef FEAT_NUM64
40894089
if (n1 == 0)
4090-
n1 = -0x7fffffffffffffff - 1; /* similar to NaN */
4090+
n1 = -0x7fffffffffffffffLL - 1; /* similar to NaN */
40914091
else if (n1 < 0)
4092-
n1 = -0x7fffffffffffffff;
4092+
n1 = -0x7fffffffffffffffLL;
40934093
else
4094-
n1 = 0x7fffffffffffffff;
4094+
n1 = 0x7fffffffffffffffLL;
40954095
#else
40964096
if (n1 == 0)
40974097
n1 = -0x7fffffffL - 1L; /* similar to NaN */

src/evalfunc.c

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3291,10 +3291,10 @@ f_float2nr(typval_T *argvars, typval_T *rettv)
32913291
if (get_float_arg(argvars, &f) == OK)
32923292
{
32933293
# ifdef FEAT_NUM64
3294-
if (f < -0x7fffffffffffffff)
3295-
rettv->vval.v_number = -0x7fffffffffffffff;
3296-
else if (f > 0x7fffffffffffffff)
3297-
rettv->vval.v_number = 0x7fffffffffffffff;
3294+
if (f < -0x7fffffffffffffffLL)
3295+
rettv->vval.v_number = -0x7fffffffffffffffLL;
3296+
else if (f > 0x7fffffffffffffffLL)
3297+
rettv->vval.v_number = 0x7fffffffffffffffLL;
32983298
else
32993299
rettv->vval.v_number = (varnumber_T)f;
33003300
# else
@@ -11193,7 +11193,7 @@ f_strgetchar(typval_T *argvars, typval_T *rettv)
1119311193
break;
1119411194
}
1119511195
--charidx;
11196-
byteidx += mb_cptr2len(str + byteidx);
11196+
byteidx += MB_CPTR2LEN(str + byteidx);
1119711197
}
1119811198
}
1119911199
#else
@@ -11353,7 +11353,7 @@ f_strcharpart(typval_T *argvars, typval_T *rettv)
1135311353
if (nchar > 0)
1135411354
while (nchar > 0 && nbyte < slen)
1135511355
{
11356-
nbyte += mb_cptr2len(p + nbyte);
11356+
nbyte += MB_CPTR2LEN(p + nbyte);
1135711357
--nchar;
1135811358
}
1135911359
else
@@ -11368,7 +11368,7 @@ f_strcharpart(typval_T *argvars, typval_T *rettv)
1136811368
if (off < 0)
1136911369
len += 1;
1137011370
else
11371-
len += mb_cptr2len(p + off);
11371+
len += MB_CPTR2LEN(p + off);
1137211372
--charlen;
1137311373
}
1137411374
}

src/ex_cmds.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7861,6 +7861,11 @@ ex_sign(exarg_T *eap)
78617861
{ /* ... not currently in a window */
78627862
char_u *cmd;
78637863

7864+
if (buf->b_fname == NULL)
7865+
{
7866+
EMSG(_("E934: Cannot jump to a buffer that does not have a name"));
7867+
return;
7868+
}
78647869
cmd = alloc((unsigned)STRLEN(buf->b_fname) + 25);
78657870
if (cmd == NULL)
78667871
return;

src/getchar.c

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4658,8 +4658,16 @@ vim_strsave_escape_csi(
46584658
char_u *res;
46594659
char_u *s, *d;
46604660

4661-
/* Need a buffer to hold up to three times as much. */
4662-
res = alloc((unsigned)(STRLEN(p) * 3) + 1);
4661+
/* Need a buffer to hold up to three times as much. Four in case of an
4662+
* illegal utf-8 byte:
4663+
* 0xc0 -> 0xc3 0x80 -> 0xc3 K_SPECIAL KS_SPECIAL KE_FILLER */
4664+
res = alloc((unsigned)(STRLEN(p) *
4665+
#ifdef FEAT_MBYTE
4666+
4
4667+
#else
4668+
3
4669+
#endif
4670+
) + 1);
46634671
if (res != NULL)
46644672
{
46654673
d = res;
@@ -4674,22 +4682,10 @@ vim_strsave_escape_csi(
46744682
}
46754683
else
46764684
{
4677-
#ifdef FEAT_MBYTE
4678-
int len = mb_char2len(PTR2CHAR(s));
4679-
int len2 = mb_ptr2len(s);
4680-
#endif
46814685
/* Add character, possibly multi-byte to destination, escaping
4682-
* CSI and K_SPECIAL. */
4686+
* CSI and K_SPECIAL. Be careful, it can be an illegal byte! */
46834687
d = add_char2buf(PTR2CHAR(s), d);
4684-
#ifdef FEAT_MBYTE
4685-
while (len < len2)
4686-
{
4687-
/* add following combining char */
4688-
d = add_char2buf(PTR2CHAR(s + len), d);
4689-
len += mb_char2len(PTR2CHAR(s + len));
4690-
}
4691-
#endif
4692-
mb_ptr_adv(s);
4688+
s += MB_CPTR2LEN(s);
46934689
}
46944690
}
46954691
*d = NUL;

src/macros.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -274,14 +274,15 @@
274274
/* Backup multi-byte pointer. Only use with "p" > "s" ! */
275275
# define mb_ptr_back(s, p) p -= has_mbyte ? ((*mb_head_off)(s, p - 1) + 1) : 1
276276
/* get length of multi-byte char, not including composing chars */
277-
# define mb_cptr2len(p) (enc_utf8 ? utf_ptr2len(p) : (*mb_ptr2len)(p))
277+
# define MB_CPTR2LEN(p) (enc_utf8 ? utf_ptr2len(p) : (*mb_ptr2len)(p))
278278

279279
# define MB_COPY_CHAR(f, t) if (has_mbyte) mb_copy_char(&f, &t); else *t++ = *f++
280280
# define MB_CHARLEN(p) (has_mbyte ? mb_charlen(p) : (int)STRLEN(p))
281281
# define MB_CHAR2LEN(c) (has_mbyte ? mb_char2len(c) : 1)
282282
# define PTR2CHAR(p) (has_mbyte ? mb_ptr2char(p) : (int)*(p))
283283
#else
284284
# define MB_PTR2LEN(p) 1
285+
# define MB_CPTR2LEN(p) 1
285286
# define mb_ptr_adv(p) ++p
286287
# define mb_cptr_adv(p) ++p
287288
# define mb_ptr_back(s, p) --p

src/os_unix.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4824,7 +4824,7 @@ mch_call_shell(
48244824
* round. */
48254825
for (p = buffer; p < buffer + len; p += l)
48264826
{
4827-
l = mb_cptr2len(p);
4827+
l = MB_CPTR2LEN(p);
48284828
if (l == 0)
48294829
l = 1; /* NUL byte? */
48304830
else if (MB_BYTE2LEN(*p) != l)

src/os_win32.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4370,7 +4370,7 @@ dump_pipe(int options,
43704370
* round. */
43714371
for (p = buffer; p < buffer + len; p += l)
43724372
{
4373-
l = mb_cptr2len(p);
4373+
l = MB_CPTR2LEN(p);
43744374
if (l == 0)
43754375
l = 1; /* NUL byte? */
43764376
else if (MB_BYTE2LEN(*p) != l)

src/spell.c

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5379,7 +5379,7 @@ suggest_trie_walk(
53795379
#ifdef FEAT_MBYTE
53805380
if (has_mbyte)
53815381
{
5382-
n = mb_cptr2len(p);
5382+
n = MB_CPTR2LEN(p);
53835383
c = mb_ptr2char(p);
53845384
if (p[n] == NUL)
53855385
c2 = NUL;
@@ -5477,9 +5477,9 @@ suggest_trie_walk(
54775477
#ifdef FEAT_MBYTE
54785478
if (has_mbyte)
54795479
{
5480-
n = mb_cptr2len(p);
5480+
n = MB_CPTR2LEN(p);
54815481
c = mb_ptr2char(p);
5482-
fl = mb_cptr2len(p + n);
5482+
fl = MB_CPTR2LEN(p + n);
54835483
c2 = mb_ptr2char(p + n);
54845484
if (!soundfold && !spell_iswordp(p + n + fl, curwin))
54855485
c3 = c; /* don't swap non-word char */
@@ -5596,10 +5596,10 @@ suggest_trie_walk(
55965596
#ifdef FEAT_MBYTE
55975597
if (has_mbyte)
55985598
{
5599-
n = mb_cptr2len(p);
5599+
n = MB_CPTR2LEN(p);
56005600
c = mb_ptr2char(p);
5601-
fl = mb_cptr2len(p + n);
5602-
fl += mb_cptr2len(p + n + fl);
5601+
fl = MB_CPTR2LEN(p + n);
5602+
fl += MB_CPTR2LEN(p + n + fl);
56035603
mch_memmove(p, p + n, fl);
56045604
mb_char2bytes(c, p + fl);
56055605
stack[depth].ts_fidxtry = sp->ts_fidx + n + fl;
@@ -5661,10 +5661,10 @@ suggest_trie_walk(
56615661
#ifdef FEAT_MBYTE
56625662
if (has_mbyte)
56635663
{
5664-
n = mb_cptr2len(p);
5665-
n += mb_cptr2len(p + n);
5664+
n = MB_CPTR2LEN(p);
5665+
n += MB_CPTR2LEN(p + n);
56665666
c = mb_ptr2char(p + n);
5667-
tl = mb_cptr2len(p + n);
5667+
tl = MB_CPTR2LEN(p + n);
56685668
mch_memmove(p + tl, p, n);
56695669
mb_char2bytes(c, p);
56705670
stack[depth].ts_fidxtry = sp->ts_fidx + n + tl;
@@ -5955,8 +5955,8 @@ find_keepcap_word(slang_T *slang, char_u *fword, char_u *kword)
59555955
#ifdef FEAT_MBYTE
59565956
if (has_mbyte)
59575957
{
5958-
flen = mb_cptr2len(fword + fwordidx[depth]);
5959-
ulen = mb_cptr2len(uword + uwordidx[depth]);
5958+
flen = MB_CPTR2LEN(fword + fwordidx[depth]);
5959+
ulen = MB_CPTR2LEN(uword + uwordidx[depth]);
59605960
}
59615961
else
59625962
#endif

src/testdir/test_alot_utf8.vim

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,4 @@
88
source test_expr_utf8.vim
99
source test_matchadd_conceal_utf8.vim
1010
source test_regexp_utf8.vim
11+
source test_source_utf8.vim

0 commit comments

Comments
 (0)