summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClint Adams <clint@users.sourceforge.net>2005-01-22 04:03:05 +0000
committerClint Adams <clint@users.sourceforge.net>2005-01-22 04:03:05 +0000
commit0038b1a68265a2c8136f90d63fae15a121b9341c (patch)
treed1fd810bcf817cf9fa04da712bf304b33a6fc4e6
parentd94e9817cec2b0c2fd692fd839f77f376309008a (diff)
downloadzsh-0038b1a68265a2c8136f90d63fae15a121b9341c.tar.gz
zsh-0038b1a68265a2c8136f90d63fae15a121b9341c.zip
* 2073x: Src/Zle/zle_utils.c, Src/hist.c: modify zlegetline() and zlegetline
caller so that the octet-based and wide-character versions should return the same string.
-rw-r--r--ChangeLog4
-rw-r--r--Src/Zle/zle_utils.c27
-rw-r--r--Src/hist.c3
3 files changed, 32 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index a1c88dbc8..8b769f570 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -3,6 +3,10 @@
* unposted (cf. zsh-users/8412): Config/version.mk: fix
year typo.
+ * 2073x: Src/Zle/zle_utils.c, Src/hist.c: modify zlegetline() and
+ zlegetline caller so that the octet-based and wide-character
+ versions should return the same string.
+
2005-01-21 Bart Schaefer <schaefer@brasslantern.com>
* unposted (cf. zsh-users/8409): Functions/Zle/keeper: "keeper"
diff --git a/Src/Zle/zle_utils.c b/Src/Zle/zle_utils.c
index 611e7414f..d769e8363 100644
--- a/Src/Zle/zle_utils.c
+++ b/Src/Zle/zle_utils.c
@@ -89,10 +89,35 @@ zleaddtoline(int chr)
mod_export unsigned char *
zlegetline(int *ll, int *cs)
{
+ char *s;
+#ifdef ZLE_UNICODE_SUPPORT
+ char *mb_cursor;
+ int i, j;
+ size_t mb_len = 0;
+
+ mb_cursor = s = zalloc(zlell * MB_CUR_MAX);
+
+ for(i=0;i<=zlell;i++) {
+ if (i == zlecs)
+ *cs = mb_len;
+ j = wctomb(mb_cursor, zleline[i]);
+ if (j == -1) {
+ /* invalid char; what to do? */
+ } else {
+ mb_len += j;
+ }
+ }
+
+ *ll = mb_len;
+
+ return (unsigned char *)s;
+#else
*ll = zlell;
*cs = zlecs;
- return zleline;
+ s = ztrdup(zleline);
+ return (unsigned char *)s;
+#endif
}
diff --git a/Src/hist.c b/Src/hist.c
index 33c5ccfd9..0a557a3cd 100644
--- a/Src/hist.c
+++ b/Src/hist.c
@@ -2260,7 +2260,7 @@ bufferwords(LinkList list, char *buf, int *index)
if (zlegetlineptr) {
linein = zlegetlineptr(&ll, &cs);
} else {
- linein = "";
+ linein = ztrdup("");
ll = cs = 0;
}
zlell = ll + 1; /* length of line plus space added below */
@@ -2287,6 +2287,7 @@ bufferwords(LinkList list, char *buf, int *index)
p[zlell] = '\0';
inpush(p, 0, NULL);
}
+ zsfree(linein);
}
if (zlecs)
zlecs--;