[Libvir] [PATCH] Enhance virBuffer code

Daniel Veillard veillard at redhat.com
Thu Dec 13 23:15:21 UTC 2007


On Thu, Dec 13, 2007 at 11:21:31PM +0100, Jim Meyering wrote:
> "Richard W.M. Jones" <rjones at redhat.com> wrote:
> ...
> > + * virBufferURIEncodeString:
> > + * @buf:  the buffer to append to
> > + * @str:  the string argument which will be URI-encoded
> > + *
> > + * Append the string to the buffer.  The string will be URI-encoded
> > + * during the append (ie any non alpha-numeric characters are replaced
> > + * with '%xx' hex sequences).
> > + *
> > + * Returns 0 successful, -1 in case of internal or API error.
> > + */
> > +int
> > +virBufferURIEncodeString (virBufferPtr buf, const char *str)
> > +{
> > +    int grow_size = 0;
> > +    const char *p;
> > +    unsigned char uc;
> > +    const char *hex = "0123456789abcdef";
> > +
> > +    for (p = str; *p; ++p) {
> > +        /* Want to leave only strict 7 bit ASCII alphanumerics ... */
> > +        if ((*p >= '0' && *p <= '9') ||
> > +            (*p >= 'a' && *p <= 'z') ||
> > +            (*p >= 'A' && *p <= 'Z'))
> ...
> > +    for (p = str; *p; ++p) {
> > +        if ((*p >= '0' && *p <= '9') ||
> > +            (*p >= 'a' && *p <= 'z') ||
> > +            (*p >= 'A' && *p <= 'Z'))
> 
> Hi Rich,
> 
> What do you think of using this?
> 
>   isascii (*p) && isalnum (*p)

  I have learned to be very cautious of the is* macros because they
tend to be local dependant whichis usually really not what you would
like or expect. In that case this may work, but explicit ranges
are 100% clear about what you intend to accept or not, that's why I 
usually prefer them.

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