Created
December 2, 2011 07:28
-
-
Save lichray/1422190 to your computer and use it in GitHub Desktop.
The Debian way to fix v_increment
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#! /bin/sh /usr/share/dpatch/dpatch-run | |
## 13widechar_horrors.dpatch by <[email protected]> | |
## | |
## DP: This patch tries to cope with the fact that widechar support | |
## DP: in nvi is at best rudimentary. | |
## DP: Hunk 1) | |
## DP: * Due to "ch = *t", this code is not wide-char aware, so | |
## DP: cast the value to a proper type so the KEY_ macros make | |
## DP: the right choice. | |
## DP: Hunk 2) | |
## DP: * Printing of the in-/decreased number back into the screen | |
## DP: buffer is not widechar-aware, either. Add a dirty fix. | |
## DP: Cf. #497349. | |
@DPATCH@ | |
--- 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. */ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment