about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--Src/Zle/zle_hist.c15
-rw-r--r--Src/Zle/zle_main.c5
-rw-r--r--Src/Zle/zle_misc.c2
-rw-r--r--Src/Zle/zle_params.c7
-rw-r--r--Src/Zle/zle_tricky.c10
-rw-r--r--Src/Zle/zle_utils.c16
7 files changed, 46 insertions, 14 deletions
diff --git a/ChangeLog b/ChangeLog
index 08965d3fc..80aae540b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2005-07-28  Peter Stephenson  <pws@csr.com>
 
+	* 21541: Src/Zle/zle_hist.c, Src/Zle/zle_main.c,
+	Src/Zle/zle_misc.c, Src/Zle/zle_params.c, Src/Zle/zle_tricky.c,
+	Src/Zle/zle_utils.c: remove some warnings from
+	ZLE_UNICODE_SUPPORT.
+
 	* unposted: Completion/Unix/Command/_perforce: updated for
 	features of Perforce 2005.1 release.
 
diff --git a/Src/Zle/zle_hist.c b/Src/Zle/zle_hist.c
index 67827d530..bed66ac0e 100644
--- a/Src/Zle/zle_hist.c
+++ b/Src/Zle/zle_hist.c
@@ -1068,7 +1068,8 @@ doisearch(char **args, int dir)
 	rpt:
 	    if (!sbptr && previous_search_len) {
 		if (previous_search_len > sibuf - FIRST_SEARCH_CHAR - 2) {
-		    ibuf = hrealloc(ibuf, sibuf, (sibuf + previous_search_len)
+		    ibuf = hrealloc((char *)ibuf, sibuf * ZLE_CHAR_SIZE,
+				    (sibuf + previous_search_len)
 				    * ZLE_CHAR_SIZE);
 		    sbuf = ibuf + FIRST_SEARCH_CHAR;
 		    sibuf += previous_search_len;
@@ -1096,7 +1097,7 @@ doisearch(char **args, int dir)
 	    } else if (cmd == Th(z_selfinsert)) {
 #ifdef ZLE_UNICODE_SUPPORT
 		if (!lastchar_wide_valid)
-		    getfullcharrest(lastchar);
+		    getrestchar(lastchar);
 #else
 		;
 #endif
@@ -1113,7 +1114,8 @@ doisearch(char **args, int dir)
 	    }
 	    set_isrch_spot(top_spot++, hl, pos, zlecs, sbptr, dir, nomatch);
 	    if (sbptr >= sibuf - FIRST_SEARCH_CHAR - 2) {
-		ibuf = hrealloc(ibuf, sibuf, sibuf * 2 * ZLE_CHAR_SIZE);
+		ibuf = hrealloc((char *)ibuf, sibuf * ZLE_CHAR_SIZE,
+				sibuf * 2 * ZLE_CHAR_SIZE);
 		sbuf = ibuf + FIRST_SEARCH_CHAR;
 		sibuf *= 2;
 	    }
@@ -1298,9 +1300,10 @@ getvisrchstr(void)
 #endif
 	    }
 	  ins:
-	    if(sptr == ssbuf - 1) {
-		char *newbuf = zhalloc(ssbuf *= 2);
-		strcpy(newbuf, sbuf);
+	    if (sptr == ssbuf - 1) {
+		ZLE_STRING_T newbuf =
+		    (ZLE_STRING_T) zhalloc((ssbuf *= 2) * ZLE_CHAR_SIZE);
+		ZS_strcpy(newbuf, sbuf);
 		statusline = sbuf = newbuf;
 	    }
 	    sbuf[sptr++] = LASTFULLCHAR;
diff --git a/Src/Zle/zle_main.c b/Src/Zle/zle_main.c
index 0f9d55226..e6f83cb3e 100644
--- a/Src/Zle/zle_main.c
+++ b/Src/Zle/zle_main.c
@@ -938,7 +938,7 @@ zleread(char **lp, char **rp, int flags, int context)
     zlecontext = context;
     histline = curhist;
     undoing = 1;
-    zleline = (unsigned char *)zalloc(((linesz = 256) + 2) * ZLE_CHAR_SIZE);
+    zleline = (ZLE_STRING_T)zalloc(((linesz = 256) + 2) * ZLE_CHAR_SIZE);
     *zleline = ZWC('\0');
     virangeflag = lastcmd = done = zlecs = zlell = mark = 0;
     vichgflag = 0;
@@ -1518,7 +1518,8 @@ wordcharstrigger(void)
 {
 #ifdef ZLE_UNICODE_SUPPORT
     zrealloc(zle_wordchars, strlen(wordchars)*MB_CUR_MAX);
-    mbsrtowcs(zle_wordchars, &wordchars, strlen(wordchars), NULL);
+    mbsrtowcs(zle_wordchars, (const char **)&wordchars,
+	      strlen(wordchars), NULL);
     /* TODO: error handling here */
 #endif
 }
diff --git a/Src/Zle/zle_misc.c b/Src/Zle/zle_misc.c
index 022d98e64..44bc611d5 100644
--- a/Src/Zle/zle_misc.c
+++ b/Src/Zle/zle_misc.c
@@ -724,7 +724,7 @@ makequote(ZLE_STRING_T str, size_t *len)
 	if (*l == ZWC('\''))
 	    qtct++;
     *len += 2 + qtct*3;
-    l = ol = (char *)zhalloc(*len * ZLE_CHAR_SIZE);
+    l = ol = (ZLE_STRING_T)zhalloc(*len * ZLE_CHAR_SIZE);
     *l++ = ZWC('\'');
     for (; str < end; str++)
 	if (*str == ZWC('\'')) {
diff --git a/Src/Zle/zle_params.c b/Src/Zle/zle_params.c
index f9ac4f284..f089a5f47 100644
--- a/Src/Zle/zle_params.c
+++ b/Src/Zle/zle_params.c
@@ -187,7 +187,7 @@ set_buffer(UNUSED(Param pm), char *x)
 static char *
 get_buffer(UNUSED(Param pm))
 {
-    return (char *)zlelineasstring((char *)zleline, zlell, 0, NULL, NULL, 1);
+    return (char *)zlelineasstring(zleline, zlell, 0, NULL, NULL, 1);
 }
 
 /**/
@@ -264,7 +264,7 @@ get_lbuffer(UNUSED(Param pm))
 static void
 set_rbuffer(UNUSED(Param pm), char *x)
 {
-    char *y;
+    ZLE_STRING_T y;
     int len;
 
     if (x && *x != ZWC('\0'))
@@ -610,7 +610,8 @@ static char *
 get_lsearch(UNUSED(Param pm))
 {
     if (previous_search_len)
-	return metafy(previous_search, previous_search_len, META_HEAPDUP);
+	return zlelineasstring(previous_search, previous_search_len, 0,
+			       NULL, NULL, 1);
     else
 	return "";
 }
diff --git a/Src/Zle/zle_tricky.c b/Src/Zle/zle_tricky.c
index 778305d18..f59823f0b 100644
--- a/Src/Zle/zle_tricky.c
+++ b/Src/Zle/zle_tricky.c
@@ -2332,9 +2332,19 @@ magicspace(char **args)
 	 bangq += 2)
 	if (bangq[1] == '"' && (bangq == (char *)zleline || bangq[-1] != '\\'))
 	    break;
+#ifdef ZLE_UNICODE_SUPPORT
+    /*
+     * TODO: expansion and completion with Unicode are currently
+     * fundamentally broken.  Most of the code for this hasn't been
+     * commented out, but crashing the shell just because you entered
+     * a space seems to be worth guarding against.
+     */
+    ret = selfinsert(args);
+#else
     if (!(ret = selfinsert(args)) &&
 	(!bangq || bangq + 2 > (char *)zleline + zlecs))
 	doexpandhist();
+#endif
     return ret;
 }
 
diff --git a/Src/Zle/zle_utils.c b/Src/Zle/zle_utils.c
index 5d63a9ebc..aa691bcdc 100644
--- a/Src/Zle/zle_utils.c
+++ b/Src/Zle/zle_utils.c
@@ -85,10 +85,23 @@ sizeline(int sz)
 
 /**/
 mod_export void
-zleaddtoline(ZLE_CHAR_T chr)
+zleaddtoline(int chr)
 {
     spaceinline(1);
+#ifdef ZLE_UNICODE_SUPPORT
+    /*
+     * TODO: the main shell has as yet very little notion of multibyte
+     * characters.  Until this gets fixed we just have to assume
+     * this is a complete character.
+     *
+     * Possibly we could get away with attempting to build up a
+     * multibyte character here, storing partial characters between
+     * calls.
+     */
+    zleline[zlecs++] = (ZLE_CHAR_T)chr;
+#else
     zleline[zlecs++] = chr;
+#endif
 }
 
 /*
@@ -188,7 +201,6 @@ stringaszleline(unsigned char *instr, int *outll, int *outsz)
     ZLE_STRING_T outstr;
     int ll, sz;
 #ifdef ZLE_UNICODE_SUPPORT
-    int cll;
     mbstate_t ps;
 #endif