mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-21 13:34:40 +03:00
o Pretty print and read for uuid's
This commit is contained in:
parent
52864eda2e
commit
db73838ca4
@ -15,6 +15,9 @@
|
|||||||
static unsigned char _c[] =
|
static unsigned char _c[] =
|
||||||
"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
||||||
|
|
||||||
|
static int _built_inverse;
|
||||||
|
static unsigned char _inverse_c[256];
|
||||||
|
|
||||||
int id_create(struct id *id)
|
int id_create(struct id *id)
|
||||||
{
|
{
|
||||||
int random, i, len = sizeof(id->uuid);
|
int random, i, len = sizeof(id->uuid);
|
||||||
@ -37,9 +40,37 @@ int id_create(struct id *id)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The only validity check we have is that
|
||||||
|
* the uuid just contains characters from
|
||||||
|
* '_c'. A checksum would have been nice :(
|
||||||
|
*/
|
||||||
|
void _build_inverse(void)
|
||||||
|
{
|
||||||
|
char *ptr;
|
||||||
|
|
||||||
|
if (_built_inverse)
|
||||||
|
return;
|
||||||
|
|
||||||
|
memset(_inverse_c, 0, sizeof(_inverse_c));
|
||||||
|
|
||||||
|
for (ptr = _c; *ptr; ptr++)
|
||||||
|
_inverse_c[(int) *ptr] = (char) 0x1;
|
||||||
|
}
|
||||||
|
|
||||||
int id_valid(struct id *id)
|
int id_valid(struct id *id)
|
||||||
{
|
{
|
||||||
log_err("Joe hasn't written id_valid yet");
|
int i;
|
||||||
|
char lookup[256];
|
||||||
|
|
||||||
|
_build_inverse();
|
||||||
|
|
||||||
|
for (i = 0; i < ID_LEN; i++)
|
||||||
|
if (!_inverse_c[id->uuid[i]]) {
|
||||||
|
log_err("UUID contains invalid character");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -47,3 +78,34 @@ int id_cmp(struct id *lhs, struct id *rhs)
|
|||||||
{
|
{
|
||||||
return memcmp(lhs->uuid, rhs->uuid, sizeof(lhs->uuid));
|
return memcmp(lhs->uuid, rhs->uuid, sizeof(lhs->uuid));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define GROUPS (ID_LEN / 4)
|
||||||
|
int id_format(struct id *id, char *buffer, size_t size)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
/* split into 8 groups of four, with dashes in between */
|
||||||
|
if (size < (GROUPS * 5))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
for (i = 0; i < GROUPS; i++) {
|
||||||
|
memcpy(buffer + (i * 5), id.uuid + (i * 4), 4);
|
||||||
|
buffer[(i * 5) + 4] = '-';
|
||||||
|
}
|
||||||
|
|
||||||
|
buffer[GROUPS * 5] = '\0';
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int id_read_format(struct id *id, char *buffer)
|
||||||
|
{
|
||||||
|
if (strlen(buffer) < (GROUPS * 5)) {
|
||||||
|
log_err("Insufficient characters to be a proper uuid.");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < ID_LEN; i++)
|
||||||
|
id->uuid[i] = buffer[((i / 4) * 5) + (i % 4)];
|
||||||
|
|
||||||
|
return id_valid(id);
|
||||||
|
}
|
||||||
|
@ -19,4 +19,15 @@ int id_create(struct id *id);
|
|||||||
int id_valid(struct id *id);
|
int id_valid(struct id *id);
|
||||||
int id_cmp(struct id *lhs, struct id *rhs);
|
int id_cmp(struct id *lhs, struct id *rhs);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Fills 'buffer' with a more human readable form
|
||||||
|
* of the uuid.
|
||||||
|
*/
|
||||||
|
int id_write_format(struct id *id, char *buffer, size_t size);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Reads a formatted uuid.
|
||||||
|
*/
|
||||||
|
int id_read_format(struct id *id, char *buffer);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user