Planning 3.0alpha21 for Friday (10/25)

Urban Widmark urban at teststation.com
Sun Oct 27 18:02:01 GMT 2002


On Sat, 26 Oct 2002, Andrew Bartlett wrote:

> >         pstring s2;
> >         smb_ucs2_t *p;
> > 
> > +       if (!(c & 0x80))
> > +               return strchr(s, c);    /* ascii */
> > +
> >         push_ucs2(NULL, ws, s, sizeof(ws), STR_TERMINATE);
> >         p = strrchr_w(ws, UCS2_CHAR(c));
> >         if (!p)
> 
> This looks wrong...
> 
> You need to check that every char in the string doesn't have 0x80, not
> just the first char.  My understanding is that once the 0x80 escape is
> set, we might have 'legitimate' characters following that have their
> meaning altered.  

I'm not checking the first char, I'm checking the char we are looking for.

I did think about this. And the way I read the strlower_m comment it said 
it was ok because all multi-bytes stayed away from the ascii values.
But it turns out that codepage 932 (for example) uses values < 0x80 
in the escaped bytes (assuming that uses this code, utf8 is ok with this).


Anyway, it seems like most of the gain in my measurement was from
inlining/macros of strchr done by gcc/glibc. For a certain testcase:

strchr			 0.04s
strchr_m_with_if	 3.4s
strchr_m_with_loop	 4.8s
strchr_m_ucs2		60.5s

So it's probably not worth adding a big, ugly loop there.

/Urban




More information about the samba-technical mailing list