Print this page
4118 libuuid should provide uuid_unparse_{upper,lower} functions
Reviewed by: Serghei Samsi <sscdvp@gmail.com>
Reviewed by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
Reviewed by: Robert Mustacchi <rm@joyent.com>
Reviewed by: Garrett D'Amore <garrett@damore.org>

*** 21,30 **** --- 21,31 ---- /* * Copyright 2008 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. * Copyright 2012 Milan Jurik. All rights reserved. * Copyright 2013 Joyent, Inc. All rights reserved. + * Copyright 2014 Andrew Stormont. */ /* * The copyright in this file is taken from the original Leach & Salz * UUID specification, from which this implementation is derived.
*** 576,587 **** /* * This function converts the supplied UUID uu from the internal * binary format into a 36-byte string (plus trailing null char) * and stores this value in the character string pointed to by out. */ ! void ! uuid_unparse(uuid_t uu, char *out) { struct uuid uuid; uint16_t clock_seq; char etheraddr[13]; int index = 0, i; --- 577,588 ---- /* * This function converts the supplied UUID uu from the internal * binary format into a 36-byte string (plus trailing null char) * and stores this value in the character string pointed to by out. */ ! static void ! uuid_unparse_common(uuid_t uu, char *out, boolean_t upper) { struct uuid uuid; uint16_t clock_seq; char etheraddr[13]; int index = 0, i;
*** 589,618 **** /* basic sanity checking */ if (uu == NULL) { return; } - /* XXX user should have allocated enough memory */ - /* - * if (strlen(out) < UUID_PRINTABLE_STRING_LENGTH) { - * return; - * } - */ string_to_struct(&uuid, uu); clock_seq = uuid.clock_seq_hi_and_reserved; clock_seq = (clock_seq << 8) | uuid.clock_seq_low; for (i = 0; i < 6; i++) { ! (void) sprintf(&etheraddr[index++], "%.2x", uuid.node_addr[i]); index++; } etheraddr[index] = '\0'; ! (void) snprintf(out, 25, "%08x-%04x-%04x-%04x-", uuid.time_low, uuid.time_mid, uuid.time_hi_and_version, clock_seq); (void) strlcat(out, etheraddr, UUID_PRINTABLE_STRING_LENGTH); } /* * The uuid_is_null function compares the value of the supplied * UUID variable uu to the NULL value. If the value is equal * to the NULL UUID, 1 is returned, otherwise 0 is returned. */ --- 590,637 ---- /* basic sanity checking */ if (uu == NULL) { return; } string_to_struct(&uuid, uu); clock_seq = uuid.clock_seq_hi_and_reserved; clock_seq = (clock_seq << 8) | uuid.clock_seq_low; for (i = 0; i < 6; i++) { ! (void) sprintf(&etheraddr[index++], upper ? "%.2X" : "%.2x", ! uuid.node_addr[i]); index++; } etheraddr[index] = '\0'; ! (void) snprintf(out, 25, ! upper ? "%08X-%04X-%04X-%04X-" : "%08x-%04x-%04x-%04x-", uuid.time_low, uuid.time_mid, uuid.time_hi_and_version, clock_seq); (void) strlcat(out, etheraddr, UUID_PRINTABLE_STRING_LENGTH); } + void + uuid_unparse_upper(uuid_t uu, char *out) + { + uuid_unparse_common(uu, out, B_TRUE); + } + + void + uuid_unparse_lower(uuid_t uu, char *out) + { + uuid_unparse_common(uu, out, B_FALSE); + } + + void + uuid_unparse(uuid_t uu, char *out) + { + /* + * Historically uuid_unparse on Solaris returns lower case, + * for compatibility we preserve this behaviour. + */ + uuid_unparse_common(uu, out, B_FALSE); + } + /* * The uuid_is_null function compares the value of the supplied * UUID variable uu to the NULL value. If the value is equal * to the NULL UUID, 1 is returned, otherwise 0 is returned. */