Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: PATCH: Re: Broken completion with UTF-8 description
- X-seq: zsh-workers 22757
- From: Peter Stephenson <p.w.stephenson@xxxxxxxxxxxx>
- To: zsh-workers@xxxxxxxxxx
- Subject: Re: PATCH: Re: Broken completion with UTF-8 description
- Date: Thu, 21 Sep 2006 21:02:51 +0100
- In-reply-to: <200609212104.23198.arvidjaar@xxxxxxxxxx>
- Mailing-list: contact zsh-workers-help@xxxxxxxxxx; run by ezmlm
- References: <200609171853.57050.arvidjaar@xxxxxxxxxx> <20060917201612.fe9933d5.p.w.stephenson@xxxxxxxxxxxx> <200609212104.23198.arvidjaar@xxxxxxxxxx>
On Thu, 21 Sep 2006 21:04:17 +0400
Andrey Borzenkov <arvidjaar@xxxxxxxxxx> wrote:
> static int
> cd_sort(const void *a, const void *b)
> {
> - - return strcmp((*((Cdstr *) a))->str, (*((Cdstr *) b))->str);
> + char *as = ztrdup((*((Cdstr *) a))->str);
> + int aslen = strlen(as);
> + char *bs = ztrdup((*((Cdstr *) b))->str);
> + int bslen = strlen(bs);
> + int ret;
> +
> + unmetafy(as, &ret);
> + unmetafy(bs, &ret);
> + ret = strpcmp(&as, &bs);
> + zfree(as, aslen);
> + zfree(bs, bslen);
> + return ret;
> }
Looking in more detail, cd_sort is passed as an argument to qsort(), so
it may be called many times while sorting the arguments. It's therefore
probably better to do the conversion in the caller, of which there's
only one at line 270, i.e. the str elements of the values in the array
grps should be copied to an array of unmetafied strings, and then simply
call strpcmp() in cd_sort. In fact, since you're doing a copy anyway
you could probably convert the array to a format where you can pass
strpcmp() as the final argument and eliminate cd_sort() altogether.
That ought to improve your speed problem quite a bit.
--
Peter Stephenson <p.w.stephenson@xxxxxxxxxxxx>
Web page now at http://homepage.ntlworld.com/p.w.stephenson/
Messages sorted by:
Reverse Date,
Date,
Thread,
Author