#include "project.h" static struct known_struct { GUID g; char *name; } known_guids[] = { { GUID_TYPE_EMPTY, "empty"}, { GUID_TYPE_SYSTEM, "EFI SYSTEM"}, {GUID_TYPE_LINUX_EXT3,"linux-ext3"}, {GUID_TYPE_LINUX_SWAP,"linux-swap"}, {GUID_TYPE_APPLE_HFS,"apple-hfs"}, { {0}, NULL} }; int guid_cmp(GUID *a,GUID *b) { return memcmp(a,b,sizeof(GUID)); } #define GUIDTOARETSIZE 80 char * guid_to_a (GUID g) { char *ret = malloc (GUIDTOARETSIZE); struct known_struct *ptr = known_guids; snprintf (ret, GUIDTOARETSIZE, "%02X%02X%02X%02X-%02X%02X-%02X%02X-%02X%02X-%02X%02X%02X%02X%02X%02X", g.d[3], g.d[2], g.d[1], g.d[0], g.d[5], g.d[4], g.d[7], g.d[6], g.d[8], g.d[9], g.d[10], g.d[11], g.d[12], g.d[13], g.d[14], g.d[15]); while (ptr->name) { if (!guid_cmp (&g, &ptr->g)) { strcat (ret, " ("); strcat (ret, ptr->name); strcat (ret, ")"); } ptr++; } return ret; } int a_to_guid (char *a,GUID *g) { struct known_struct *ptr = known_guids; int digit[32],ndigits=0,i; while (ptr->name) { if (!strcmp (a, ptr->name)) memcpy(g,&ptr->g,sizeof(GUID)); return 0; } while ((*a) && (ndigits!=32)) { switch (*a) { case ' ': case '\t': case '\n': case '\r': case '-': break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': digit[ndigits++]=(*a)-'0'; break; case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': digit[ndigits++]=((*a)-'A')+0xA; break; case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': digit[ndigits++]=((*a)-'a')+0xa; break; defalt: return -1; } } for (i=0;i<16;++i) { g->d[i]=(digit[(i<<1)] << 4) | digit[(i<<1)+1]; } return 0; } GUID random_guid(void) { GUID ret; int fd=open("/dev/random",O_RDONLY); read(fd,&ret,sizeof(ret)); close(fd); return ret; }