[libvirt] [PATCH] avoid one more ctype vs. sign-extension problem
Daniel Veillard
veillard at redhat.com
Fri May 9 12:48:07 UTC 2008
On Fri, May 09, 2008 at 12:13:50PM +0200, Jim Meyering wrote:
> Daniel Veillard <veillard at redhat.com> wrote:
> > On Thu, May 08, 2008 at 04:44:38PM +0200, Jim Meyering wrote:
> >> This change demonstrates that the new syntax-check rule's
> >> regexp can be improved. It missed the unsafe tolower use,
> >> since there was already a to_uchar use on that line.
> >
> > Since this shows up again, let me argue a bit more why I dislike
> > using is* and to* in libvirt.
>
> I agree completely, especially since I've just fixed three
> similar bugs in coreutils:
Ah, good, it's not just the Frenchman being overly stubborn then :-)
> http://thread.gmane.org/gmane.comp.gnu.coreutils.bugs/13512
> http://git.savannah.gnu.org/gitweb/?p=coreutils.git;a=commitdiff;h=209850fd7
>
> I'm in the process of removing all of them from libvirt, since there
> aren't many. Actually, I've just realized that the 'right' way to do
> this is to change each use of isspace to c_isspace, isdigit to c_isdigit,
> etc., relying on the gnulib c-ctype module:
>
> http://git.savannah.gnu.org/gitweb/?p=gnulib.git;a=blob;f=lib/c-ctype.h
That looks fine, yes.
> Looking into that, I see more room for improvement, i.e., where things
> like isdigit and isalnum have been open-coded. With these c_is* functions,
> we can have portability, readability, *and* efficiency:
>
> For example, compare these:
>
> while ((*cur >= '0') && (*cur <= '9')) {
>
> while (c_isdigit(*cur)) {
>
> ================================
> and these:
>
> char_ok =
> (model[i] >= '0' && model[i] <= '9') ||
> (model[i] >= 'a' && model[i] <= 'z') ||
> (model[i] >= 'A' && model[i] <= 'Z') || model[i] == '_';
>
> char_ok = c_isalnum (model[i]) || model[i] == '_';
>
> So I'm making changes like these, too.
great, thanks !
Daniel
--
Red Hat Virtualization group http://redhat.com/virtualization/
Daniel Veillard | virtualization library http://libvirt.org/
veillard at redhat.com | libxml GNOME XML XSLT toolkit http://xmlsoft.org/
http://veillard.com/ | Rpmfind RPM search engine http://rpmfind.net/
More information about the libvir-list
mailing list