␊ |
#include "convert.h"␊ |
␊ |
/** Transform a 16 bytes hexadecimal value UUID to a string */␊ |
const char* getStringFromUUID(const EFI_CHAR8* eUUID)␊ |
/* Return a string that is the representation of a 16 bytes UUID */␊ |
void getStringFromUUID(const uuid_t uuid, uuid_string_t out)␊ |
{␊ |
static char msg[UUID_LEN*2 + 8] = "";␊ |
if (!eUUID) return NULL;␊ |
const unsigned char * uuid = (unsigned char*) eUUID;␊ |
sprintf(msg, "%02X%02X%02X%02X-%02X%02X-%02X%02X-%02X%02X-%02X%02X%02X%02X%02X%02X",␊ |
␉␉ uuid[0], uuid[1], uuid[2], uuid[3],␊ |
␉␉ uuid[4], uuid[5], uuid[6], uuid[7],␊ |
␉␉ uuid[8], uuid[9], uuid[10],uuid[11],␊ |
␉␉ uuid[12],uuid[13],uuid[14],uuid[15]);␊ |
return msg;␊ |
sprintf((char*) out, "%02X%02X%02X%02X-%02X%02X-%02X%02X-%02X%02X-%02X%02X%02X%02X%02X%02X",␊ |
uuid[0], uuid[1], uuid[2], uuid[3],␊ |
uuid[4], uuid[5], uuid[6], uuid[7],␊ |
uuid[8], uuid[9], uuid[10],uuid[11],␊ |
uuid[12],uuid[13],uuid[14],uuid[15]);␊ |
}␊ |
␊ |
/* Parse an UUID string into an (EFI_CHAR8*) buffer␊ |
* Return a new allocated uuid␊ |
*/␊ |
EFI_CHAR8* newUUIDFromString(const char *source)␊ |
/* Parse an UUID string and return a new allocated UUID */␊ |
uuid_t* newUUIDFromString(const char *source)␊ |
{␊ |
␉if (! source) return NULL;␊ |
if (! source) return NULL;␊ |
␊ |
␉char* p = (char*) source;␊ |
␉int i;␊ |
␉char buf[3];␊ |
␉EFI_CHAR8 uuid[UUID_LEN+1];␊ |
␉EFI_CHAR8* result;␊ |
const char* p = source;␊ |
int i;␊ |
int len;␊ |
char uuid_hex[UUID_LEN*2+1];␊ |
␊ |
␉buf[2] = '\0';␊ |
␉for (i=0; i < UUID_LEN; i++) {␊ |
␉␉if (p[0] == '\0' || p[1] == '\0' || !isxdigit(p[0]) || !isxdigit(p[1])) {␊ |
␉␉␉return NULL;␊ |
␉␉}␊ |
␉␉buf[0] = *p++;␊ |
␉␉buf[1] = *p++;␊ |
␉␉uuid[i] = (unsigned char) strtoul(buf, NULL, 16);␊ |
␉␉if (*p == '-' && (i % 2) == 1 && i < UUID_LEN - 1) {␊ |
␉␉␉p++;␊ |
␉␉}␊ |
␉}␊ |
␉uuid[UUID_LEN]='\0';␊ |
// Check if UUID is valid␊ |
for (i=0; *p != 0 && i < UUID_LEN*2; p++) {␊ |
if (*p == '-')␊ |
continue;␊ |
␊ |
␉if (*p != '\0') {␊ |
␉␉return NULL;␊ |
␉}␊ |
if (!isxdigit(*p)) {␊ |
return NULL;␊ |
}␊ |
uuid_hex[i++] = *p;␊ |
}␊ |
␊ |
␉result = malloc(UUID_LEN+1);␊ |
␉bcopy(uuid, result, UUID_LEN+1);␊ |
// invalid size␊ |
if (*p != 0 || i != UUID_LEN*2) {␊ |
return NULL;␊ |
}␊ |
␊ |
␉return result;␊ |
uuid_hex[i] = 0; // null terminated string␊ |
␊ |
return convertHexStr2Binary(uuid_hex, &len);␊ |
}␊ |
␊ |
/** XXX AsereBLN replace by strtoul */␊ |
|
return NULL;␊ |
}␊ |
}␊ |
␊ |
// FIXME: can't use my original code here,␊ |
// Ironically, trying to reuse convertHexStr2Binary() would RESET the system!␊ |
/*␊ |
static EFI_CHAR8* getUUIDFromString2(const char * szInUUID)␊ |
{␊ |
char szUUID[UUID_LEN+1], *p=szUUID;␊ |
int size=0;␊ |
void* ret;␊ |
␊ |
if (!szInUUID || strlen(szInUUID)<UUID_LEN) return (EFI_CHAR8*) 0;␊ |
␊ |
while(*szInUUID) if (*szInUUID!='-') *p++=*szInUUID++; else szInUUID++;␊ |
*p='\0';␊ |
ret = convertHexStr2Binary(szUUID, &size);␊ |
if (!ret || size!=UUID_LEN)␊ |
{␊ |
verbose("UUID: cannot convert string <%s> to valid UUID.\n", szUUID);␊ |
return (EFI_CHAR8*) 0;␊ |
}␊ |
return (EFI_CHAR8*) ret; // new allocated buffer containing the converted string to bin␊ |
}␊ |
*/␊ |