1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2025-09-13 01:31:18 +02:00

28339: backslash-newline history without HIST_LEX_WORDS

28340: assignment to range of scalar variable with multibyte characters
This commit is contained in:
Peter Stephenson 2010-10-10 17:51:29 +00:00
parent 6fea7f0d3c
commit af5a85f363
4 changed files with 50 additions and 7 deletions

View file

@ -1,6 +1,12 @@
2010-10-10 Peter Stephenson <p.w.stephenson@ntlworld.com> 2010-10-10 Peter Stephenson <p.w.stephenson@ntlworld.com>
* 28332: Src/hist.c: HIST_LEX_WORDS didn't handled * 28340: Src/params.c: assignment with negative index didn't
work with multibyte characters.
* 28339: Src/hist.c: NO_HIST_LEX_WORDS didn't handle
backslash-newline line continuation properly, either.
* 28332: Src/hist.c: HIST_LEX_WORDS didn't handle
backslash-newline line continuation properly. Come to think of backslash-newline line continuation properly. Come to think of
it, neither does the alternative. it, neither does the alternative.
@ -13728,5 +13734,5 @@
***************************************************** *****************************************************
* This is used by the shell to define $ZSH_PATCHLEVEL * This is used by the shell to define $ZSH_PATCHLEVEL
* $Revision: 1.5101 $ * $Revision: 1.5102 $
***************************************************** *****************************************************

View file

@ -2365,7 +2365,7 @@ readhistfile(char *fn, int err, int readflags)
*/ */
if (inblank(*pt)) if (inblank(*pt))
pt++; pt++;
else if (strpfx("\\\n", pt)) else if (pt[0] == '\\' && pt[1] == '\n')
pt += 2; pt += 2;
else else
break; break;
@ -2414,8 +2414,14 @@ readhistfile(char *fn, int err, int readflags)
} }
if (!uselex) { if (!uselex) {
do { do {
while (inblank(*pt)) for (;;) {
if (inblank(*pt))
pt++; pt++;
else if (pt[0] == '\\' && pt[1] == '\n')
pt += 2;
else
break;
}
if (*pt) { if (*pt) {
if (nwordpos >= nwords) if (nwordpos >= nwords)
words = (short *) words = (short *)

View file

@ -2275,9 +2275,22 @@ setstrvalue(Value v, char *val)
if (v->start > zlen) if (v->start > zlen)
v->start = zlen; v->start = zlen;
if (v->end < 0) { if (v->end < 0) {
v->end += zlen + 1; v->end += zlen;
if (v->end < 0) if (v->end < 0) {
v->end = 0; v->end = 0;
} else if (v->end >= zlen) {
v->end = zlen;
} else {
#ifdef MULTIBYTE_SUPPORT
if (isset(MULTIBYTE)) {
v->end += MB_METACHARLEN(z + v->end);
} else {
v->end++;
}
#else
v->end++;
#endif
}
} }
else if (v->end > zlen) else if (v->end > zlen)
v->end = zlen; v->end = zlen;

View file

@ -447,3 +447,21 @@
print $(( [#16] #REPLY )) print $(( [#16] #REPLY ))
0:read passes through invalid multibyte characters 0:read passes through invalid multibyte characters
>0xC5 >0xC5
word=abcま
word[-1]=
print $word
word=abcま
word[-2]=
print $word
word=abcま
word[4]=d
print $word
word=abcま
word[3]=not_c
print $word
0:assignment with negative indices
>abc
>abま
>abcd
>abnot_cま