/* * Copyright (C) 2007 Michael Brown . * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of the * License, or any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. * * You can also choose to distribute this program under the terms of * the Unmodified Binary Distribution Licence (as given in the file * COPYING.UBDL), provided that you have satisfied its requirements. */ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); #include #include #include #include #include #include /** @file * * Universally unique IDs * */ /** * Convert UUID to printable string * * @v uuid UUID * @ret string UUID in canonical form */ const char * uuid_ntoa ( const union uuid *uuid ) { static char buf[37]; /* "00000000-0000-0000-0000-000000000000" */ sprintf ( buf, "%08x-%04x-%04x-%04x-%02x%02x%02x%02x%02x%02x", be32_to_cpu ( uuid->canonical.a ), be16_to_cpu ( uuid->canonical.b ), be16_to_cpu ( uuid->canonical.c ), be16_to_cpu ( uuid->canonical.d ), uuid->canonical.e[0], uuid->canonical.e[1], uuid->canonical.e[2], uuid->canonical.e[3], uuid->canonical.e[4], uuid->canonical.e[5] ); return buf; } /** * Parse UUID * * @v string UUID string * @v uuid UUID to fill in * @ret rc Return status code */ int uuid_aton ( const char *string, union uuid *uuid ) { int len; int rc; /* Decode as hex string with optional '-' separator */ len = hex_decode ( ( '-' | HEX_DECODE_OPTIONAL ), string, uuid->raw, sizeof ( *uuid ) ); if ( len < 0 ) { rc = len; return rc; } /* Check length */ if ( len != sizeof ( *uuid ) ) return -EINVAL; return 0; }