blob: ce3f88db76c688d357e3c348cfde9c30ffc3a221 [file] [log] [blame]
Theodore Ts'o1e3472c1997-04-29 14:53:37 +00001/*
2 * parse.c --- UUID parsing
3 */
4
5#include <stdio.h>
6
7#include "uuidP.h"
8
9int uuid_parse(char *in, uuid_t uu)
10{
11 struct uuid uuid;
12 int i;
13 char *cp, buf[3];
14
15 if (strlen(in) != 36)
16 return -1;
17 for (i=0, cp = in; i <= 36; i++,cp++) {
18 if ((i == 8) || (i == 13) || (i == 18) ||
19 (i == 23))
20 if (*cp == '-')
21 continue;
22 if (i== 36)
23 if (*cp == 0)
24 continue;
25 if (!isxdigit(*cp))
26 return -1;
27 }
28 uuid.time_low = strtoul(in, NULL, 16);
29 uuid.time_mid = strtoul(in+9, NULL, 16);
30 uuid.time_hi_and_version = strtoul(in+14, NULL, 16);
31 uuid.clock_seq = strtoul(in+19, NULL, 16);
32 cp = in+24;
33 buf[2] = 0;
34 for (i=0; i < 6; i++) {
35 buf[0] = *cp++;
36 buf[1] = *cp++;
37 uuid.node[i] = strtoul(buf, NULL, 16);
38 }
39
40 uuid_pack(&uuid, uu);
41 return 0;
42}