[U-Boot] [PATCH 1/3] lib: add uuid_str_to_bin for use with bootp and PXE uuid

Jason Hobbs jason.hobbs at calxeda.com
Mon Jun 6 23:59:07 CEST 2011


On Mon, Jun 06, 2011 at 11:30:59PM +0200, Wolfgang Denk wrote:
> Dear "Jason Hobbs",
> 
> In message <1307386157-3660-2-git-send-email-jason.hobbs at calxeda.com> you wrote:
> > Signed-off-by: Jason Hobbs <jason.hobbs at calxeda.com>
> > ---
> >  include/uuid.h |   28 ++++++++++++++++++++++++++++
> >  lib/Makefile   |    1 +
> >  lib/uuid.c     |   50 ++++++++++++++++++++++++++++++++++++++++++++++++++
> 
> Is this new code, or copied from somewhere?

New code

> >  3 files changed, 79 insertions(+), 0 deletions(-)
> >  create mode 100644 include/uuid.h
> >  create mode 100644 lib/uuid.c
> > 
> > diff --git a/include/uuid.h b/include/uuid.h
> > new file mode 100644
> > index 0000000..f5a242b
> > --- /dev/null
> > +++ b/include/uuid.h
> ...
> > +void uuid_str_to_bin(const char *uuid, unsigned char *out);
> 
> Do we really need a new header file for just this single prototype.
> Please add to common.h

Ok
 
> > index afa6914..82b318d 100644
> > --- a/lib/Makefile
> > +++ b/lib/Makefile
> > @@ -53,6 +53,7 @@ COBJS-y	+= strmhz.o
> >  COBJS-y += time.o
> >  COBJS-y += vsprintf.o
> >  COBJS-$(CONFIG_RBTREE)	+= rbtree.o
> > +COBJS-y += uuid.o
> 
> Please sort list, amd make compilation conditional.

Ok

> 
> > +void uuid_str_to_bin(const char *uuid, unsigned char *out)
> > +{
> > +	uint16_t tmp16;
> > +	uint32_t tmp32;
> > +	uint64_t tmp64;
> > +
> > +	tmp32 = cpu_to_le32(simple_strtoul(uuid, NULL, 16));
> > +	memcpy(out, &tmp32, 4);
> > +
> > +	tmp16 = cpu_to_le16(simple_strtoul(uuid + 9, NULL, 16));
> > +	memcpy(out + 4, &tmp16, 2);
> > +
> > +	tmp16 = cpu_to_le16(simple_strtoul(uuid + 14, NULL, 16));
> > +	memcpy(out + 6, &tmp16, 2);
> > +
> > +	tmp16 = cpu_to_be16(simple_strtoul(uuid + 19, NULL, 16));
> > +	memcpy(out + 8, &tmp16, 2);
> > +
> > +	tmp64 = cpu_to_be64(simple_strtoull(uuid + 24, NULL, 16));
> > +	memcpy(out + 10, (char *)&tmp64 + 2, 6);
> 
> Should we perform _any_ checking for errors here?

Did you have something in mind?  If someone passes in an invalid UUID
they'll get a bad result, but it won't lead to memory corruption or
other catastrophic results unless one of the pointers passed in is bad,
which there is no way to check for, as far as I know. We could check for
acceptable hex digits and dashes in the correct places, but it would add
a little overhead and code size.

Jason


More information about the U-Boot mailing list