From: root Date: Mon, 13 Dec 2004 06:44:18 +0000 (+0000) Subject: *** empty log message *** X-Git-Url: http://git.openbox.org/?a=commitdiff_plain;h=a56fc4f3eaccc896a01301693f444af39b1095d2;p=dana%2Furxvt.git *** empty log message *** --- diff --git a/Changes b/Changes index 5a6f2f81..c2767564 100644 --- a/Changes +++ b/Changes @@ -11,6 +11,8 @@ FEAT: double-click: more intelligent (urls etc.) FEAT: OnTheSpot editing. FEAT: tabbed windows (hey, just use screen...) +4.5 Mon Dec 13 07:47:16 CET 2004 + - fix an extremely nasty bug in utf8-conversion. upgrade is advised. - completely re-wrote selection pasting. This should fix garbled incomplete characters at 32k boundaries and too-short INCR selections, and more. Increases memory requirements considerably diff --git a/src/misc.C b/src/misc.C index a56e4de0..e93dba7d 100644 --- a/src/misc.C +++ b/src/misc.C @@ -108,17 +108,19 @@ rxvt_utf8towcs (const char *str, int len) unsigned char *s = (unsigned char *)str; - while (len--) + while (len) { if (s[0] < 0x80) - *p++ = *s++; + { + *p++ = *s++; len--; + } else if (len > 0 && s[0] >= 0xc2 && s[0] <= 0xdf && (s[1] & 0xc0) == 0x80) { *p++ = ((s[0] & 0x1f) << 6) | (s[1] & 0x3f); - s += 2; + s += 2; len -= 2; } else if (len > 1 && ( (s[0] == 0xe0 && s[1] >= 0xa0 && s[1] <= 0xbf) @@ -131,7 +133,7 @@ rxvt_utf8towcs (const char *str, int len) *p++ = ((s[0] & 0x0f) << 12) | ((s[1] & 0x3f) << 6) | (s[2] & 0x3f); - s += 3; + s += 3; len -= 3; } else if (len > 2 && ( (s[0] == 0xf0 && s[1] >= 0x90 && s[1] <= 0xbf) @@ -145,12 +147,12 @@ rxvt_utf8towcs (const char *str, int len) | ((s[1] & 0x3f) << 12) | ((s[2] & 0x3f) << 6) | (s[3] & 0x3f); - s += 4; + s += 4; len -= 4; } else { *p++ = 0xfffd; - s++; + s++; len--; } } diff --git a/src/screen.C b/src/screen.C index e0d7dbca..58368982 100644 --- a/src/screen.C +++ b/src/screen.C @@ -2716,7 +2716,7 @@ rxvt_term::selection_paste (Window win, Atom prop, bool delete_prop) XTextProperty ct; if (XGetWindowProperty (display->display, win, prop, - 0, (long)(PROP_SIZE / 4), + 0, PROP_SIZE / 4, delete_prop, AnyPropertyType, &ct.encoding, &ct.format, &ct.nitems, &bytes_after, @@ -2733,25 +2733,22 @@ rxvt_term::selection_paste (Window win, Atom prop, bool delete_prop) { // fetch and append remaining data XTextProperty ct2; - unsigned long bytes_after2; if (XGetWindowProperty (display->display, win, prop, - ct.nitems / 4, (long) (bytes_after + 3) / 4, + ct.nitems / 4, (bytes_after + 3) / 4, delete_prop, AnyPropertyType, &ct2.encoding, &ct2.format, - &ct2.nitems, &bytes_after2, + &ct2.nitems, &bytes_after, &ct2.value) != Success) goto bailout; // realloc should be compatible to XFree, here, and elsewhere, too - ct.value = (unsigned char *)realloc (ct.value, ct.nitems + bytes_after); - memcpy (ct.value + ct.nitems, ct2.value, ct2.nitems); + ct.value = (unsigned char *)realloc (ct.value, ct.nitems + ct2.nitems + 1); + memcpy (ct.value + ct.nitems, ct2.value, ct2.nitems + 1); ct.nitems += ct2.nitems; XFree (ct2.value); } - else if (delete_prop) - XDeleteProperty (display->display, win, prop); if (ct.value == 0) goto bailout; diff --git a/src/version.h b/src/version.h index 650d7a24..8a12d8ca 100644 --- a/src/version.h +++ b/src/version.h @@ -1,5 +1,5 @@ -#define VERSION "4.4" -#define VSTRING "40400" -#define DATE "2004-12-12" -#define LSMDATE "12DEC04" -#define LIBVERSION "4:4:0" +#define VERSION "4.5" +#define VSTRING "40500" +#define DATE "2004-12-13" +#define LSMDATE "13DEC04" +#define LIBVERSION "4:5:0"