From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 14240 invoked from network); 19 Jan 2005 01:26:43 -0000 Received: from news.dotsrc.org (HELO a.mx.sunsite.dk) (130.225.247.88) by ns1.primenet.com.au with SMTP; 19 Jan 2005 01:26:43 -0000 Received: (qmail 36557 invoked from network); 19 Jan 2005 01:26:37 -0000 Received: from sunsite.dk (130.225.247.90) by a.mx.sunsite.dk with SMTP; 19 Jan 2005 01:26:37 -0000 Received: (qmail 13836 invoked by alias); 19 Jan 2005 01:26:35 -0000 Mailing-List: contact zsh-workers-help@sunsite.dk; run by ezmlm Precedence: bulk X-No-Archive: yes X-Seq: 20726 Received: (qmail 13823 invoked from network); 19 Jan 2005 01:26:34 -0000 Received: from news.dotsrc.org (HELO a.mx.sunsite.dk) (130.225.247.88) by sunsite.dk with SMTP; 19 Jan 2005 01:26:34 -0000 Received: (qmail 36294 invoked from network); 19 Jan 2005 01:26:34 -0000 Received: from acolyte.scowler.net (216.254.112.45) by a.mx.sunsite.dk with SMTP; 19 Jan 2005 01:26:32 -0000 Received: by acolyte.scowler.net (Postfix, from userid 1000) id CFF2E7004A; Tue, 18 Jan 2005 20:26:30 -0500 (EST) Date: Tue, 18 Jan 2005 20:26:30 -0500 From: Clint Adams To: Peter Stephenson Cc: zsh-workers@sunsite.dk Subject: Re: PATCH: minor zle_utils fix Message-ID: <20050119012630.GA2463@scowler.net> Mail-Followup-To: Peter Stephenson , zsh-workers@sunsite.dk References: <20050116162247.GA26801@scowler.net> <200501171040.j0HAe6mY003515@news01.csr.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <200501171040.j0HAe6mY003515@news01.csr.com> User-Agent: Mutt/1.5.6+20040907i X-Spam-Checker-Version: SpamAssassin 3.0.2 on a.mx.sunsite.dk X-Spam-Level: X-Spam-Status: No, score=-2.6 required=6.0 tests=AWL,BAYES_00 autolearn=ham version=3.0.2 X-Spam-Hits: -2.6 > The API for the Unicode version is not yet defined, but it will probably > be that way. The alternative is to create it on the heap, but I hope > it will usually be easy enough to free it explicitly. The existing > non-Unicode version will presumably remain the way it is. I'm not committing this because it changes the non-Unicode version; would you rather ifdef the free()'s in the calling functions? --- orig/Src/Zle/zle_utils.c +++ mod/Src/Zle/zle_utils.c @@ -89,10 +89,36 @@ mod_export unsigned char * zlegetline(int *ll, int *cs) { + char *s; +#ifdef ZLE_UNICODE_SUPPORT + char *mb_cursor; + int i, j; + size_t wc_len, mb_len = 0; + + wc_len = wcslen(zleline); + mb_cursor = s = zalloc(wc_len * MB_CUR_MAX); /* perhaps try less first then realloc */ + + 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 }