diff options
author | Sören Tempel <soeren+git@soeren-tempel.net> | 2015-11-30 19:14:21 +0100 |
---|---|---|
committer | Sören Tempel <soeren+git@soeren-tempel.net> | 2015-12-07 18:51:21 +0100 |
commit | 7525cfa63719a65d5c5f924219b13a0111f1343f (patch) | |
tree | 459dbac35248cc6b5b0c93e8764d42b5a5d541b6 /testing/nvi/13widechar_horrors.patch | |
parent | 4b763f9b85d0696d458ffbd14d99544cdd7550cf (diff) | |
download | aports-7525cfa63719a65d5c5f924219b13a0111f1343f.tar.bz2 aports-7525cfa63719a65d5c5f924219b13a0111f1343f.tar.xz |
testing/nvi: new aport
Including a subset of the debian patchset.
Diffstat (limited to 'testing/nvi/13widechar_horrors.patch')
-rw-r--r-- | testing/nvi/13widechar_horrors.patch | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/testing/nvi/13widechar_horrors.patch b/testing/nvi/13widechar_horrors.patch new file mode 100644 index 0000000000..d6b5f33b5b --- /dev/null +++ b/testing/nvi/13widechar_horrors.patch @@ -0,0 +1,64 @@ +From: <hesso@pool.math.tu-berlin.de> +Subject: This patch tries to cope with the fact that widechar support +in nvi is at best rudimentary. +Hunk 1) +* Due to "ch = *t", this code is not wide-char aware, so +cast the value to a proper type so the KEY_ macros make +the right choice. +Hunk 2) +* Printing of the in-/decreased number back into the screen +buffer is not widechar-aware, either. Add a dirty fix. +Cf. #497349. + +--- nvi-1.81.6.orig/vi/vs_msg.c 2007-11-18 17:41:42.000000000 +0100 ++++ nvi-1.81.6/vi/vs_msg.c 2009-03-01 14:51:08.211414132 +0100 +@@ -472,10 +472,10 @@ + */ + if (ch == '\t') + ch = ' '; +- chlen = KEY_LEN(sp, ch); ++ chlen = KEY_LEN(sp, (unsigned char)ch); + if (cbp + chlen >= ecbp) + FLUSH; +- for (kp = KEY_NAME(sp, ch); chlen--;) ++ for (kp = KEY_NAME(sp, (unsigned char)ch); chlen--;) + *cbp++ = *kp++; + } + if (cbp > cbuf) +--- nvi-1.81.6.orig/vi/v_increment.c 2007-11-18 17:41:42.000000000 +0100 ++++ nvi-1.81.6/vi/v_increment.c 2009-03-01 15:12:50.950415874 +0100 +@@ -57,7 +57,7 @@ + long change, ltmp, lval; + size_t beg, blen, end, len, nlen, wlen; + int base, isempty, rval; +- char *ntype, nbuf[100]; ++ char *ntype, nbuf[100 * sizeof(CHAR_T)]; + CHAR_T *bp, *p, *t; + + /* Validate the operator. */ +@@ -202,7 +202,7 @@ + /* If we cross 0, signed numbers lose their sign. */ + if (lval == 0 && ntype == fmt[SDEC]) + ntype = fmt[DEC]; +- nlen = snprintf(nbuf, sizeof(nbuf), ntype, lval); ++ nlen = snprintf(nbuf, sizeof(nbuf)/sizeof(CHAR_T), ntype, lval); + } else { + if ((nret = nget_uslong(sp, &ulval, t, NULL, base)) != NUM_OK) + goto err; +@@ -224,7 +224,15 @@ + if (base == 16) + wlen -= 2; + +- nlen = snprintf(nbuf, sizeof(nbuf), ntype, wlen, ulval); ++ nlen = snprintf(nbuf, sizeof(nbuf)/sizeof(CHAR_T), ntype, wlen, ulval); ++ } ++ ++ /* Inflate the printed char buffer to CHAR_T elements if necessary */ ++ if (sizeof(CHAR_T) > sizeof(char)) { ++ int nlen_inflate; ++ for (nlen_inflate = nlen; nlen_inflate >= 0; nlen_inflate--) { ++ ((CHAR_T *)nbuf)[nlen_inflate] = nbuf[nlen_inflate]; ++ } + } + + /* Build the new line. */ |